Semplice Motore di Ricerca con PHP & Mysql



Ipotizziamo il caso in cui un visitatore si ricordasse di me per una news in particolare , o avesse bisogno di trovare una news contente uno script , ma sia passato troppo tempo dall’ultima visita, e quindi sia stata seppellita da altri 500 milioni di articoli, Come farebbe ? Proverebbe pagina per pagina ? Cercherebbe l’aiuto da casa ?

No , basterebbe soltanto un semplice motore di ricerca interno al database , contente le nostre news.

A differenza di quello che si pensa, è molto facile realizzare un semplice motore di ricerca con PHP e MYSQL, e in questo articolo vi spiego come si fa :) .

Il motore di ricerca che vi propongo oggi è molto semplice infatti si basa su una sola pagina e una tabella mysql da perlustrare alla ricerca delle nostre news.

Creiamo la tabella mysql da PhpMyAdmin

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
CREATE TABLE `tabella_news` (
`id` INT( 40 ) NOT NULL AUTO_INCREMENT PRIMARY KEY ,
`titolo` VARCHAR( 255 ) NOT NULL ,
`data` VARCHAR( 255 ) NOT NULL ,
`testo` TEXT NOT NULL
) ENGINE = MYISAM

INSERT INTO `tabella_news` (
`id` ,
`titolo` ,
`testo`
`data`
)
VALUES (
NULL , 'Giornata Blog', 'testo di prova', '14-02-10'
), (
NULL , 'Bis articolo 10', 'testo di prova', '15-02-10'
);

Creiamo la pagina cerca.php e inseriamogli questo codice:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
<form action='cerca.php?ricerca=ok' method='POST'>

<b>Ricerca</b><br>
<input type='text' name='cerca'><br>
<input type='submit' value='Invia'>

</form>

</form>
<?php

// connettiamoci il nostro database

$db_host = "localhost";
$db_user = "root";
$db_password = "pass";
$db_name = "my_db";

//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');

// recuperiamo il valore ricerca inviato con get

$ricerca = $_GET['ricerca'];

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

if ( $ricerca == 'ok' ) {

// recuperiamo ora cerca inviato con post

$cerca = $_POST['cerca'];

// vediamo se è stato compilato il campo

if ( $cerca == TRUE && $cerca != "" ) {

// ora vediamo se supera i tre caratteri

if ( strlen($cerca) >= 3 ) {

// ora depuriamo la stringa da cercare sul database

$cerca =  mysql_escape_string(stripslashes($cerca));

// ora possiamo effettuare la nostra ricerca sul db, state attenti alla sintassi

$query = "SELECT * FROM tabella_news WHERE testo LIKE '%$circa%' OR titolo LIKE '%$circa%' OR data LIKE '%$circa%'";

$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);

if ( $dentro_la_query == TRUE ) {

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

$titolo = $row['titolo'];
$testo = $row['testo'];
$data = $row['data'];
$id = $row['id'];

// stampiamo i nostri dati

echo "Titolo: $titolo<br>";
echo "Data : $data<br>";
echo "Testo : $testo<br>";



}

} else {

echo "Nessun temine alla ricerca trovato";

}


} else {

echo "Devi inserire almeno 3 caratteri";

}

} else {

echo "Non hai compilato il modulo ricerca";

}

}

?>

Come avrete visto nella query ho utilizzato l’operatore LIKE di SQL , utilissimo strumento offertoci dal database per poter cerca termini simili all’interno del database. Infatti se noi cercassimo ‘Giornata’ o ‘blog’ troveremmo lo stesso la news. Infatti la sintassi:

1
colonna LIKE '%cerca%'

ci permette di perlustrare una intera stringa che comincia , contiene o finisce con il termine che stiamo cercando. Se invece volessimo cercare una news che cominciasse soltanto per ‘Giornata’ dovremmo scrivere:

1
colonna LIKE '%cerca'

Io ho aggiunto due controlli molto importanti : quello sul numero dei caratteri minimo da inserire per effettuare la ricerca e quello se il carattere è presente nel db.

Il primo lo trovo molto utile , infatti far ricercare al visitatore una stringa composta da due caratteri non è molto furbo , perché faremmo affaticare molto mysql estraendo inutilmente news superflue.

Per il resto come al solito vi consiglio di implementare i miei script , perché molto semplici, utili per chi è alle prime armi con php.

Uno dei tanti consigli :

- Potreste aggiungere un controllo sul numero di ricerca da effettuare entro un tot di tempo.

Alla prossima e buona ricerca :)




Potresti trovare interessante anche




Iscriviti alla newsletter

Vuoi ricevere ogni articolo che pubblico direttamente sulla tua mail ? Vuoi evitare di perdere qualsiasi articolo pubblico ? Registrati alla mia newsletter in un click.

Inserisci il tuo indirizzo mail:

68 commenti per Semplice Motore di Ricerca con PHP & Mysql

ciao, complimenti per lo script…
perchè facendo tutto per come è scritto mi restituisce sempre “Non hai compilato il modulo ricerca”???
Grazie in anticipo per la risposta

un piccolo errore di sintassi può fare tanto, ora l’ho corretto, prova a fare copia e incolla e vedrai che è tutto come nuovo, ciao :)

cmq grazie per i complimenti , ciao :)

c’è un errore nella richiesta mysql: invece di esserci scritto $cerca, c’è scritto $circa

Ciao e grazie!

Grazie Mille Angeòp provederrò subito a modificare :)

Scusa, ma perchè nonostante aver modificato circa , aver fatto tutto correttamente mi da sempre :
 

Risultati della ricerca: nessun risultato!
Specificare un criterio di ricerca.
eppure quello che ho provato a cercare esiste nel database !??!?!?
 
potresti aiutarmi ?!?!

Ciao ragazzi…
trovo questa guida una delle più interessanti sul web. Però ho dei problemi…e vorrei parlarne con voi…
Ho utilizzato questa guida inserendo il codice in questo modo:
 
<form action=’cerca.php?ricerca=ok’ method=’POST’>

<b>Ricerca</b><br>
<input type=’text’ name=’cerca’><br>
<input type=’submit’ value=’Invia’>

</form>

</form>
<?php

// connettiamoci il nostro database

$db_host = “localhost”;
$db_user = “root”;
$db_password = “root”;
$db_name = “gbook”;

//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’);

// recuperiamo il valore ricerca inviato con get

$ricerca = $_GET['ricerca'];

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

if ( $ricerca == ‘ok’ ) {

// recuperiamo ora cerca inviato con post

$cerca = $_POST['cerca'];

// vediamo se è stato compilato il campo

if ( $cerca == TRUE && $cerca != “” ) {

// ora vediamo se supera i tre caratteri

if ( strlen($cerca) >= 1 ) {

// ora depuriamo la stringa da cercare sul database

$cerca =  mysql_escape_string(stripslashes($cerca));

// ora possiamo effettuare la nostra ricerca sul db, state attenti alla sintassi

$query = “SELECT * FROM accelgbook WHERE targaauto LIKE ‘%$circa%’OR piazzavia LIKE ‘%$circa%’ OR mese LIKE ‘%$circa%’ OR giorno LIKE ‘%$circa%’OR anno LIKE ‘%$circa%’OR ora LIKE ‘%$circa%’OR minuti LIKE ‘%$circa%’OR addetto LIKE ‘%$circa%’”;

$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);

if ( $dentro_la_query == TRUE ) {

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

$targaauto = $row['targaauto'];
$piazzavia = $row['piazzavia'];
$mese = $row['mese'];
$giorno = $row['giorno'];
$anno = $row['anno'];
$ora = $row['ora'];
$minuti = $row['minuti'];
$addetto = $row['addetto'];
$id = $row['id'];

// stampiamo i nostri dati

echo “Targa Auto: $targaauto<br>”;
echo “piazzavia : $piazzavia<br>”;
echo “Mese: $mese<br>”;
echo “Giorno : $giorno<br>”;
echo “Anno : $Anno<br>”;
echo “Ora : $Ora<br>”;
echo “Minuti : $minuti<br>”;
echo “Addetto : $addetto<br>”;

}

} else {

echo “Nessun temine alla ricerca trovato”;

}

} else {

echo “Devi inserire almeno 3 caratteri”;

}

} else {

echo “Non hai compilato il modulo ricerca”;

}

}

?>
 
Il db è:
 
CREATE TABLE `accelgbook` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`targaauto` text NOT NULL,
`tipoveicolo` text NOT NULL,
`piazzavia` text NOT NULL,
`mese` text NOT NULL,
`giorno` text NOT NULL,
`anno` text NOT NULL,
`ora` text NOT NULL,
`minuti` text NOT NULL,
`addetto` text NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM  DEFAULT CHARSET=latin1 AUTO_INCREMENT=280539 ;
 
…Però non va…dove sbaglio?

@Amedeo grazie mille per i complimenti… cosa è che non va nello script?

Ti dà errori ? Non spunta nulla ? Aspetto tue nuove :D

ti spiego….se cerco la targa di un’auto…mi da tutti i dati del db…e me li da sballati…

$query = “SELECT * FROM accelgbook WHERE targaauto LIKE ‘%$circa%’OR piazzavia LIKE ‘%$circa%’ OR mese LIKE ‘%$circa%’ OR giorno LIKE ‘%$circa%’OR anno LIKE ‘%$circa%’OR ora LIKE ‘%$circa%’OR minuti LIKE ‘%$circa%’OR addetto LIKE ‘%$circa%’ ORDER BY id”;

Prova con questa query :D

ho inserito questa stringa…
 
se inserisco una targa e poi cerco una traga mi stampa tutte le targhe…e non capisco il perchè

sto lavorando in locale…se ti mando un file zippato?

Inviami il tutto tramite il modulo contatti @Amedeo

rocco scusami l’ho inviata una decina di minuti fa a info*******.net

arrivato?

@amedeo a me funziona non sono cosa dirti, hai provato a riaggiornare il browser?

Ciao rocco, si ho aggiornato…non so ma a me da i campi invertiti. Se inserisco una data o un nome di un addetto, quando vado a fare la ricerca me li da invertiti…hai provato?
Se metti una data o una piazza….li inverte
 

@Amedeo problema trovato, alcune variabili ( come $anno e $ora ) le hai scritte con la lettere maiuscola :D , scrivi tutti in minuscolo e vedi che funziona :D

Grazie rocco…fin qui ci siamo!!! Ora c’è un secondo problema:
se compilo un form inserendo determinati dati…come mai quando vado a cercarli mi stampa tutti i dati del database e non quello che ho ricercato?

@Amedeo questo non te lo saprei dire in quanto non ho i dati del mysql :(

nella mail che ti ho inviato ieri ti ho allegato il db che si chiama gbook.sql…
se gli dai uno sguardo te ne sono grato

Ciao!Ho provato il tuo script utilizzando però come form html un menù a tendina in modo che si possano scegliere solo determinate parole,però mi stampa sempre tutti i dati del database.Mi potresti aiutare?
FORM HTML:
<form action=’cerca.php?ricerca=ok’ method=’POST’>
<b>Tipologia</b><br>
<select name=”cerca” type=”text” >
<option>Seleziona il tipo di immobile..</option>
<option selected=”selected”>Appartamento/Monolocale</option>
<option>Palazzina</option>
<option>Casa Vacanze</option>
<option>Villa/Villino</option>
<option>Box auto</option>
<option>Hotel/Albergo</option>
<option>Rustico/Casale</option>
<option>Terreno</option>
<option>Capannone/Magazzino/Loc.Comm.</option>
<option>
</select>
<br>
<input type=’submit’ value=’Invia’>

</form>

</form>
CERCA.PHP:
<?php
require (“config.php”);

$ricerca =(isset($_GET['ricerca']));

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

if ( $ricerca == ‘ok’ ) {

// recuperiamo ora cerca inviato con post

$cerca = (isset($_POST['cerca']));

// vediamo se è stato compilato il campo

if ( $cerca == TRUE && $cerca != “” ) {

// ora depuriamo la stringa da cercare sul database

$cerca =  mysql_escape_string(stripslashes($cerca));

// ora possiamo effettuare la nostra ricerca sul db, state attenti alla sintassi

$sql = “SELECT * FROM vendita WHERE tipologia LIKE ‘%$cerca%’OR zona LIKE ‘%$cerca%’ OR prezzo LIKE ‘%$cerca%’ OR descrizione LIKE ‘%$cerca%’OR fototn LIKE ‘%$cerca%’ ORDER BY id”;

$risultato = mysql_query($sql) or die (mysql_error());

$risposta = mysql_query($sql) or die (“Utilizza termini più specifici!”);

$dentro_la_query= mysql_fetch_assoc($risposta);

if ( $dentro_la_query == TRUE ) {

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

$tipologia = $row['tipologia'];
$zona = $row['zona'];
$prezzo = $row['prezzo'];
$descrizione = $row['descrizione'];
$fototn = $row['fototn'];

// stampiamo i nostri dati

echo “Tipologia: $tipologia<br>”;
echo “Zona : $zona<br>”;
echo “Prezzo : $prezzo<br>”;
echo “Descrizione : $descrizione<br>”;
echo “Foto : $fototn<br>”;

}

} else {

echo “Nessun temine alla ricerca trovato”;

}
}

} else {

echo “Non hai compilato il modulo ricerca”;

}

?>
Ed utilizzo una tabella,di nome “vendita”cosi composta:
id=Not Null,Primary Key,Auto Increment
tipologia=Varchar,NULL
zona=Varchar,NULL
prezzo=Decimal,Unsigned,Null
descrizione=Text,Null
fototn=Varchar,Null
Io praticamente vorrei che facendo la ricerca per tipologia mi dia i risultati corrispondenti,invece mi trova sempre tutti i dati immessi,anche se in nessun campo c’è la parola selezionata tramite form.
Grazie anticipatamente,ciao^__^
 

Ok,ho risolto! Grazie lo stesso! :D

@Novella Se hai bisogno di qualcos’altro , puoi sempre scrivere ;) sono qua per questo :D

Grazie tantissimo!E complimentoni per gli script,chiari e lineari!

ciao rocco
ho una tabella con più parole in un campo tag
esempio: composti composto organico organici
se un utente digita “composti organici”?
 
io avevo pensato di scomporre la frase inviata dall’utente e fare un like %primaparola% or %seconda%
ma per scomporre composti organici
devo usare uno split? e per raggiungere  like prima parola or seconda come posso fare?

@giuseppe non c’è bisogo che tu divida la parola lo stesso la trova se è segnata tra le PERCENTUALI ;)

Ho scritto nel database quello che hai detto di scrivere:
CREATE TABLE `tabella_news` (`id` INT( 40 ) NOT NULL AUTO_INCREMENT PRIMARY KEY ,`titolo` VARCHAR( 255 ) NOT NULL ,`data` VARCHAR( 255 ) NOT NULL ,`testo` TEXT NOT NULL ) ENGINE = MYISAM INSERT INTO `tabella_news` (`id` ,`titolo` ,`testo` `data` )VALUES (NULL , ‘Giornata Blog’, ‘testo di prova’, ’14-02-10′), (NULL , ‘Bis articolo 10′, ‘testo di prova’, ’15-02-10′);
ma non mi funziona mi dice errore si sintassi mi puoi aiutare?
Grazie

ciao e complimenti per lo script
volevo chiederti, se io volessi inserire un campo blob nel mio db mysql e caricare una foto in modo tale che con la ricerca mi visualizzi sia i dati che la foto, come dovrei fare? la tabella sarà composta da: id, nome, tipo e foto. Grazie

@dani buon girono in che senso visualizzi , parli di stampare a video ? Se intendi questo è molto semplice quello che devi fare:

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

$img = $row['img'];

echo “<img src=’$img’>”;

}

ciao
si visualizzare le foto che ho inserito nel db. Ho messo lo script che mi hai dato ma non funziona, mi da errore alla riga
$img = $row['img'];
Devo modificarlo in qualche parte? devo mettere qualcosa al posto ‘img’?
e la query come la strutturo, devo solo dire “SELECT nome, foto FROM db WHERE nome LIKE ‘%$cerca%’ ?
spero mi potai aiutare, grazie e ancora complimenti…

scusami la riga in cui mi da errore è
echo “<img src=’$img’>”;
sorry…

Ciao a tutti, grazie mille per lo script.
Io però volevo chiederti per fare in modo di filtrare due valori in contemporanea. nel tuo esempio se volessi cercare solo un dato con quel titolo, quel testo e quella data (essendoci valori simili) e non fare in modo che mi escano tutti i dati con quella data o quel titolo o quel testo. come devo fare?
Grazie mille

@vido ciao per filtrare due o più risultati devi cambiare qualcosa nella query. Ti faccio un esempio pratico

PRIMA USAVI QUESTA PER CERCARE O UN RISULTATO O UN ALTRO:

$query = “SELECT * FROM tabella_news WHERE testo LIKE ‘%$circa%’
OR titolo LIKE ‘%$circa%’”
;

MENTRE ORA PER SELEZIONA IL TESTO O IL TITOLO DEVI SCRIVERE QUESTA QUERY:

$query = “SELECT * FROM tabella_news WHERE testo LIKE ‘%$circa%’
AND titolo LIKE ‘%$circa%’”
;

Spero tua abbia capito il meccanismo, per saperne di più ti consiglierei di approfondire una mia guida su php e mysql.
http://www.ebug.it/tutorbug/guida.php?id_guida=4 ciao e fammi sapere come è andata :)

@dany ma tu hai creato la colonna img nella tabella sul mysql ?

avevo già provato a modificare l’or con l’and però non mi trova niente in questo modo.
 
$query = “SELECT * FROM tabella_news WHERE testo LIKE ‘%$circa%’
AND titolo LIKE ‘%$circa%’ AND autore LIKE’%$circa’”;
 
mi dice sempre nessun termine della ricerca trovato
non riesco a capire dove sia l’errore.

ciao
ho creato una colonna chiamata foto che utilizza il campo blob

@vido sicuro che esistano dati che corrispondano per il testo , titolo e autore ? se anche uno dei 3 valori non corrisponde non ti trova nulla :/

@dany potresti anche utilizzare il campo varchar, considerando che 255 caratteri bastano e avanzano :D

scusa in che senso usare varchar? io ho questi campi blob (che sono costretto ad usare per diversi motivi) e ho bisogno che la foto caricata mi venga mostrata a video. Ho provato a fare come mi hai detto ma non va.

Ciao inanzitutto buona anno :D
si i valori corispondono, ho provato anche a ricreare la tabella, ma niente

@vido molto strano inviamo il tutto via mail magari riesco a risolverre così :D

Ciao Rocco, scusami sei riuscito a dare un occhiata al codice?
Grazieee

@vido il codice mi sembra ok, hai provato a vedere se esistono valori che hai inserito nella ricerca ? Fammi sapere

si si certamente:
non riesco a venirne a capo se metto or me li trova tutti (se cerco villa 400000 periferia mi escono  i 2  valori con 400000 e come se mi cerca solo per il prezzo) invece se metto and non mi trova niente.
CREATE TABLE IF NOT EXISTS `vendita` (
`id` int(20) NOT NULL auto_increment,
`tipologia` varchar(255) default NULL,
`zona` varchar(255) default NULL,
`prezzo` int(20) unsigned default ’0′,
`descrizione` text,
`fototn` varchar(20) default NULL,
PRIMARY KEY  (`id`)
) ENGINE=MyISAM  DEFAULT CHARSET=latin1 AUTO_INCREMENT=7 ;
 
INSERT INTO `vendita` (`id`, `tipologia`, `zona`, `prezzo`, `descrizione`, `fototn`) VALUES
(1, ‘Appartamento/Monolocale’, ‘centro’, 100000, NULL, NULL),
(2, ‘Villa/Villino’, ‘Periferia’, 300000, NULL, NULL),
(3, ‘Terreno’, ‘Centro’, 100000, NULL, NULL),
(4, ‘Villa/Villino’, ‘periferia’, 400000, NULL, NULL),
(5, ‘Palazzina’, ‘centro’, 800000, NULL, NULL),
(6, ‘Villa/Villino’, ‘centro storico’, 400000, NULL, NULL);

Ciao!
Ma come mai qualsiasi parola io scriva mi stampa comunque tutto quello che c’è nella tabella del database?
Stampa tutto anche se la parola non c’è!

@Mary strano hai copiato è incollato tutto il codice come lo trovi nell’esempio ?

@Vido me lo scrivi il codice php che fa la ricerca ?

te lo avevo già inviato, cmq ti rimando la mail. Grazie

Ciao scusami ho risolto :D
avevo fatto un errore stupidissimo
Grazie ancora

Ciao Rocco! complimenti per l’articolo;
Io sono un autodidatta del php…. vorrei chiederti….
se dovessi fare un database con due o più campi di ricerca da dove potrei partire per strutturare il codice?

grazie!

marco! 

@marco in realtà ti consiglio di leggere qualche guida su php e su php + mysql per comprendere al meglio il funzionamento di tale codice visto che anche se ti dessi delle ipotetiche stringhe di codice sarebbero arabo per te.

Ti dò questi due link che ti portano a delle guide che ho creato io :D

- Guida a PHP
- Guida a PHP + Mysql

Ah ti ringrazio Rocco!
Ma le ricerche attraverso più select si differiscono tanto nel codice da una ricerca ad un solo select…?
Devo creare un database bibliografico..
composto dai campi autore, titolo, anno, e descrizione…. grazie al tuo super articolo riesco a creare attraverso un solo select un campo di ricerca in cui posso trovare i dati di tutti i campi…..
se voglio invece creare 4 select diversi ? credo che da questo inghippo non uscirò facilmente… 

@Marco non riesco a seguiti …. se vuoi creare 4 select diversi fai quattro query divise no ?

Ciao Rocco in poche parole, ho 3 campi testo ( form )
autore
titolo
descrizione

io devo effettuare una ricerca per cui se digito Marco su autore escono tutti i libri che ho scritto oppure se metto il titolo e autore esce la descrizione del libro e così via….. una ricerca avanzata…… ho guardato la tua guida ed ho provato ad elaborare il tutto ma non funziona…:-( … potresti darmi una mano a risolvere l’arcano mistero=??? ti posto il codice.(tentativo).

 
 
<form action=’index.php?ricerca=ok’ method=’POST’>
    <p class=”Stile1″></p>
<p class=”Stile1″><br />
      <input name=”autore” type=”text” value=”" size=”80″ />
    </p>
<p class=”Stile1″>
 <input name=”titolo” type=”text” value=”" size=”80″ />
</p>
<p class=”Stile1″>
 <input name=”descrizione” type=”text” value=”" size=”80″ />
    </p>
<p>
      <input name=”submit” type=’submit’ value=’cerca’ />
</p>
    <p><span style=”clear: both;”>
 
<?php
 
// connettiamoci il nostro database
 
$db_host = “”;
$db_user = “”;
$db_password = “”;
$db_name = “”;
 
//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’);
 
 
 
 
// recuperiamo ora cerca inviato con post
 
$autore = $_POST['autore'];
$titolo = $_POST['titolo'];
$descrizione = $_POST['descrizione'];
 
 
 
 
$clausola = “”;
if ( $_POST['autore'] != “” ) $clausola = ‘autore LIKE “%’ . $_POST['autore'] . ‘%”‘;
 
$temp = “”;
if ( $_POST['titolo'] != “” ) $temp = ‘titolo LIKE “%’ . $_POST['titolo'] . ‘%”‘;
if ( $clausola != “” ) $clausola .= ” AND “;
$clausola .= $temp;
 
$temp = “”;
if ( $_POST['descrizione'] != “” ) $temp = ‘descrizione LIKE “%’ . $_POST['descrizione'] . ‘%”‘;
if ( $clausola != “” ) $clausola .= ” AND “;
$clausola .= $temp;
 
 
 
if ($clausola != “” ) {
$query .= ” WHERE ( ” . $clausola . ” )”;
}
 
$query = “SELECT * FROM tabella WHERE autore LIKE ‘%$cerca%’ AND titolo LIKE ‘%$cerca%’AND descrizione LIKE ‘%$cerca%’”; 
 
 
 
$autore = $row['autore'];
$titolo = $row['titolo'];
$descrizione = $row['descrizione'];
 
 
 
// stampiamo i nostri dati
echo “<B>Autore:</B> $autore<br>”;
echo “<B>Titolo:</B> $titolo “;
echo “<B>Descrizione:</B> $descrizione<br>”;
 
 
 
?>
 

A me funziona tutto…
una sola cosa pero’
dopo aver effettuato una ricerca vorrei rieffettuarne un’altra, ma la pagina non mi restituisce la nuova ricerca…
Ovvero rimane ferma sui riultati della prima ricerca…
Se gentilmente mi puoi spiegare come posso effettuare una nuova ricerca direttamente dopo averne fatta una…
help me :)
attendo tue notizie.. ti ringrazio in anticipo…
ciao …
 

scusa tutto risolto? errore mio nel copiare il codice.. saluti..

Salve, volevo sapere qual’ è la sintassi per effettuare una ricerca direttamente da url
ho guardato uno dei tuoi lavori e se inserisci per esempio http://www.azetaelaborazioni.it/?s=test ti rimanda direttamente al sito alla pagina dei risultati.
sul motore di ricerca del tutorial come si potrebbe fare? ad esempio dominio.com/cerca.php?….
saluti e grazie in anticipo per la risposta

Ciao, sono nuovo al php e sto studiando da autodidatta,
vorrei farti i COMPLIMENTI, una semplice funzione che funziona finalmente, sul web ci sono tante cose inservibili.

max

@T1000 questa metodo di ricerca con quella sintassi della url è tipico di wordpress. Comunque dovresi mandare i dati via form con un get e attraverso la funzione $_[GET] dovresti estrarre il tuo valore

ciao io sto creando un sito per la fidelizzazione del mio negozio ho un database in phpmysql con due tabelle una chiamata clienti dove invio tramite dei form i dati del cliente cioè nome,cognome,codice della tessera; e un altra tabella dove vengono inseriti tramite dei form codice tessera e punti accumulati a questo punto io dovrei creare una pagina  dove gli faccio fare la ricerca del cliente tramite il codice della tessera e mi faccia vedere i suoi dati piu’ i punti accumulati e un altra pagina che mi fa stornare i punti che gli dico 

MI POTRESTI AIUTARE PER PIACERE!!!!! 

Ciao Rocco, complimenti con il tutorial,
purtroppo non riesco a farlo funzionare a dovere, continuano sempre ad uscire tutti i dati presenti nella tabella qualsiasi cosa scriva.
Si può avere un aiutino, alcuni hanno risolto il problema?

scusami, ho provato il tuo script… funziona un po male credo, o forse sbaglio io qualcosa…
un db con 4 colonne
id
nome
email
link
io voglio che lui cerchi solo nel campo email per esempio e mi restituisca i dati mancanti di quell’utente… invece qui mi stampa tutti i dati dell’intero db…. ti posto lo script cosi vediamo se ho fatto danno io modificando o l’errore c’è …
<?php

// connettiamoci il nostro database

$db_host = “xxx”;
$db_user = “xxx”;
$db_password = “xxx”;
$db_name = “xxx”;

//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’);

// recuperiamo il valore ricerca inviato con get

$ricerca = $_GET['ricerca'];

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

if ( $ricerca == ‘ok’ ) {

// recuperiamo ora cerca inviato con post

$cerca = $_POST['cerca'];

// vediamo se è stato compilato il campo

if ( $cerca == TRUE && $cerca != “” ) {

// ora vediamo se supera i tre caratteri

if ( strlen($cerca) >= 3 ) {

// ora depuriamo la stringa da cercare sul database

$cerca =  mysql_escape_string(stripslashes($cerca));

// ora possiamo effettuare la nostra ricerca sul db, state attenti alla sintassi

$query = “SELECT * FROM users WHERE mail LIKE ‘%$cerca%’”;

$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);

if ( $dentro_la_query == TRUE ) {

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

$sex = $row['sex'];
$email = $row['email'];
$nome = $row['nome'];
$id = $row['id'];

// stampiamo i nostri dati

echo “sex: $sex<br>”;
echo “email : $email<br>”;
echo “nome : $nome<br>”;

}

} else {

echo “Nessun temine alla ricerca trovato”;

}

} else {

echo “Devi inserire almeno 3 caratteri”;

}

} else {

echo “Non hai compilato il modulo ricerca”;

}

}

?>

Ciao, in primis complimenti per la guida, è stata veramente utile, semplice e chiara. Ho però un piccolo problema: Ho creato una tabella per vedere i risultati suddivisa per titolo, anno, pagine e collocazione… tutto bene se trova solo un risultato, ma quando sono più di uno, la tabella si ripete visualizzano ogni volta i titoli del risultato. Mi piacerebbe visualizzare solo una volta i titoli (in alto) e poi sotto tutti i libri trovati. Credo sia semplice da risolvere, ma non ho trovato un modo per farlo… sono un disastro lo so, ma se potessi aiutarmi, mi faresti un grande favore.
grazie 1000,
Paolo
PS questo è l’indirizzo della pagina: http://www.caicarpi.it/wp/cercalibri.php
…e qui sotto il codice
(cut)
$Titolo = $row['Titolo'];
$AnnoStampa = $row['AnnoStampa'];
$Pagine = $row['Pagine'];
$Collocazione = $row['Collocazione'];

// stampiamo i nostri dati

echo ” <table border> <tr><th colspan=’4′>Risultati della Ricerca</tr>
       <tr><th>Titolo<th>Anno di Stampa<th>Pagine<th>Collocazione</tr>”;
echo ” <tr><td>$Titolo<td>$AnnoStampa<td>$Pagine<td>$Collocazione</tr>”;
echo ” </table>”;

// echo “Titolo: $Titolo”;
// echo ” – Anno di Stampa: $AnnoStampa”;
// echo ” – Pagine: $Pagine”;
// echo ” – Collocazione: $Collocazione<br><br>”;

}

} else {

echo “Nessun temine alla ricerca trovato”;

}

} else {

echo “Devi inserire almeno 3 caratteri”;

}

} else {

echo “Non hai compilato il modulo ricerca”;

}

}

?>

Ciao, sto utilizzando questo form con php ma ho difficoltà a farlo funzionare.
Ho realizzato un form con delle voci da selezionare e l’ho messo nella mia pagina index.php e come action del form ho inserito una pagina cerca.php dove vorrei che venissero visualizzati i risultati. Non so cosa sbaglio ma mi da errore qui $ricerca = $_GET['ricerca']; 
 
Perchè?

Perdonami se è una banalità ma il php è nuovo per me.

Spero tu possa darmi una indicazione
   

A me da questo errore alla riga 26 e non capisco perchè

Notice
: Undefined index: ricerca in C:\xampp-portable\htdocs\cerca.php on line 26

Ciao, complimenti per lo script…
Io però ho un problema quando vado ad inserire un nome da cercare es. pippo e premo invia, ottengo questo errore:
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ”%pippo%’ at line 1
 
Ho controllato tutto ma non vedo errori di sintassi.

Ciao
Sto usando il tuo motore di ricerca e funziona alla grande.
Per la visualizzazione dei dati uso una tabella estrerna al php creandola in html, ma quando la collego al css per la formattazione mi restituisce solo un dato (l’ultimo per la precisione).
Ecco parte del codice html/php

…..

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

<div class=”view”>
<?php echo $row['categorie']; ?>
<?php echo $row['titolo']; ?>
<?php echo $row['data']; ?>
<?php echo $row['pass']; ?>
</div>

…..

e codice css

….
.view {
    position: absolute;
    top: 200px; left: 40px;
    width: 500px; height: 500px;
    background: red;
    
}
…..

Potresti darmi un consiglio per risolvere la questione?
Sono sicuro che è qualche fesseria fatta da me, ma ci sto sbattendo la testa da diversi giorni.
Grazie
Davide

Lascia un Commento