- Home
- Categorie
- Coding e Sistemistica
- Coding
- Problema form php
-
Problema form php
Buonasera a tutti,
è il mio primo messaggio e quindi spero di aver azzeccato la sezione!
Sto usando PHP con Mysql da una settimana nemmeno quindi le mie conoscenze sono per adesso molto limitate
.
Vi disturbo per avvalermi della vostra conoscenza: praticamente ho un'agenzia immobiliare e nel mio sito ho creato (sto cercando di creare!!! :D) un piccolo motore di ricerca che a seconda dei campi selezionati, trovi l'immobile (o gli immobili) desiderati, contenuti in una tabella sul db Mysql fornito dal mio spazio web.
Se uno compila tutti i campi, il programma funziona e trova l'immobile desiderato... ma come ne viene lasciato uno vuoto ecco che la ricerca non trova nessun immobile.
Qualcuno sa dirmi come posso risolvere questo problema? Tenete conto che non sono espertissimo! Se vi serve, posso postare il codice sia del form che del programma ricerca.
Grazie in anticipo a tutti.
-
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