• User Newbie

    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!!! :ciauz:


  • User Newbie

    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.


  • User Attivo

    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.