Condividi:        

[PHP+MySql] Ricerca dati attraverso un campo di ricerca

Problemi di HTML? Di PHP, ASP, .NET, JSP, Perl, SQL, JavaScript, Visual Basic..?
Vuoi realizzare programmi in C, C++, Java, Ruby o Smalltalk, e non sai da che parte cominciare?
Entra qui e troverai le risposte!

Moderatori: Anthony47, Triumph Of Steel, archimede

[PHP+MySql] Ricerca dati attraverso un campo di ricerca

Postdi gahan » 10/11/09 10:07

Salve,

Come posso inserire in un sito un campo di ricerca $_POST[search] dal quale un visitatore può cercare un particolare immobile o articolo e visualizzarlo senza doverlo cercare tra tutti?
words like violence, break the silence
Avatar utente
gahan
Moderatore
 
Post: 1397
Iscritto il: 23/01/08 16:09

Sponsor
 

Re: [PHP+MySql] Ricerca dati attraverso un campo di ricerca

Postdi Dylan666 » 12/11/09 11:14

devi fare select usando come parametro il nome dell'immobile.
La risposta è vaga perchè la domanda è vaga.
Non ci hai detto nel tuo DB come si chiamano i vari campi (colonne) e cosa contengono.

http://www.php-mysql-tutorial.com/wikis ... abase.aspx
Avatar utente
Dylan666
Moderatore
 
Post: 39988
Iscritto il: 18/11/03 16:46

Re: [PHP+MySql] Ricerca dati attraverso un campo di ricerca

Postdi gahan » 12/11/09 11:48

Tabella "pagine" contenente i campi "id", "titolo", "prezzo", "testo".

devo fare un campo (form) di ricerca all'interno del sito.

Ammettiamo che io ho un articolo con il "titolo" --> "appartamento rustico" devo fare in modo che se un utente nel campo di ricerca scrive "rustico" si visualizzino tutti gli articoli di immobili con quella parola.
words like violence, break the silence
Avatar utente
gahan
Moderatore
 
Post: 1397
Iscritto il: 23/01/08 16:09

Re: [PHP+MySql] Ricerca dati attraverso un campo di ricerca

Postdi gahan » 13/11/09 19:13

allora sono riuscito a fare un form per la ricerca con i segueni campi:

titolo : "qui il visitatore può inserire per esempio [appartamento,villa ecc.]";

prezzo: "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): "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:
Codice: Seleziona tutto
$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 nasce 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=160.000 e un altro di 5.000 (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 150.000" non mi visualizza nesuno dei 2 mentre dovrebbe mostrarmi il 2°, ovvero quello di prezzo=5.000.
Per quanto riguarda invece i Mq lo script non funge proprio.

Queste sono le righe di codice relative al "prezzo" e ai "Mq":
Codice: Seleziona tutto
$prez=$_POST[prez];
if ($prez=="oltre"){
$max="$prez > 150.000";
if ($prez > 150.000)
$sql.="prezzo LIKE '%$max%'";
}
elseif ($prez=="meno")
{
$meno="$prez < 150.000";
$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.
words like violence, break the silence
Avatar utente
gahan
Moderatore
 
Post: 1397
Iscritto il: 23/01/08 16:09

Re: [PHP+MySql] Ricerca dati attraverso un campo di ricerca

Postdi archimede » 13/11/09 20:55

Che tipi di campo sono prezzo e mq?

Alessandro
archimede
Moderatore
 
Post: 2851
Iscritto il: 07/11/02 12:41
Località: Genova

Re: [PHP+MySql] Ricerca dati attraverso un campo di ricerca

Postdi gahan » 13/11/09 23:11

"prezzo" e "mq" sono varchar
words like violence, break the silence
Avatar utente
gahan
Moderatore
 
Post: 1397
Iscritto il: 23/01/08 16:09

Re: [PHP+MySql] Ricerca dati attraverso un campo di ricerca

Postdi archimede » 14/11/09 09:10

Allora la vedo dura: se fai operazioni di confronto con i varchar (ad esempio dimmi quali case hanno il prezzo > di 150000) risulterà che una casa con prezzo '2000' è maggiore di una col prezzo '150000').

A parte questo dettaglio, con l'operatore LIKE non otterresti comunque il risultato sperato.

Ergo: converti i campi in tipo numerico e usa gli operatori appropriati.

HTH.

Alessandro
archimede
Moderatore
 
Post: 2851
Iscritto il: 07/11/02 12:41
Località: Genova

Re: [PHP+MySql] Ricerca dati attraverso un campo di ricerca

Postdi gahan » 14/11/09 10:14

Ho modificato i seguenti campi in questo modo:

prezzo: decimal (visto che può essere anche decimale)

Mq: int (visto che si tratta di un nemero intero)

ma la situazione non cambia...a questopunto cerdo che sia lo script a non funzionare correttamente ma ho fatto diversi tentativi non riuscendo nell'intento:
Codice: Seleziona tutto
$cn=mysql_connect($host,$uid,$pw);
mysql_select_db($db,$cn);
$sql="SELECT*FROM $tabella WHERE ";
$prez=$_POST[prez];
if ($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){
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%'";
}
}
Archimede, sapresti indicarmi per favore dov'è che sbaglio?
grazie
words like violence, break the silence
Avatar utente
gahan
Moderatore
 
Post: 1397
Iscritto il: 23/01/08 16:09

Re: [PHP+MySql] Ricerca dati attraverso un campo di ricerca

Postdi archimede » 14/11/09 10:29

Te l'ho già indicato:
converti i campi in tipo numerico e usa gli operatori appropriati.
$sql.=" AND prezzo > ".$max; (sintassi da verificare, non sono esperto di PHP).

Si intende, ovviamente, che in $max ci sia un valore numerico: non mi è affatto chiaro cosa significhi:
$max="$prez > 150000";

HTH.

Alessandro
archimede
Moderatore
 
Post: 2851
Iscritto il: 07/11/02 12:41
Località: Genova

Re: [PHP+MySql] Ricerca dati attraverso un campo di ricerca

Postdi Triumph Of Steel » 15/11/09 00:34

quando usi dei campi INT o DECIMAL non devi usare LIKE...
ma usare
Codice: Seleziona tutto
campo > valore
campo < valore
campo BETWEEN val1 AND val2
campo = valore


io scriverei una cosa del genere.
Innanzi tutto inserirei nel'HTML 2 campi per dare all'utente la possibilità di scegliersi i limiti da solo
prezzoDA - prezzoA
nella pagina PHP di risposta:
Codice: Seleziona tutto
$prezzoDA = (preg_match( "/^(\d+),?(\d{1,2})?$/" , $_POST['prezzoDA'] )) ? $_POST['prezzoDA'] : 0;
$prezzoA = (preg_match( "/^(\d+),?(\d{1,2})?$/" , $_POST['prezzoA'] )) ? $_POST['prezzoA'] : 0;
if ($prezzoA > $prezzoDA) {
    $prezzoA = $prezzoDA;
}
if ($prezzoDA > 0 && $prezzoA > 0) {
    $sql .= " AND prezzo BETWEEN {$prezzoDA} AND {$prezzoA}";
} else if ($prezzoDA > 0 && $prezzoA <= 0) {
    $sql .= " AND prezzo >= {$prezzoDA}";
} else if ($prezzoDA <= 0 && $prezzoA > 0) {
    $sql .= " AND prezzo <= {$prezzoA}";
}


praticamente quando viene inviata la richiesta di ricerca, la pagina PHP di risposta:
- controlla che i parametri passati siano dei numeri (con 1 o 2 decimali opzionali)
- controlla che il prezzo di fine sia maggiore del prezzo di partenza, altrimenti lo imposta uguale (questo controllo secondo me andrebbe fatto anche prima di inviare la richiesta, magari con un javascript)
- compone la query a seconda dei parametri che sono stati passati.

non garantisco sul funzionamento dell'espressione regolare, in quanto non l'ho provata.

per la ricerca di testi, provare a dare un occhio anche alla sintassi MATCH ... AGAINST
Avatar utente
Triumph Of Steel
Moderatore
 
Post: 7852
Iscritto il: 22/08/01 01:00

Re: [PHP+MySql] Ricerca dati attraverso un campo di ricerca

Postdi gahan » 15/11/09 02:00

Grazie Triumph...lunedi mattina al lavoro proverò e ti faccio sapere. Intanto grazie mille per la dritta.
words like violence, break the silence
Avatar utente
gahan
Moderatore
 
Post: 1397
Iscritto il: 23/01/08 16:09

Re: [PHP+MySql] Ricerca dati attraverso un campo di ricerca

Postdi gahan » 16/11/09 12:21

Purtroppo non funge :

nell'html ho aggiunto i 2 campi di testo "prezzoDA" e "prezzoA"
Codice: Seleziona tutto
<?php
include("connessione.php");
$stringa=$_POST[stringa];
if (!$stringa or $stringa==""){
echo "<font face=\"arial\" size=\"2\">E' necessario specificare la/le parola/parole da cercare<br><a href=\"javascript:history.back()\">indietro</a></font>";
exit();
}
$cn=mysql_connect($host,$uid,$pw);
mysql_select_db($db,$cn);
$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));

$prezzoDA = (preg_match( "/^(\d+),?(\d{1,2})?$/" , $_POST['prezzoDA'] )) ? $_POST['prezzoDA'] : 0;
$prezzoA = (preg_match( "/^(\d+),?(\d{1,2})?$/" , $_POST['prezzoA'] )) ? $_POST['prezzoA'] : 0;
if ($prezzoA > $prezzoDA) {
    $prezzoA = $prezzoDA;
}
if ($prezzoDA > 0 && $prezzoA > 0) {
    $sql .= "AND prezzo BETWEEN {$prezzoDA} AND {$prezzoA}";
} else if ($prezzoDA > 0 && $prezzoA <= 0) {
    $sql .= "AND prezzo >= {$prezzoDA}";
} else if ($prezzoDA <= 0 && $prezzoA > 0) {
    $sql .= "AND prezzo <= {$prezzoA}";
}
$sql.=$str." ORDER BY id";


$mqu=$_POST[mquadri];
if ($mqu=="max"){
$sql.="mq >150";
}
elseif ($mqu=="min")
{
$sql.="mq <150";
}

$query=mysql_db_query($db,$sql);
$num=mysql_num_rows($query);
?>
words like violence, break the silence
Avatar utente
gahan
Moderatore
 
Post: 1397
Iscritto il: 23/01/08 16:09

Re: [PHP+MySql] Ricerca dati attraverso un campo di ricerca

Postdi archimede » 16/11/09 12:55

Come minimo ti manca un AND prima di mq.

Posta qui il contenuto della variabile $sql immediatamente prima di mysql_db_query.

HTH.

Alessandro

PS: inoltre la ORDER BY è sbagliata 2 volte: va messa alla fine, non in mezzo, e mi sa che $str non c'entra una mazza lì.
PPS: come non detto, forse $str è giusta.
archimede
Moderatore
 
Post: 2851
Iscritto il: 07/11/02 12:41
Località: Genova

Re: [PHP+MySql] Ricerca dati attraverso un campo di ricerca

Postdi gahan » 16/11/09 13:08

su tua segnalazione ho corretta ma il funzionamento non cambia:
Codice: Seleziona tutto
<?php
include("connessione.php");
$stringa=$_POST[stringa];
if (!$stringa or $stringa==""){
echo "<font face=\"arial\" size=\"2\">E' necessario specificare la/le parola/parole da cercare<br><a href=\"javascript:history.back()\">indietro</a></font>";
exit();
}
$cn=mysql_connect($host,$uid,$pw);
mysql_select_db($db,$cn);
$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));

$prezzoDA = (preg_match( "/^(\d+),?(\d{1,2})?$/" , $_POST['prezzoDA'] )) ? $_POST['prezzoDA'] : 0;
$prezzoA = (preg_match( "/^(\d+),?(\d{1,2})?$/" , $_POST['prezzoA'] )) ? $_POST['prezzoA'] : 0;
if ($prezzoA > $prezzoDA) {
    $prezzoA = $prezzoDA;
}
if ($prezzoDA > 0 && $prezzoA > 0) {
    $sql .= "AND prezzo BETWEEN {$prezzoDA} AND {$prezzoA}";
} else if ($prezzoDA > 0 && $prezzoA <= 0) {
    $sql .= "AND prezzo >= {$prezzoDA}";
} else if ($prezzoDA <= 0 && $prezzoA > 0) {
    $sql .= "AND prezzo <= {$prezzoA}";
}

$mqu=$_POST[mquadri];
if ($mqu=="max"){
$sql.="AND mq >150";
}
elseif ($mqu=="min")
{
$sql.="AND mq <150";
}
$sql.=$str." ORDER BY id";

$query=mysql_db_query($db,$sql);
$num=mysql_num_rows($query);
words like violence, break the silence
Avatar utente
gahan
Moderatore
 
Post: 1397
Iscritto il: 23/01/08 16:09

Re: [PHP+MySql] Ricerca dati attraverso un campo di ricerca

Postdi archimede » 16/11/09 13:48

archimede ha scritto:Posta qui il contenuto della variabile $sql immediatamente prima di mysql_db_query.
Alessandro
archimede
Moderatore
 
Post: 2851
Iscritto il: 07/11/02 12:41
Località: Genova

Re: [PHP+MySql] Ricerca dati attraverso un campo di ricerca

Postdi gahan » 16/11/09 14:49

archimede ha scritto:
archimede ha scritto:Posta qui il contenuto della variabile $sql immediatamente prima di mysql_db_query.
Alessandro


$sql. ="$str. ORDER BY id";
words like violence, break the silence
Avatar utente
gahan
Moderatore
 
Post: 1397
Iscritto il: 23/01/08 16:09

Re: [PHP+MySql] Ricerca dati attraverso un campo di ricerca

Postdi archimede » 16/11/09 14:56

:eeh:
archimede ha scritto:Posta qui IL CONTENUTO della variabile $sql immediatamente prima di mysql_db_query.
Alessandro
archimede
Moderatore
 
Post: 2851
Iscritto il: 07/11/02 12:41
Località: Genova

Re: [PHP+MySql] Ricerca dati attraverso un campo di ricerca

Postdi gahan » 16/11/09 15:35

$sql= "SELECT $sql="SELECT*FROM $tabella WHERE ";

$sql .= "AND prezzo BETWEEN {$prezzoDA} AND {$prezzoA}";

$sql.=$str." ORDER BY id";

$str.="titolo LIKE '%$lista_parole[$i]%' OR ";

Quindi $sql=SELECT $sql="SELECT*FROM $tabella WHERE titolo LIKE '%$lista_parole[$i]%' AND prezzo BETWEEN {$prezzoDA} AND {$prezzoA}" <-- quest'ultima varia in base all'istruzione IF.

Mi sto un po confondendo :-?
words like violence, break the silence
Avatar utente
gahan
Moderatore
 
Post: 1397
Iscritto il: 23/01/08 16:09

Re: [PHP+MySql] Ricerca dati attraverso un campo di ricerca

Postdi archimede » 16/11/09 15:43

gahan ha scritto:Mi sto un po confondendo :-?
Decisamente. Sono in grado di leggere il codice che hai postato, ma a me interessa IL VALORE effettivo di quella variabile nel momento in cui esegui la pagina: fattelo stampare (il valore) sul browser.

Alessandro
archimede
Moderatore
 
Post: 2851
Iscritto il: 07/11/02 12:41
Località: Genova

Re: [PHP+MySql] Ricerca dati attraverso un campo di ricerca

Postdi gahan » 16/11/09 15:54

archimede ha scritto:
gahan ha scritto:Mi sto un po confondendo :-?
Decisamente. Sono in grado di leggere il codice che hai postato, ma a me interessa IL VALORE effettivo di quella variabile nel momento in cui esegui la pagina: fattelo stampare (il valore) sul browser.

Alessandro


In che senso fattelo stampare?

dovrei dargli l'istruzione echo $sql?
words like violence, break the silence
Avatar utente
gahan
Moderatore
 
Post: 1397
Iscritto il: 23/01/08 16:09

Prossimo

Torna a Programmazione


Topic correlati a "[PHP+MySql] Ricerca dati attraverso un campo di ricerca":


Chi c’è in linea

Visitano il forum: Nessuno e 12 ospiti