Query diversa a seconda del $_GET

skoien

Nuovo Utente
30 Nov 2013
10
0
0
VA
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:

Codice PHP:
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 [...]


Grazie!!!
 

criric

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
21 Ago 2010
5.607
54
48
TN
Ciao, benvenuto!
Ti conviene impostare lo script cosi:
PHP:
<?php
$query = "SELECT * FROM annunci WHERE 1";
if (isset($_GET['tipologia'])) {
    $query .= " && tipologia='" . $_GET['tipologia'] . "'";
}
if (isset($_GET['regione'])) {
    $query .= " && regione='" . $_GET['regione'] . "'";
}
$query .= " ORDER BY id DESC";

$result = mysql_query($query);
?>
Aggiungi dei controlli sui campi GET, sei a rischio di SQL INJECTION e abbandona l'estensione mysql
 

skoien

Nuovo Utente
30 Nov 2013
10
0
0
VA
ciao grazie, comunque ho risolto con !isset al posto di else...cosa ne pensi?

PHP:
<?php
$tipologia=mysql_real_escape_string($_GET['tipologia']);
$regione=mysql_real_escape_string($_GET['regione']);
if (isset($_GET['tipologia'])) {
$annunci=mysql_query("SELECT * FROM annunci WHERE tipologia='$_GET[tipologia]' ORDER BY id DESC");
}
if (isset($_GET['regione'])) {
$annunci=mysql_query("SELECT * FROM annunci WHERE regione='$_GET[regione]' ORDER BY id DESC");
}
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");
}
if (!isset($_GET['tipologia']) AND (!isset($_GET['regione']))) {
$annunci=mysql_query("SELECT * FROM annunci ORDER BY id DESC");
}
$tot=mysql_num_rows($annunci);
?>
 

criric

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
21 Ago 2010
5.607
54
48
TN
Non mi convince il passaggio di valore tramite GET
poi in teoria se invii la regione non invii la tipologia e viceversa
i valori dovrebbero essere inviati entrambi in ogni caso ma regione potrebbe essere vuoto quindi occorre un controllo in piu
Codice:
if (isset($_GET['regione']) && !empty($_GET['regione'])) {
prova il codice che ti ho postato : è più ordinato e se un giorno dovrai aggiungere un altro filtro non diventi matto
 

skoien

Nuovo Utente
30 Nov 2013
10
0
0
VA
Scusa l'ignoranza....siccome non sono epserto di PHP, non è che mi fai un esempio di come potrei gestire il discorso dei controlli di sicurezza...
 

criric

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
21 Ago 2010
5.607
54
48
TN
Intanto sarebbe meglio usare il method POST per evitare di poter modificare direttamente la stringa dell'url
poi va bene come hai fatto
PHP:
$tipologia=mysql_real_escape_string($_POST['tipologia']);
ma dovresti usare la variabile ripulita nella query
PHP:
tipologia='$tipologia'
 

skoien

Nuovo Utente
30 Nov 2013
10
0
0
VA
Già avevo provato a fare con post, ma se non lo faccio con get non funziona piu' niente....stessa cosa per la variabile ripulita...non succede nulla...
 

criric

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
21 Ago 2010
5.607
54
48
TN
Sicuramente avrai sbagliato qualcosa nel codice Postalo che al massimo lo correggiamo
Io lo farei cosi
PHP:
<?php
$query = "SELECT * FROM annunci WHERE 1";
if (isset($_POST['tipologia']) && !empty($_POST['tipologia'])) {
    $query .= " && tipologia='" . mysql_real_escape_string($_POST['tipologia']) . "'";
}
if (isset($_POST['regione']) && !empty($_POST['regione'])) {
    $query .= " && regione='" . mysql_real_escape_string($_POST['regione']) . "'";
}
$query .= " ORDER BY id DESC";

$result = mysql_query($query);
?>
<form method="POST" action="<?php echo $_SERVER['PHP_SELF'] ?>">  
    Tipologia
    <select name="tipologia" onchange="this.form.submit()">
        <option value=""></option>
        <option value="cani"
        <?php
        if (isset($_POST['tipologia']) && $_POST['tipologia'] == "cani") {
            echo " selected = 'selected'";
        }
        ?>
                >Cani</option>
    </select>    
    Regione
    <select name="regione" onchange="this.form.submit()">
        <option value=""></option>
        <option value="lombardia"
        <?php
        if (isset($_POST['regione']) && $_POST['regione'] == "lombardia") {
            echo " selected = 'selected'";
        }
        ?>
                >Lombardia</option>
    </select>
</form>
<?php
while ($row = mysql_fetch_array($result)) {
    // dati
}
?>
 
Discussioni simili
Autore Titolo Forum Risposte Data
max75 query su due tabelle e dati doppioni MS Access 2
E Aiuto per query PHP 8
E Query differenza tra tabelle MySQL 5
E Query Alias PHP 4
T Query con date MS Access 1
K Inserimento query Errore 1366 PHP 4
L Query e selezione DB con $_POST PHP 2
M query update e delete PHP 0
A media degli elementi estratti da una query MySQL 0
S Passare query o utm alla pagina successiva Domini 1
O problema con query PHP 4
M Query PHP 8
R query DELETE non cancella i record PHP 1
G Query con i giorni della settimana MySQL 10
E Query annidate o cicli MySQL 1
C bottone query MySQL 0
T Query su due tabelle con totali Database 4
G AVVISO QUERY IN ESECUZIONE PHP 1
M Riportare in tabella HTML dati estratti con query SQL MySQL 0
S Selezionare ultimo record di una sotto query MySQL 27
G Menù a tendina di ricerca con query PHP 1
V Query per una somma PHP 2
F stampare a video i risultati della query PHP 1
L problema con query select PHP 2
D Query sum Database 1
M Visualizzazione a video risultati query php PHP 0
A form PHP prenotazione tramite query PHP 2
R Problema query con ricerca id numerico PHP 2
G Casella combinata in una query MS Access 4
R Aiuto con le query MS Access 2
Y query di DELETE PHP 4
V Query Oracle Oracle 0
L query somma PHP 8
W Query SQL Classic ASP 2
M Problemi con query a più tabelle PHP 3
Alex_70 Conteggio nella query PHP 0
elpirata Query per leggere dati da una tabella mysql e mostrarli a video in base a parametri passati tramite GET PHP 5
A nome file che contiene punto passato come parametro a query PHP 31
F query e form con select multipla PHP 17
M Problema su query JOIN in tre tabelle PHP 0
M Ordinare una query join PHP 2
Alex_70 Query ORDER BY PHP 18
G Problema ------- con Query PHP 1
G Problema con Query PHP 1
Alex_70 foreach explode query PHP 3
O query con date in formato stringa PHP 3
Tommy03 Unione query di 4 tabelle MySQL 1
I Fatal error: Query Failed! SQL: SELECT * INTO OUTFILE PHP 1
Alex_70 Query group actor e film PHP 26
TpD Incolonnare risultati query (mysql_result deprecato...) PHP 3

Discussioni simili