Visualizzazione dei risultati da 1 a 9 su 9
  1. #1

    Selezionare dati da mysql attraverso checkbox

    Salve a tutti.
    Ho un a form con checkbox per selezionare delle residenze in base a numero stanze e zona.
    Il codice creato funziona ma: se cerco solo per numero stanze mi da errore in quanto non uso la variabile $zona= $_POST["zona"]; e se seleziono più checkbox per esempio: monolocali, bilocali , trilocali, mi mostra solo i trilocali. E se seleziono bilocali e centro città mi fa vedere anche monolocali e trilocali. in pratica non funziona come vorrei. vorrei che se ad esempio io selzionassi monolocali e zona centro citta mi facesse vedere solo i monolocali e non anche gli altri alloggi.

    Grazie a tutti.

    codice HTML:
    <form action="http://localhost/podratib/registrati.php" method="post" name="iscrizione" id="Iscrizione" >				 <p> <label for="nome"> Nome: </label> <input type="text" name="nome" required id="nome"   /> </p>				 <p> <label for="cognome"> Cognome: </label> <input type="text" name="Cognome" required id="nome"  /> </p>				 <p> <label for="mail"> E-mail: </label> <input type="text" name="mail" id="nome" required /> </p>
    					<p> <label for="username"> Username: </label> <input type="text" name="username" id="nome" required /> </p>           <p> <label for="pass"> Password: </label> <input type="password" name="pass" id="mail" required /> </p>
                <input id="annulla" type="reset" value="ANNULLA" />					 <input id="iscrivimi" type="submit" value="ISCRIVITI" />
    
    			 </form>



    Codice PHP:
    $stanze$_POST["stanze"];$zona$_POST["zona"];
    $sql "SELECT nome,indirizzo,descrizione FROM tab_case WHERE stanze = '$stanze' && zona='$zona'";//&& zona='CLE' && prezzo < 300 ";$result = mysqli_query($conn, $sql);if (mysqli_num_rows($result) > 0) // output data of each row{ echo "<UL>";while($row = mysqli_fetch_assoc($result)) {
    echo "<li> Nome " $row["nome"];
    echo 
    "</br>";
    echo 
    "Indirizzo: " $row["indirizzo"];
    echo 
    "</br>";

    echo 
    "Descrizione: " $row["descrizione"]. "</li>"; };


    echo 
    "</UL>";}
    else { echo 
    "0 results";}; 

  2. #2
    Moderatore di PHP L'avatar di Alhazred
    Registrato dal
    Oct 2003
    Messaggi
    12,505
    Verifica che le variabili $_POST esistano con isset(), così puoi decidere cosa fare.

  3. #3
    Ho provato a verificare con isset() ma il problema persiste.
    io vorrei che il programma funzionasse anche se non tutte le variabili vengono utilizzate.

  4. #4
    Moderatore di PHP L'avatar di Alhazred
    Registrato dal
    Oct 2003
    Messaggi
    12,505
    La query creala secondo le variabili che arrivano.
    Codice PHP:
    // 1=1 serve ad inizializzare la clausola where senza che abbia impatto sui risultati
    $sql "SELECT nome,indirizzo,descrizione FROM tab_case WHERE 1=1 ";

    if ( isset(
    $_POST['stanze']) ) $sql .= " AND stanze='" $_POST['stanze'] . "'";
    if ( isset(
    $_POST['zona']) ) $sql .= " AND zona='" $_POST['zona'] . "'"

  5. #5
    Grazie mille ora funziona. Tuttavia non capisco il funzionamento di: WHERE 1=1.
    inoltre se ora seleziono sia monolocali che bilocali che trilocali continua comunque a mostrarmi solamente uno dei tre selezionati. Devo creare un vettore?

  6. #6
    Moderatore di PHP L'avatar di Alhazred
    Registrato dal
    Oct 2003
    Messaggi
    12,505
    WHERE 1=1 serve per inizializzare la clausola WHERE.
    Immagina che l'utente non selezioni alcuna opzione, devi mostrargli tutto quello che c'è.
    Se non selezionasse niente, nessuno degli if inserirebbe una condizione nel WHERE, quindi ti ritroveresti con la query tronca
    SELECT nome,indirizzo,descrizione FROM tab_case WHERE

    che ti darebbe errore, invece così hai come minimo
    SELECT nome,indirizzo,descrizione FROM tab_case WHERE 1=1
    e 1=1 è sempre vera, quindi prende tutto.

    Magari nel tuo caso almeno una opzione è obbligato a selezionarla, ma creare la query così male non fa, in futuro potresti decidere di rendere tutto opzionale e non corri il rischio di dimenticarti di sistemare la query.

    Per quanto riguarda l'altra domanda, ciò che metti negli if per aggiungere pezzi alla query devi scriverlo in base alle reali esigenze, per esempio per il problema che hai dovrebbero servirti degli OR e non degli AND.

  7. #7
    inoltre con ... WHERE 1=1 puoi aggiungere tutte le altre opzioni in AND, senza dover controllare che quello che stai aggiungendo è il primo parametro oppure no

  8. #8
    Grazie! per risolvere il problema ho cambiato la checkbox in radiobox e cosi l'utente puo selezionare solo un campo.
    tuttavia nel suo codice non riesco ad inserire correttamente un comando che generi una pagina di errore se le residenze selezionate non corrispondono a nesunna nel database. Ad esempio: se seleziono monolocali in periferia (che non esistono sul db) mi appare una schermata bianca. Non riesco appunto ad inserire l'alternativa nel caso i paramentri indicati non corrispondano alle residenze. Grazie in anticipo

  9. #9
    Moderatore di PHP L'avatar di Alhazred
    Registrato dal
    Oct 2003
    Messaggi
    12,505
    Devi verificare quanti record ha recuperato la query con mysqli_affected_rows() o equivalente, secondo come ti interfacci al db (spero non con le funzioni mysql_ senza i finale), se ti dice 0 dai il messaggio che non è stato trovato niente, altrimenti mostri i riusltati.

Tag per questa discussione

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.