- Home
- Categorie
- Coding e Sistemistica
- PHP
- Query a seconda del $_GET
-
Query a seconda del $_GET
Ragazzi eccomi qui...cerco disperatamente un aiuto per quanto riguarda una pagina che sto creando...
La pagina contiene un form con due campi select (tipologia,regione). I campi select dispongono della funzione onchange.In soldoni:
.se nella select seleziono "Cani" viene eseguita la query "select * from annunci where tipologia=cani"Il problema è che non riesco a far eseguire la query corretta nel caso che seleziono anche la Regione...che dovrebbe diventare:
.se nella select seleziono "Cani" e come Regione "Lombardia" viene eseguita la query "select * from annunci where tipologia=cani AND regione=lombardia"
Attualmente se seleziono solo i cani della lombardia mi escono anche quelli presenti in piemonte...Come posso fare per rendere universale il GET e costruire la query a seconda di quello che sceglie l'utente?
Non sono un esperto di PHP, quindi chiedo gentilmente di fornirmi aiuto nel piu' semplice dei modi
Attualmente utilizzo questo codice:[PHP]
<?php
// se l'utente seleziona solo la tipologia
if (isset($_GET['tipologia'])) {
$annunci=mysql_query("SELECT * FROM annunci WHERE tipologia='$_GET[tipologia]' ORDER BY id DESC");
}
// se l'utente seleziona solo la regione
elseif (isset($_GET['regione'])) {
$annunci=mysql_query("SELECT * FROM annunci WHERE regione='$_GET[regione]' ORDER BY id DESC");
}
// nel caso sono selezionati entrambi i campi select
elseif (isset($_GET['tipologia']) AND (isset($_GET['regione']))) {
$annunci=mysql_query("SELECT * FROM annunci WHERE tipologia='$_GET[tipologia]' AND regione='$_GET[regione]' ORDER BY id DESC");
}
// se non è stato selezionato niente, seleziona tutti gli annunci
else {
$annunci=mysql_query("SELECT * FROM annunci ORDER BY id DESC");
}
$tot=mysql_num_rows($annunci);
if ($tot==0) { echo "
<div class="alert alert-info">
<i class="icon-info-sign"></i>
Spiacente, non ci sono annunci con i criteri selezionati!
</div>
"; }
else {
while ($row_show=@mysql_fetch_assoc($annunci)) {
[...] omissis [...]
[/PHP]Grazie!!!
-
una cosa che ho notato:
.se seleziono sia tipologia che regione funziona tutto bene.
.se invece seleziono soltanto la tipologia oppure solo la regione, non funziona nulla...mi mostra tutti gli annunci.
-
Uno dei problemi potrebbe essere l'ordine delle if. Per quanto ne so, quando l'interprete trova la prima soluzione soddisfacente esce dalla struttura delle else e ignora il resto. Io farei:
<?php if (isset($_GET['tipologia']) AND (isset($_GET['regione']))) { $annunci=mysql_query("SELECT * FROM annunci WHERE tipologia='$_GET[tipologia]' AND regione='$_GET[regione]' ORDER BY id DESC"); } // se l'utente seleziona solo la tipologia else if (isset($_GET['tipologia'])) { $annunci=mysql_query("SELECT * FROM annunci WHERE tipologia='$_GET[tipologia]' ORDER BY id DESC"); } // se l'utente seleziona solo la regione else if (isset($_GET['regione'])) { $annunci=mysql_query("SELECT * FROM annunci WHERE regione='$_GET[regione]' ORDER BY id DESC"); } // se non è stato selezionato niente, seleziona tutti gli annunci else { $annunci=mysql_query("SELECT * FROM annunci ORDER BY id DESC"); } $tot=mysql_num_rows($annunci); if ($tot==0) { echo " <div class=\"alert alert-info\"> <i class=\"icon-info-sign\"></i> Spiacente, non ci sono annunci con i criteri selezionati! </div> "; } else { while ($row_show=@mysql_fetch_assoc($annunci)) { [...] omissis [...]
Ma va provato.