Ho fatto un form per la ricerca interna ad un sito con i segueni campi:
"titolo" di tipo varchar : "qui il visitatore può inserire per esempio [appartamento,villa ecc.]";
"prezzo" di tipo decimale : "con menu a tendina dal quale il visitatore può scegliere il prezzo [per ora ho messo solo "meno di 150.000€" e "oltre 150.000€"]";
"Mq (metri quadri)" di tipo int: "menu a tendina dal quale il visitatore può scegliere i Mq dell'immobile [per ora ho messo "meno di 150 Mq" e "oltre 150 Mq"]";
allora per quanto riguarda il primo campo ovvero "titolo" scrivendo questo script mi cerca nella $tabella un immobile il cui titolo contiene una delle parole che il visitatore ha digitato nel campo di ricerca $stringa:
$stringa="$_POST[stringa]";
$sql="SELECT*FROM $tabella WHERE ";
$lista_parole=explode(" ",$stringa);
for($i=0;$i<count($lista_parole);$i++)
{
$str.="titolo LIKE '%$lista_parole[$i]%' OR ";
}
$str=substr($str,0,(strlen($str)-3));
$sql.=$str." ORDER BY id";
E fin qui tutto ok....il problema sorge con gli altri 2 campi ovvero "prezzo" e "Mq". Mi spiego meglio.
Per quanto riguarda il campo prezzo, supponiamo di avere nel database un immobile di prezzo=160000€ e un altro di 5000€ (magari esistesse davvero ), se nel menu a tendina seleziono "oltre 150.000" stranamente me li visualizza entrambi mentre dovrebbe mostrarmi solo il primo. Se invece nel menu a tendina seleziono "meno di 150000€" non mi visualizza nessuno dei 2 mentre dovrebbe mostrarmi il 2°, ovvero quello di prezzo=5000€.
Per quanto riguarda invece i Mq lo script presenta la stessa anomalia.
Queste sono le righe di codice relative al "prezzo" e ai "Mq":
$prez=$_POST[prez];
if ($prez=="oltre"){
$max="$prez > 150000";
if ($prez > 150000)
$sql.="prezzo LIKE '%$max%'";
}
elseif ($prez=="meno")
{
$meno="$prez < 150000";
if ($prez > 150000)
$sql.="prezzo LIKE '%$meno%'";
}
$mqu=$_POST[mquadri];
if ($mqu=="max"){
$max="$mqu>150";
if ($mqu>150)
$sql.="mq LIKE '%$max%'";
}
elseif ($mqu=="min")
{
$min="$mqu<150";
if ($mqu<150)
$sql.="mq LIKE '%$min%'";
}
Spero in un vostro aiuto.
Grazie.