- Home
- Categorie
- Coding e Sistemistica
- PHP
- Non riesco a inserire una condizione nella query
-
Ciao
così a occhio mi viene il sospetto che stai comparando un valore numerico con una stringa.
prova a togliere le virgolette nella query, tipo:...(Richiesta) <= ".$richieste['Budget_disponibile_a']."...
ricordati di sanitizzare quell'input se già non l'hai fatto
-
@mr_valdemar said:
Ciao
così a occhio mi viene il sospetto che stai comparando un valore numerico con una stringa.
prova a togliere le virgolette nella query, tipo:...(Richiesta) <= ".$richieste['Budget_disponibile_a']."...
ricordati di sanitizzare quell'input se già non l'hai fatto
provato ma non va..
-
Cosa vuol dire che non va? Ti dà qualche errore?
-
@matmattia said:
Cosa vuol dire che non va? Ti dà qualche errore?
No, non mi da nessun errore, semplicemente la condizione viene ignorata, il budget è di 180000 ? ma continua a visualizzarmi tutti gli immobili con una richiesta superiore..
Posto tutta la query:
[PHP]$queryrichieste = "SELECT * FROM richieste WHERE id='".$_GET['id']."'";
$query_limitrichieste = mysql_query($queryrichieste) or die(mysql_error());
$richieste = mysql_fetch_array($query_limitrichieste);$queryimmobili = "SELECT * FROM beni WHERE"; $query2info = 0; if ($richieste['Zona']!='') { $queryimmobili.= " ( Localita LIKE '%".$richieste['Zona']."%' OR Comune LIKE '%".$richieste['Zona']."%'"; $query2info++; } if ($richieste['Zona2']) { if ($query2info) { $queryimmobili.= " OR Localita LIKE '%".$richieste['Zona2']."%' OR Comune LIKE '%".$richieste['Zona2']."%'"; $query2info++; } else $queryimmobili.= " ( Localita LIKE '%".$richieste['Zona2']."%' OR Comune LIKE '%".$richieste['Zona2']."%'"; } if ($richieste['Zona3']) { if ($query2info) { $queryimmobili.= " OR Localita LIKE '%".$richieste['Zona3']."%' OR Comune LIKE '%".$richieste['Zona3']."%'"; $query2info++; } else $queryimmobili.= " ( Localita LIKE '%".$richieste['Zona3']."%' OR Comune LIKE '%".$richieste['Zona3']."%'"; } if ($richieste['Zona4']) { if ($query2info) { $queryimmobili.= " OR Localita LIKE '%".$richieste['Zona4']."%' OR Comune LIKE '%".$richieste['Zona4']."%'"; $query2info++; } else $queryimmobili.= " ( Localita LIKE '%".$richieste['Zona4']."%' OR Comune LIKE '%".$richieste['Zona4']."%'"; } if ($richieste['Zona5']) { if ($query2info) $queryimmobili.= " OR Localita LIKE '%".$richieste['Zona5']."%' OR Comune LIKE '%".$richieste['Zona5']."%'"; else $queryimmobili.= " Localita LIKE '%".$richieste['Zona5']."%' OR Comune LIKE '%".$richieste['Zona5']."%'"; } if ($query2info) $queryimmobili.= " ) AND "; $queryimmobili.="((Tipologia = '".$richieste['Tipologia']."') OR (Tipologia = '".$richieste['Tipologia2']."') OR (Tipologia = '".$richieste['Tipologia3']."')) "; $queryimmobili.="AND Destinazione='".$richieste['Tipo_contratto']."' "; if($richieste['giardino']!=''){$queryimmobili.="AND Giardino != '' ";} $queryimmobili.="AND camere='".$richieste['Camere']."' "; if($richieste['Budget_disponibile_a']!=''){$queryimmobili.="AND ( (Richiesta <= ".$richieste['Budget_disponibile_a'].") OR (ultimo_prezzo <= ".$richieste['Budget_disponibile_a'].") ) ";} if($richieste['garage']!=''){$queryimmobili.="AND Garage != '' ";} $queryimmobili.="AND piano='".$richieste['piano']."' "; $queryresults=mysql_query($queryimmobili); $i=0; while($immobili=mysql_fetch_assoc($queryresults)){ $i=$i+1; $query_limit = mysql_query($queryimmobili) or die(mysql_error());[/PHP]
Si comporta bene con tutte le condizioni tranne che con quella che si riferisce al budget...
-
Se metti:
[php]echo $queryimmobili;[/php]subito prima di:
[php]$queryresults=mysql_query($queryimmobili);[/php]Cosa stampa?
-
@matmattia said:
Se metti:
[php]echo $queryimmobili;[/php]subito prima di:
[php]$queryresults=mysql_query($queryimmobili);[/php]Cosa stampa?Questo:
SELECT * FROM beni WHERE ( Localita LIKE '%Navacchio%' OR Comune LIKE '%Navacchio%' OR Localita LIKE '%S. Frediano %' OR Comune LIKE '%S. Frediano %' OR Localita LIKE '%Cascina%' OR Comune LIKE '%Cascina%' OR Localita LIKE '% Fornacette %' OR Comune LIKE '% Fornacette %' ) AND ((Tipologia = 'TERRATETTO') OR (Tipologia = 'APPARTAMENTO') OR (Tipologia = '')) AND Destinazione='Vendita' AND camere='2' AND ( (Richiesta <= 180000.00) OR (ultimo_prezzo <= 180000.00) ) AND Garage != '' AND piano=''
Solo che poi appaiono risultati come:
N.
**RIFERIMENTO** **LOCALITÀ** **COMUNE** **CAMERE** **MQ. NETTI** **RICHIESTA** **1** IC8059 Cascina Cascina 2 85 277000.00
**
** Tutto ok tranne la richiesta che come vedi non soddisfa la query essendo superiore a 180000
-
Prova a modificare questa riga:
[php]if($richieste['Budget_disponibile_a']!=''){$queryimmobili.="AND ( (Richiesta <= ".$richieste['Budget_disponibile_a'].") OR (ultimo_prezzo <= ".$richieste['Budget_disponibile_a'].") ) ";}[/php]In questo modo:
[php]if($richieste['Budget_disponibile_a']!=''){$queryimmobili.="AND ( (Richiesta <= ".$richieste['Budget_disponibile_a'].") AND (ultimo_prezzo <= ".$richieste['Budget_disponibile_a'].") ) ";}[/php]Praticamente quella riga che esce che non dovrebbe uscire avrà "ultimo_prezzo" minore di 180000.
-
@matmattia said:
Prova a modificare questa riga:
[php]if($richieste['Budget_disponibile_a']!=''){$queryimmobili.="AND ( (Richiesta <= ".$richieste['Budget_disponibile_a'].") OR (ultimo_prezzo <= ".$richieste['Budget_disponibile_a'].") ) ";}[/php]In questo modo:
[php]if($richieste['Budget_disponibile_a']!=''){$queryimmobili.="AND ( (Richiesta <= ".$richieste['Budget_disponibile_a'].") AND (ultimo_prezzo <= ".$richieste['Budget_disponibile_a'].") ) ";}[/php]Praticamente quella riga che esce che non dovrebbe uscire avrà "ultimo_prezzo" minore di 180000.Fungeeeeee!!
Però adesso ho capito forse qual è il problema...
Il campo ultimo_prezzo non sempre viene riempito, ma ho l'impressione (devo controllare) che nel db venga inserito come valore predefinito 0,00.
In questo modo ultimo_prezzo è sempre <= al budget e per questo la condizione viene rispettata e mi mostra anche i risultati che non dovrebbero esserci.Mettendo AND al posto di OR come mi hai fatto fare entrambe le condizioni devono essere soddisfatte e quindi funziona correttamente se ultimo_prezzo è zero. Ma se per esempio Richiesta fosse superiore al budget ma ultimo_prezzo inferiore in questo modo il record non verrebbe visualizzato.
In pratica devo togliere il valore predefinito dal db e andare a cancellare tutti quei valori di ultimo_prezzo uguali a 0,00.
Grazie mille, mi hai illuminato facendomi avere questo flash!
-
Allora puoi modificare quella riga in questo modo:
[php]if($richieste['Budget_disponibile_a']!=''){$queryimmobili.="AND (Richiesta <= ".$richieste['Budget_disponibile_a']." OR (ultimo_prezzo <= ".$richieste['Budget_disponibile_a']." AND ultimo_prezzo>0)) ";}[/php]
-
@matmattia said:
Allora puoi modificare quella riga in questo modo:
[php]if($richieste['Budget_disponibile_a']!=''){$queryimmobili.="AND (Richiesta <= ".$richieste['Budget_disponibile_a']." OR (ultimo_prezzo <= ".$richieste['Budget_disponibile_a']." AND ultimo_prezzo>0)) ";}[/php]Perfetto, adesso va benissimo.
Grazie mille, è da ieri che ci sbatto la testa e non mi rendevo conto che la soluzione l'avevo sotto il naso...bastava inserire AND ultimo_prezzo>0..
Ti ringrazio molto.