• User Newbie

    Ciao Mirko, purtroppo ho commesso un errore nel postare il codice, perché avevo fatto un tentativo con le dritte che mi avevi dato tu la prima volta e poi l'ho lasciato... il SELECT attuale è questo:

    $search = mysql_query ("
    SELECT rif, descrizione FROM dbimmobili WHERE
    tipologia='$tipologia'
    AND zona='$zona'
    AND distanza='$distanza'
    AND mq='$mq'
    AND camere='$camere'
    AND bagni='$bagni'
    AND giardino='$giardino'
    AND postiauto='$postiauto'
    AND prezzo='$prezzo'
    ") or die ("Errore di query: " . mysql_error());

    posso comunque modificare SELECT con il codice che mi hai dato tu?

    E per andare sul sicuro: i miei campi del form sono tutti "select"... per essere "empty" basta che ci sia un campo con value="", giusto?
    Grazie ancora!


  • User Attivo

    Ciao,
    per correttezza la riscrivo,
    in realtà la differenza sta nel valutare anche la tipologia.

    [php]
    //Per capire se è stata trovata la prima condizione
    $firstTest = false;

    $sql = "SELECT rif, descrizione FROM dbimmobili WHERE";

    if(isset($tipologia) && !empty($tipologia)){
    sql .= ($firstTest) ? " AND tipologia='$tipologia'" : " tipologia='$tipologia'";
    $firstTest = true;
    }

    if(isset($zona) && ! empty($zona)){
    sql .= ($firstTest) ? " AND zona='$zona'" : " zona='$zona'";
    $firstTest = true;
    }

    if(isset($distanza) && ! empty($distanza)){
    sql .= ($firstTest) ? " AND distanza='$distanza'" : " distanza='$distanza'";
    $firstTest = true;
    }

    if(isset($mq) && ! empty($mq)){
    sql .= ($firstTest) ? " AND mq='$mq'" : " mq='$mq'";
    $firstTest = true;
    }

    if(isset($camere) && ! empty($camere)){
    sql .= ($firstTest) ? " AND camere='$camere'" : " camere='$camere'";
    $firstTest = true;
    }

    if(isset($bagni) && ! empty($bagni)){
    sql .= ($firstTest) ? " AND bagni='$bagni'" : " bagni='$bagni'";
    $firstTest = true;
    }

    if(isset($giardino) && ! empty($giardino)){
    sql .= ($firstTest) ? " AND giardino='$giardino'" : " giardino='$giardino'";
    $firstTest = true;
    }

    if(isset($postiauto) && ! empty($postiauto)){
    sql .= ($firstTest) ? " AND postiauto='$postiauto'" : " postiauto='$postiauto'";
    $firstTest = true;
    }

    if(isset($prezzo) && ! empty($prezzo))
    sql .= ($firstTest) ? " AND prezzo='$prezzo'" : " prezzo='$prezzo'";

    [/php]Si, empty() considera anche "" .

    Provala.

    :ciauz:


  • User Newbie

    Ciao Mirko,

    ho sostituito il mio SELECT con il tuo senza cambiare una virgola, però adesso mi da un problema il ciclo while successivo:

    Warning: mysql_fetch_row(): supplied argument is not a valid MySQL result resource in **nomesito **on line 72

    ti posto il codice da SELECT fino alla fine (in grassetto ti metto la linea 72 dell'errore):

    $firstTest = false;
    $sql = "SELECT rif, descrizione FROM dbimmobili WHERE";
    if(isset($tipologia) && !empty($tipologia)){
    $sql .= ($firstTest) ? " AND tipologia='$tipologia'" : " tipologia='$tipologia'";
    $firstTest = true;
    }
    if(isset($zona) && ! empty($zona)){
    $sql .= ($firstTest) ? " AND zona='$zona'" : " zona='$zona'";
    $firstTest = true;
    }
    if(isset($distanza) && ! empty($distanza)){
    $sql .= ($firstTest) ? " AND distanza='$distanza'" : " distanza='$distanza'";
    $firstTest = true;
    }
    if(isset($mq) && ! empty($mq)){
    $sql .= ($firstTest) ? " AND mq='$mq'" : " mq='$mq'";
    $firstTest = true;
    }
    if(isset($camere) && ! empty($camere)){
    $sql .= ($firstTest) ? " AND camere='$camere'" : " camere='$camere'";
    $firstTest = true;
    }
    if(isset($bagni) && ! empty($bagni)){
    $sql .= ($firstTest) ? " AND bagni='$bagni'" : " bagni='$bagni'";
    $firstTest = true;
    }

    if(isset($giardino) && ! empty($giardino)){
    $sql .= ($firstTest) ? " AND giardino='$giardino'" : " giardino='$giardino'";
    $firstTest = true;
    }

    if(isset($postiauto) && ! empty($postiauto)){
    $sql .= ($firstTest) ? " AND postiauto='$postiauto'" : " postiauto='$postiauto'";
    $firstTest = true;
    }

    if(isset($prezzo) && ! empty($prezzo))
    $sql .= ($firstTest) ? " AND prezzo='$prezzo'" : " prezzo='$prezzo'";
    echo "
    <table border>
    <tr><th colspan='3'>Immobili trovati:</tr>
    <tr><th>RIF<th>Descrizione<th></tr>
    ";
    while ($riga = mysql_fetch_row($sql)){
    echo "<tr><td>$riga[0]<td>$riga[1]<td>$riga[2]";

    }
    echo "</table>";
    mysql_close($link);
    ?>


  • User Attivo

    Ciao,
    il problema è dovuto al fatto che estrai 2 campi con la SELECT,
    ma poi nel ciclo vai a prendere anche il terzo valore, che invece non estrai.

    Ciao


  • User Newbie

    Ok Mirko grazie... ma temo che risulti un po' troppo complicato... 😉

    Ti disturbo un'ultima volta... potrebbe esserci la possibilità, quando vengono definite le variabili, di fare questo:

    $var = $_POST['nomecampo']
    if (empty($var) {
    $var = XXX; }
    else {
    $var = $_POST['nomecampo'] }

    $var2... etc.

    Al posto di XXX c'è una formula di php, oppure usando AND/OR, che permette di poter assegnare alla variabile tutti i valori conenuti nel campo del form 'nomecampo', di modo che se uno lo lascia vuoto vuol dire che gli vanno bene tutti i valori??

    Ulima volta che ti disturbo promesso 😉


  • User Attivo

    Ciao Sebastian84,
    se ho capito bene,
    ti basta inizializzare le variabili in questo modo:

    [php]

    $var1="";
    $var2="";

    $var1 = (empty($_POST['nomecampo'])) ? FORMULA() : $_POST['nomecampo'];

    $var2 = (empty($_POST['nomecampo'])) ? FORMULA() : $_POST['nomecampo'];
    [/php]$var1 e $var2 conterranno il valore in POST se e solo se non risulteranno essere empty, altrimenti saranno valorizzate con FORMULA() .

    Buona giornata
    :ciauz:


  • User Newbie

    Buongiorno Mirko,

    ho fatto come mi hai detto, copiato ed incollato, cambiando solo il nome della variabile e 'nome campo', ma se lascio tutto su "seleziona", quindi con il valore "", mi da questo errore:

    Fatal error: Call to undefined function FORMULA() in /home/.../search.php on line 11

    :arrabbiato: :arrabbiato: :arrabbiato: :arrabbiato: :arrabbiato: sto per commettere un omicidio... del pc!!


  • User Attivo

    Ciao,
    bhè: non sempre il copia ed incolla fa al caso proprio. 😉

    FORMULA() è in generale la formula che devi inserire te.

    Dovresti sostituire FORMULA() con la formula (o XXX) che avevi introdotto te 2 post indietro.

    FORMULA() non esiste: non è una funzione PHP.

    :ciauz:


  • User Newbie

    Ahhhhhh ok ok 😉 pensavo che fosse una formula predefinita di php 😉

    Però il problema è che al posto di XXX non ho idea di cosa metterci... credo che la soluzione finale sia questa: se ad esempio in un campo di un form "select" ho questi valori:

    • qualsiasi -
      a
      b
      c

    Selezionando "- qualsiasi -" ecco che la variabile accetta tutti i valori a, b e c contenuti all'interno del form, di conseguenza il campo non è più obbligatorio...

    Io ho bisogno che tutti i miei campi non siano obbligatori, ma non so come inserire questa istruzione... 😞


  • User Attivo

    Dovrebbe essere quello che già abbiamo fatto.
    L'unica differenza è che se non scegli niente nella select anzicchè "qualsiasi"
    deve arrivare in POST ''.

    Questo lo puoi fare così:
    [php]
    <select>
    <option value="">Qualsiasi</option>
    <option value="a">a</option>
    <option value="b">b</option>
    <option value="c">c</option>
    </select>
    [/php]Nella soluzione finale che ti ho postato,
    la query viene completata solo con i campi che sono stati valorizzati nel FORM, quindi in questo caso, non arrivando niente di diverso da "" la query estrarrà qualunque campo.

    La soluzione PHP è già pronta; devi solo adeguare il tuo HTML al codice PHP.

    Ciao
    :ciauz: