• User Attivo

    GET + contenuto tabella da MySQL

    Salve a tutti.

    Sto strutturando il mio sito con MySQL e il PHP che richiama i contenuti dal database con GET.
    Ho una pagina index.php e una view.php.

    view.php
    [PHP]
    <?php
    /// Connessione al database già effettuata
    $query="SELECT contenuto FROM pagine WHERE id=$_GET[id]";
    $result=mysql_query($query,$connessione);
    $righe=mysql_num_rows($result);
    for ($i=0;$i<$righe;$i++)
    {
    $array_result=mysql_fetch_row($result);
    $contenuto=$array_result[0];
    echo $contenuto;
    }
    ?>
    [/PHP]

    index.php
    [HTML]
    <a href="view.php?id=13">Cliccami!</a>
    [/HTML]

    Il database contiene una tabella di nome "pagine" che contiene a sua volta le tabelle "contenuto", "titolo" e "id" che è una chiave Primaria con Auto-Increment.

    Ora il punto è questo: il sistema funziona benissimo, cliccando su "Cliccami!" visualizzo il contenuto di "About" che corrisponde all' Id 13.
    Ora se io volessi fare in modo tale che index.php sia in questo modo

    index.php
    [HTML]
    <a href="view.php?titolo=about">Cliccami!</a>
    [/HTML]

    come dovrei fare ? Sto provando in tutti i modi ma PHP mi dà un errore alla linea 11 (che corrisponde a $righe=mysql_num_rows($result);)


  • User

    where titolo=$_GET['titolo']

    atentione i dati prelevati da $_GET e $_POST vanno prima filtrati non bisogna mai fidarsi dei visitatori


  • User Attivo

    dovresti passargli nella query MYSql il titolo anzichè l'id ottenendo una cosa simile alla seguente:
    $query="SELECT contenuto FROM pagine WHERE titolo=$_GET[titolo]";

    Però occhio, la sintassi non è un optional di conseguenza la riga va corretta in questo modo:
    $query="SELECT contenuto FROM pagine WHERE titolo = '" . $_GET[titolo] . "'";

    Quando passi una stringa all'interno della query mysql necessita sempre di essere racchiusa tra apici.

    Il mio consiglio è quello di passargli la querystring con un ID anzichè una stringa, sia per una questione di sicurezza sia perchè ID è un numero univoco che non verrà mai modificato nel corso della vita della tua applicazione.


  • User

    Poi se usa l'id potrà verifficare meglio se quello che l'utente ha nel link è valido, io al posto tuo farei cosi:

    $id = htmlspecialchars(strip_tags($_GET['id']));
    if(!is_numeric($id)) echo 'Errore!';
    else {
    //connessione database;
    //istruzioni
    }