Form per ricerca multipla in MYsql

Paolo Lottini

Nuovo Utente
11 Nov 2012
2
0
0
Ciao a tutti,
ho un problemino su un form per ricerca multipla nel database Mysql.
Tutto bene se ricerco solo un campo, ma se faccio un form con la possibilità di ricercare per titolo opuure per autore o per editore, allora non riesco a farlo funzionare.

Guardando il forum (una benedizione) sono riuscito a preparare il codoce che allego. Premetto che non mastico PHP e che senza di voi non sarei mai potuto arrivare fino a questo punto e per me è già un successo, ma ora proprio non riesco ad andare avanti.

Il codice che allego, funziona bene se cerco un editore, ma se cerco per autore o titolo, mi stampa tutta la lista dei libri!!! perché???

Vista l'importanza della questione, ringrazio fin d'ora chi vorrà aiutarmi, e sono disponibile a elargire un compenso per risolvere il problema (ci possiamo accordare in privato).

Grazie ancora,
Paolo


PHP:
<form action='?ricerca=ok' method='POST'>
<table width="520" height="100" border="1" align="center">
<tbody>
<tr>
<td width="98" height="20">
<font size="4">  Titolo:</font>
</td>
<td width="320" height="20">
<input type="text" size="40" name="cercatitolo">
</td>
</tr>
<tr>
<td width="98" height="20">
<font size="4">  Autore:</font>
</td>
<td width="320" height="20">
<input type="text" size="40" name="cercaautore">
</td>
</tr>
<tr>
<td width="98" height="20">
<font size="4">  Editore:</font>
</td>
<td width="320" height="20">
<input type="text" size="40" name="cercaeditore">
</td>
</tr>
<tr>
<td align="center" colspan="2">
<input type='submit' value='Cerca'>
</td>
</tr>
</tbody>
</table>


<?php

// connessione al database

$db_host = "xxxxx";
$db_user = "xxxx";
$db_password = "xxxx";
$db_name = "xxxxxxx";

//connetto il database

$db = mysql_connect($db_host, $db_user, $db_password) or die ('Errore durante la connessione');
mysql_select_db($db_name, $db) or die ('Errore durante la selezione del db');

// recupero il valore ricerca inviato con get

$ricerca = $_REQUEST['ricerca'];

// vediamo se è stato inviato, e quindi uguale a ok

if ( $ricerca == 'ok' ) {

// recupero ora le stringhe inviate con post

$cercatitolo = $_REQUEST['cercatitolo'];
$cercaautore = $_REQUEST['cercaautore'];
$cercaeditore = $_REQUEST['cercaeditore'];


// ora depuro la stringa da cercare sul database

$cercatitolo =  mysql_escape_string(stripslashes($cercatitolo));
$cercaautore =  mysql_escape_string(stripslashes($cercaautore));
$cercaeditore =  mysql_escape_string(stripslashes($cercaeditore));

// query per titolo

if ( isset ($cercatitolo)) { $query = "SELECT test_prefixLibri.Titolo, test_prefixAutori.Cognome, test_prefixEditori.Nome, test_prefixLibri.Pagine, test_prefixLibri.Collocazione FROM test_prefixLibri, test_prefixAutori, test_prefixEditori WHERE Titolo LIKE '%$cercatitolo%' AND test_prefixEditori.Id_Editore = test_prefixLibri.Id_Editore AND  test_prefixAutori.Id_Autore = test_prefixLibri.Responsabilità ORDER BY Titolo";

$risultato = mysql_query($query) or die (mysql_error());
$risposta = mysql_query($query) or die ("Utilizza termini più specifici!");
$dentro_la_query= mysql_fetch_assoc($risposta);}

// query per autore

if ( isset ($cercaautore)) { $query = "SELECT test_prefixLibri.Titolo, test_prefixAutori.Cognome, test_prefixEditori.Nome, test_prefixLibri.Pagine, test_prefixLibri.Collocazione FROM test_prefixLibri, test_prefixAutori, test_prefixEditori WHERE prefixAutori.Cognome LIKE '%$cercaautore%' AND test_prefixEditori.Id_Editore = test_prefixLibri.Id_Editore AND  test_prefixAutori.Id_Autore = test_prefixLibri.Responsabilità ORDER BY Titolo";

$risultato = mysql_query($query) or die (mysql_error());
$risposta = mysql_query($query) or die ("Utilizza termini più specifici!");
$dentro_la_query= mysql_fetch_assoc($risposta);}

// query per editore

if ( isset ($cercaautore)) { $query = "SELECT test_prefixLibri.Titolo, test_prefixAutori.Cognome, test_prefixEditori.Nome, test_prefixLibri.Pagine, test_prefixLibri.Collocazione FROM test_prefixLibri, test_prefixAutori, test_prefixEditori WHERE prefixAutori.Cognome LIKE '%$cercaautore%' AND test_prefixEditori.Id_Editore = test_prefixLibri.Id_Editore AND  test_prefixAutori.Id_Autore = test_prefixLibri.Responsabilità ORDER BY Titolo";

$risultato = mysql_query($query) or die (mysql_error());
$risposta = mysql_query($query) or die ("Utilizza termini più specifici!");
$dentro_la_query= mysql_fetch_assoc($risposta);}


// verifica dati

if ( $dentro_la_query == TRUE ) {

// stampa dati

echo "<table border width=”540″ border=”2″ frame=”void” cellpadding=”5″ cellspacing=”0″> 
<thead>
<tr><th>Titolo<th>Autore<th>Editore<th>Pagg.<th>Scaffale</th></tr>
</thead>";

while($row= mysql_fetch_assoc($risultato)) {

$Titolo = $row['Titolo'];
$Cognome = $row['Cognome'];
$Nome = $row['Nome'];
$Pagine = $row['Pagine'];
$Collocazione = $row['Collocazione'];

echo "  <tbody>
<tr bgcolor=”#00FF00″><td><h5>$Titolo</h6><td><h5>$Cognome</h5><td><h5>$Nome</h5><td><h5>$Pagine</h6><td><h5>$Collocazione</h5></tr>
</tbody>";
}
echo " </table>";
}
} else {

echo "Nessun temine alla ricerca trovato";

}



?>
 
ciao
prova in questo modo
PHP:
<?php
//......
$cercatitolo =  mysql_escape_string(stripslashes(trim(($cercatitolo)));//metti un trim per evitare spazi vuoti o solo spazi
$cercaautore =  mysql_escape_string(stripslashes(trim($cercaautore)));
$cercaeditore =  mysql_escape_string(stripslashes(trim($cercaeditore)));
//inizializzi una variabile per il where
$wh = " WHERE 1=1 ";
//poi fai una query sola
if($cercatitolo !=""){
	$wh .= " AND t.Titolo LIKE '%$cercatitolo%' ";//concateno
}
if($cercaautore !=""){
	$wh .= " AND a.Cognome LIKE '%$cercaautore%' ";
}
//hai ripetuto due volte la query cercautore e non hai messo l'editore (hai il nome dell'editore?)
if($cercaeditore !=""){
	$wh .= " AND e.Editore LIKE '%$cercaeditore%' ";
}
//poi costruisci la query con la tua join
$query = "SELECT * FROM test_prefixLibri AS t, test_prefixAutori AS a, test_prefixEditori AS e $wh
		AND e.Id_Editore = t.Id_Editore AND  a.Id_Autore = a.Responsabilità ORDER BY a.Titolo";
//qui puoi mettere un var_dump($query); per vedere se la query vuene scritta come dovrebbe
$risult=mysql_query($query);
if (mysql_num_rows($risult) ==0 ){
	echo "devi affinare la ricerca"; // e troni al form di ricerca
}else{
	//estrat i risultai e li mostri
}
//....
?>
sappimi dire se funzia e se non funzia quli errori da

p.s.
comunque un consiglio: evita di usare le maiuscole nei nomi dei campi (e variabili) si evitano diversi errori
 
Fantastico!
Dopo le tue modifiche gira che è una meraviglia...

solo una parentesi in più dopo il trim in questa riga
PHP:
$cercatitolo =  mysql_escape_string(stripslashes(trim(($cercatitolo)));

Mi hai risparmiato qualche notte insonne e qualche litro di caffè.
Grazie di cuore,
Paolo
 

Discussioni simili