- Home
- Categorie
- Coding e Sistemistica
- Coding
- Estrazione dati con stessa query e ciclo while
-
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?
-
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!
-
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]
-
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]
-
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 ?
-
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!!
-
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 ?
-
Esatto - ovviamente l'importante è creare prima un array bidimensionale, cioè che abbia la forma:
array (
categoria1 => array(prodotto1, prodotto2, ...)
categoria2 => array(prodotto6, prodotto7, ...)
...
)
-
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 ?
-
A mio modo di vedere la fonte migliore (e meno costosa...
per imparare il PHP è il manuale online: http://php.net