• User Attivo

    Ciao SEO Italy, ti ringrazio per la precisazione, ma quale altra soluzione per evitare SQL Injection ?
    Alla fine è un catalogo, come posso selezionare i prodotti dalle tabelle se passando le variabili in GET ?
    Grazie!

    Posso anche chiedere perchè per la lingua sarebbe preferibile utilizzare una variabile di sessione?


  • User Attivo

    Visto che ormai ho perso la speranza di far utilizzare una libreria per accedere al DB (la libreria da utilizzare è MDB2), la soluzione è usare mysql_real_escape_string così (ad esempio):
    [PHP]$query = "SELECT * FROM tabella_articoli WHERE id_articolo='" . mysql_real_escape_string($id) . "'";[/PHP]
    HTH, ciao! 🙂


  • User Attivo

    Ti ringrazio!
    Quindi come ho visto nel manuale PHP sarebbe sicuro e giusto e più semplice usare una piccola funzione per i GET e i POST ?
    [PHP]
    <?php
    function safe($value){
    return mysql_real_escape_string($value);
    }
    ?>

    Then, when I am using my code, I simply use:

    <?php
    $name = safe($_POST["name"]);
    $password = safe($_POST["password"]);
    ?>[/PHP]


  • User Attivo

    Mah, come vedi la funzione non fa altro che richiamare mysql_real_escape_string quindi ti basta usare quella, cioè
    [PHP]<?php
    $name = mysql_real_escape_string($_POST["name"]);
    $password = mysql_real_escape_string($_POST["password"]);
    ?>[/PHP]


  • User Attivo

    A questo punto avrei un'altra domanda.
    Nella creazione del mio sottomenu dovrei fare una ulteriore query per dividere i prodotti
    [PHP]//****************************************
    // qui dovrei rifare la query
    //****************************************
    <ul>
    <li><a href="prodotti.php?id=1">prodotto 1</a></li>
    <li><a href="prodotti.php?id=2">prodotto 2</a></li>
    <li><a href="prodotti.php?id=2">prodotto 2</a></li>
    <li><a href="prodotti.php?id=2">prodotto 2</a></li>
    <li><a href="prodotti.php?id=2">prodotto 2</a></li>
    <li><a href="prodotti.php?id=2">prodotto 2</a></li>
    <li><a href="prodotti.php?id=2">prodotto 2</a></li>
    <li><a href="prodotti.php?id=2">prodotto 2</a></li>
    </ul>
    </dd>
    <dt><a href="/discuss/">Modulo 2700</a></dt>
    <dd>
    <ul>
    //****************************************
    // qui dovrei rifare la query
    //****************************************
    <li><a href="prodotti.php?id=2">prodotto 2</a></li>
    <li><a href="prodotti.php?id=2">prodotto 2</a></li>
    <li><a href="prodotti.php?id=2">prodotto 2</a></li>
    <li><a href="prodotti.php?id=2">prodotto 2</a></li>
    </ul>
    </dd>
    <dt><a href="/dev/">Modulo 2500</a></dt>
    <dd>
    <ul>
    //****************************************
    // qui dovrei rifare la query
    //****************************************
    <li><a href="prodotti.php?id=2">prodotto 2</a></li>
    <li><a href="prodotti.php?id=2">prodotto 2</a></li>
    <li><a href="prodotti.php?id=2">prodotto 2</a></li>
    <li><a href="prodotti.php?id=2">prodotto 2</a></li>
    <li><a href="prodotti.php?id=2">prodotto 2</a></li>
    </ul>
    </dd>
    </dl></div>[/PHP]
    la query potrebbe essere un'altra select perchè vorrei che modulo 2500
    avesse tutti i dati contrassegnati da categoria 2500 quindi dovrei fare
    [PHP]"SELECT * FROM tabella_articoli WHERE categoria='2500'";[/PHP]
    poi dovrei farne un'altra che mi visualizzasse
    [PHP]"SELECT * FROM tabella_articoli WHERE categoria='3000'";[/PHP]

    Così facendo dovrei fare più volte la stessa query cambiando un solo paramentro ?


  • User Attivo

    Direi che sarebbe piuttosto inefficiente... La soluzione che ti suggerisco è fare una query e mettere il tutto in un array bidimensionale dove per ogni categoria c'è un array di prodotti (non ti preoccupare, è più facile farlo che dirlo...)

    In sostanza fai così:
    [php]while ($row = mysql_fetch_array($risultato_prodotti)) {
    $prodotti[$row['categoria']][$row['id']] = $row;
    }[/php]quando poi vai a mostrare l'array (cioè a fare i sottomenu) fai così:
    [php]foreach ($prodotti as $categoria => $array_categoria) {
    echo '<dd>';
    echo '<ul>';
    foreach ($array_categoria as $id => $prodotto) {
    echo '<li><a href="prodotti.php?id=' . htmlspecialchars($id) . '">' . htmlspecialchars($prodotto['descrizione']) . '</a></li>';
    }
    echo '</ul>';
    echo '</dd>';
    echo '<dt><a href="/discuss/">Modulo ' . htmlspecialchars($categoria) . '</a></dt>';
    }[/php]Due cose a cui prestare attenzione:

    • come vedi ho usato la funzione htmlspecialchars, leggiti la pagina di manuale corrispondente poichè è fondamentale usarla quando si devono mostrare in una pagina HTML dei dati su cui non si ha il controllo
    • ovviamente la URL della categoria ("/discuss/" o quello che deve essere) la devi variare tu (come ho fatto io è sempre uguale) ad esempio utilizzando un array associativo - però non so cosa vuoi ottenere lì quindi non entro nei dettagli

    HTH, ciao!!


  • User Attivo

    Quindi da quello che ho capito, un ciclo foreach mi analizza le categorie mentre un altro sotto ciclo foreach mi analizza cio' che è all'interno delle categorie giusto ?


  • User Attivo

    Esatto - ovviamente l'importante è creare prima un array bidimensionale, cioè che abbia la forma:

    array (
    categoria1 => array(prodotto1, prodotto2, ...)
    categoria2 => array(prodotto6, prodotto7, ...)
    ...
    )


  • User Attivo

    Ok quindi se ho ben capito (speriamo!) estraggo tutti i dati dalla tabella con un [php]SELECT * FROM tabella_articoli[/php] poi mi creo il mio array bidimensionale con
    [php]while ($row = mysql_fetch_array($risultato_prodotti)) {
    $prodotti[$row['categoria']][$row['id']] = $row;
    } [/php]e li estraggo con il ciclo foreach che mi avete suggerito ?

    Ps.
    Queste ottimizzazioni del codice, suggerimenti e scorciatoie, posso trovarlo in qualche manuale? Mi consigliate qualche lettura ?


  • User Attivo

    A mio modo di vedere la fonte migliore (e meno costosa... :2: per imparare il PHP è il manuale online: http://php.net