• User

    mostrare contenuto caricato dinamicamente da database

    Ciao a tutti,
    dovrei realizzare una sezione del mio sito dove mostrare una griglia con una serie di contenuti caricati dinamicamente dal database. Premetto che non sono esperto in php però ho realizzato questo codice che intanto mostra il contenuto.

     [PHP]
    

    <?php
    require("dati.php");
    $tot = 10;
    $query = "SELECT * FROM mia_tabella
    WHERE id = 'xxx'
    LIMIT 0,$tot";
    $result = mysql_query($query)
    or die("Caricamento fallito: ".mysql_error());
    while ($row = mysql_fetch_array($result))
    {
    echo "<font><b>", $row['title'], "</b></font>";
    echo "<br>";
    echo "<font>", $row['introtext'], "</font><br><br>";
    //echo "<img src='", $row['images'], "'/><br><br>";
    }

                            mysql_close($connection); 
                                             
                        ?>  
    

    [/PHP]
    [PHP]
    <?php
    $connection = mysql_connect("host", "user", "password")
    or die("Impossibile connettersi al server");
    $db = mysql_select_db("nome db", $connection)
    or die ("Impossibile connettersi al Database");
    ?>

    [/PHP]

    Ora vorrei che cliccando su tutto il contenuto mi si aprisse un pop-up che mostrasse il fulltext del contenuto, da caricare sempre dinamicamente dal database. come posso fare?...qui mi sono bloccato...


  • User Attivo

    Il codice lato PHP resta quello, dovrai solamente cambiare la parte stampata in echo, all'interno di pop up.

    Per pop up cosa intendi? Nuove finestre del browser o box che compaiono all'interno della pagina?


  • User

    ciao e grazie per la risposta.
    per pop-up intendo box che compare all'interno della pagine.


  • User

    ho provato così ma non funziona...nel pop-up non vedo nulla. il codice per aprire pop-up l'ho trovato in rete.

    [HTML]
    <html>
    <head>
    <meta charset="UTF-8">
    <title>Documento senza titolo</title>

    <script src="js/targetweb-modal-overlay.js"></script>
    <script>
    $(document).ready(function() {

    TrgModalOverlay();
    

    });
    </script>

    </head>

    <body>
    <div class="agenda">
    <?php
    require("dati.php");
    $tot = 10;
    $query = "SELECT * FROM mio_content
    WHERE catid = '14'
    ORDER by catid desc
    LIMIT 0,$tot";
    $result = mysql_query($query)
    or die("Caricamento fallito: ".mysql_error());
    while ($row = mysql_fetch_array($result))
    {
    echo "<font><b>", $row['title'], "</b></font>";
    echo "<br>";
    echo "<font>", $row['introtext'], "</font><br><br>";
    echo "<img src='", $row['images'], "'/><br><br>";
    echo "<a href='#' class='apri-trg-overlay' data='modal1'>apri</a>";
    echo "<div id='modal1' class='trg-overlay hide small'>";
    echo "<p>",$row['fulltext'],"</p>";
    echo "<a class='close-overlay'>×</a>";
    echo " </div>";
    }

                            mysql_close($connection);
                                            
                        ?>
      </div>
    

    </body>

    </html>

    [/HTML]

    [PHP]
    //TrgReveal - Creato da Riccardo Mel - Targetweb.it
    eval(function(p,a,c,k,e,r){e=function(c){return c.toString(a)};if(!''.replace(/^/,String)){while(c--)r[e(c)]=k||e(c);k=[function(e){return r}];e=function(){return'\w+'};c=1};while(c--)if(k)p=p.replace(new RegExp('\b'+e(c)+'\b','g'),k);return p}('7 w(){$(".v-a-1").b(7(e){c 5=$(u).t("s");$(".1").q().4("3",$(p).o()).4("d","0").m({"d":"0.6"},"r");c 3=($(k).j()-$("#"+5+"").j())/2;c 8=($(k).f()-$("#"+5+"").f())/2;$("#"+5+"").4("8",8).4("3",3).l();e.9()});$(".1").b(7(e){$(".1").i(h);$(".a-1").g();e.9()});$(".n-1").b(7(e){$(".1").i(h);$(".a-1").g();e.9()})}7 x(5){$(".1").q().4("3",$(p).o()).4("d","0").m({"d":"0.6"},"r");c 3=($(k).j()-$("#"+5+"").j())/2;c 8=($(k).f()-$("#"+5+"").f())/2;$("#"+5+"").4("8",8).4("3",3).l();$(".1").b(7(e){$(".1").i(h);$(".a-1").g();e.9()});$(".n-1").b(7(e){$(".1").i(h);$(".a-1").g();e.9()})}',34,34,'|overlay||top|css|id_modal||function|left|stopPropagation|trg|click|var|opacity||width|hide|500|fadeOut|height|window|fadeIn|animate|close|scrollTop|document|show|slow|data|attr|this|apri|TrgModalOverlay|TrgModalOverlayLoader'.split('|'),0,{}))
    [/PHP]


  • User

    no no. funziona!...

    vedi criticità nel codice che ho scritto?... nel senso, è stabile?oppure esiste un modo più lineare per scriverlo? un codice più pulito non so..


  • User Attivo

    Qui.

    echo "<p>",$row['fulltext'],"</p>";
    Le concatenazioni si fanno con i punti, non con le virgole.

    Quindi sarebbe:

    echo "<p>" . $row['fulltext'] . "</p>";

    Ho preso l'ultimo, ma dando uno sguardo veloce lo stesso errore è presente anche in diversi altri punti. Prova a correggere, vediamo se così va...

    Sul js non saprei dirti, se l'effetto che hai trovato online ti piace, usa quello. 😄

    Per il codice php nella sua interezza, io piuttosto che ripetere tanti echo (che tra l'altro contengono delle concatenazioni) mi trovo meglio con le concatenazioni direttamente in un unico echo. Inoltre, se ho del codice html nell'echo, che usa quindi molti doppi apici, apro l'echo con l'apice singolo:

    <html>
    <head>
    <meta charset="UTF-8" />
    <title>Documento senza titolo</title>
    <script src="js/targetweb-modal-overlay.js"></script>
    <script>$(document).ready(function() { TrgModalOverlay(); });</script>
    </head>
    <body>
    <div class="agenda">
    <?php
    require("dati.php");
    $tot = 10;
    $query = "SELECT *
    FROM mio_content
    WHERE catid = 14
    ORDER by catid DESC
    LIMIT 0, " . $tot;
    $result = mysql_query($query)
    or die("Caricamento fallito: " . mysql_error());

    while($row = mysql_fetch_array($result)) {
    echo '<font><b>' . $row["title"] . '</b></font><br />
    <font>' . $row["introtext"] . '</font><br /><br />
    <img src="' . $row["images"] . '" /><br /><br />
    <a href="#" class="apri-trg-overlay" data="modal1">apri</a>
    <div id="modal1" class="trg-overlay hide small">
    <p>' . $row['fulltext'] . '</p>
    <a class="close-overlay">×</a>
    </div>';
    }
    mysql_close($connection);
    ?>
    </div>
    </body>
    </html>


  • User

    ok grazie. funziona anche con le virgole però se tu mi dici che è più corretto concatenare con i . lo faccio. il codice quindi è stabile? nel senso, anche la connessione al database etc. è sicuro?protetto?...
    non vorrei ritrovarmi attaccato da hacker o roba del genere.


  • User Attivo

    Così come è scritto si. Se invece invii al database input da parte dell'utente (es. $_GET o $_POST, comunque dati manipolabili dall'utente), è sempre bene controllare i dati prima di inserirli nelle query.

    Ti consiglio in tal caso questo tutorial sul forum giorgiotave: Tutorial area privata di TheDarkITA (lo trovi con ricerca, non mi fa mettere url..)
    In particolare questa parte:

    // Dati Inviati dal modulo
    $user = (isset($_POST['user'])) ? trim($_POST['user']) : '';    // Metto nella variabile 'user' il dato inviato dal modulo, se non viene inviato dò di default ''
    $pass = (isset($_POST['pass'])) ? trim($_POST['pass']) : '';    // Metto nella variabile 'pass' il dato inviato dal modulo, se non viene inviato dò di default ''
    
    // Filtro i dati inviati se i magic_quotes del server sono disabilitati per motivi di sicurezza
    if (!get_magic_quotes_gpc()) {
        $user = addslashes($user);
        $pass = addslashes($pass);
    }
    

    Così dovresti evitare SQL Injections.

    Per la connessione, mysql_connect() potresti sostituirlo con mysqli. Trovi info su google (mysql to mysqli).

    Però, se a te funziona e il tuo hosting non aggiorna la versione PHP (a meno che non gli fai richiesta esplicita), potresti anche mantenere mysql_connect().
    Tieni conto che attualmente PHP segnala la funzione come deprecata, quindi in prossime versioni potrebbe non essere più supportata.