• User Attivo

    Ciao Sebastian84,
    è difficile aiutarti senza vedere la query che esegui per estrarre i dati.

    Dalla tua descrizione, posso intuire che nella query, in particolare dopo le clausola WHERE, utilizzi l'operatore logico AND per concatenare le condizioni di tutti i campi.

    Se è così,
    ti basta creare dinamicamente in PHP la parte di WHERE in modo che risultino solo i campi che hai valorizzato nel form,
    oppure, se per default i campi del DB li setti a NULL, potresti per ogni campo utilizzare l'operatore IN:

    [php]
    SELECT * from Tabella
    WHERE campo1 in (null,"valore del form") AND campo2 in (null,"valore del form") ecc...
    [/php]Ciao
    :ciauz:


  • User Newbie

    Ciao mirko,

    intanto ti ringrazio per la risposta! Ecco il codice del programma:

    <?php
    $db_username = 'XXX';
    $db_password = 'XXX';
    $db_host = 'XXX';
    $link = @mysql_connect("$db_host", "$db_username", "$db_password") or die ("Errore di connessione: " . mysql_error());
    $dbw = mysql_select_db("agenziac73893") or die ("Errore di selezione database: " . mysql_error());
    $tipologia = $_POST['Tipologia'];
    $zona = $_POST['Zona'];
    $distanza = $_POST['Distanza'];
    $mq = $_POST['Mq'];
    $camere = $_POST['Camere'];
    $bagni = $_POST['Bagni'];
    $giardino = $_POST['Giardino'];
    $postiauto = $_POST['Postiauto'];
    $prezzo = $_POST['Prezzo'];
    $search = mysql_query ("
    SELECT rif, descrizione FROM dbimmobili WHERE
    tipologia in (null,'$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());
    echo "
    <table border>
    <tr><th colspan='3'>Immobili trovati:</tr>
    <tr><th>RIF<th>Descrizione<th></tr>
    ";
    while ($riga = mysql_fetch_row($search)){
    echo "<tr><td>$riga[0]<td>$riga[1]<td>$riga[2]";

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

    Come vedi, se uno compila tutti i campi il programma funziona...
    Se uso il metodo che mi hai detto tu, devo impostare tutti i campi da Not Null a Null sul db?


  • User Attivo

    Ciao Sebastian84,
    facciamo un tentativo prima di mettere mano al design delle tue tabelle.

    Dunque,
    ti ritocco solo la creazione della SELECT.

    Prova così:
    [php]
    $sql = "SELECT rif, descrizione FROM dbimmobili WHERE tipologia in (null,'$tipologia')";

    if(isset($zona) && ! empty($zona))
    $sql .= " AND zona='$zona'";

    if(isset($distanza) && ! empty($distanza))
    $sql .= " AND distanza='$distanza'";

    if(isset($mq) && ! empty($mq))
    $sql .= " AND mq='$mq'";

    if(isset($camere) && ! empty($camere))
    $sql .= " AND camere='$camere'";

    if(isset($bagni) && ! empty($bagni))
    $sql .= " AND bagni='$bagni'";

    if(isset($giardino) && ! empty($giardino))
    $sql .= " AND giardino='$giardino'";

    if(isset($postiauto) && ! empty($postiauto))
    $sql .= " AND postiauto='$postiauto'";

    if(isset($prezzo) && ! empty($prezzo))
    $sql .= " AND prezzo='$prezzo'";
    [/php]In questo modo la query dovrebbe essere completata in modo dinamico a seconda di come vengono valorizzati i campi del form HTML.

    Prova e poi fammi sapere.

    :ciauz:


  • 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: