- Home
- Categorie
- Coding e Sistemistica
- Coding
- Problema form php
-
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
-
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?
-
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.
-
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!
-
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.
-
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);
?>
-
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
-
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
-
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
-
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
sto per commettere un omicidio... del pc!!
-
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.
-
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...
- qualsiasi -
-
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