ciao a tutti
qualcuno sa qualke link di qualche tutorial dove insegnano a fare un motore di ricerca ke mostri tipo in un articolo la parte trovata evidenziata?? tipo quello di stoner e di phpbb
ciao a tutti
qualcuno sa qualke link di qualche tutorial dove insegnano a fare un motore di ricerca ke mostri tipo in un articolo la parte trovata evidenziata?? tipo quello di stoner e di phpbb
Io il mio me lo sono fatto da solo (senza leggere nulla sinceramente :D).
Comunque se usi mysql per immagazzinare i dati non ci vuole nulla a farlo.
Praticamente il principio è quello di cercare all'interno delle colonne della tabella la parola cercata.
Ad esempio... se io cerco PHP e ho due tabelle (news e sorgenti, tanto per fare un esempio),
farò delle query del tipo
a questo punto estrapoli i dati con le funzioni predefinite e per evidenziate la sintassi vai di str_replace.Codice:SELECT * FROM news WHERE titolo LIKE '%PHP%' OR testo LIKE '%PHP%' SELECT * FROM news WHERE titolo LIKE '%PHP%' OR descrizione LIKE '%PHP%' OR linguaggio = 'PHP'
sisi questo lo so gia l'ho gia creato
solo che volevo sapere come fare quello tipo il tuo e che non so proprio da dove iniziare
Cioè? Spiegati meglio.. fammi un esempio
io ho creato un motore di ricerca con LIKE solo che volevo provare a fare un motore di ricerca tipo il tuo nel caso avessi degli articoli o delle news nel sito
Ma intendi il modulo di ricerca avanzato?
Se intendi quello, è molto più elaborato.. per ogni modulo del CMS tira fuori dalle tabelle nelle quali salva i dati le informazioni per poter effettuare le ricerche (tipo le categorie le mette nella combobox, stessa cosa per le date di pubblicazione o il linguaggio per il modulo sorgenti) e in più accetta le parole chiave per gli altri campi. Insomma.. quello è molto più complesso ma non impossibile.
Prima di tutto ti converrebbe mettere in un menu a tendina i dati che l'utente non può modificare (categorie, date di pubblicazione ecc) per gli altri campi metti una normale textbox, e poi nella pagina che elabora devi tener conto di tutti gli input...
prova a buttar giù qualcosa.
nono intendevo che tu cerchi in un articolo per esempio e i risultati sono nn so circa 50 caratteri e ti evidenzia quello che hai cercato
Per fare quello uso un misto di strpos, substr e str_replace.
sono tutte funzioni predefinite.Codice PHP:
if(strpos($rr['testo'],$value)>50)
$cc = "... ". str_replace($value,$nvalue,substr(htmlentities($rr['testo']),strpos($rr['testo'],$value)-50,150));
else
$cc = str_replace($value,$nvalue,substr(htmlentities($rr['testo']),0,150));
$value e il valore cercato nel box, $nvalue è quello in grassetto. $rr['testo'] è il testo tirato fuori da db.
Ultima modifica di stoner : 29-03-2009 alle ore 12.29.40
ok grazie ma nn ho capito come imposto $nvalue...
$value lo prendi dal form che ne so.. $_POST['campo'];
mentre $nvalue = "<strong>".$value."</strong>";
non è nient'altro che il valore che l'utente inserisce nel form ma in grassetto.
aaaaaaa ok grazie provo e ti faccio sapere
ciao ho provato a modificare il codice del motore con il tuo ma nn va mi da sempre che non trova niente ti posto il codice
in config.php ce solo la connessione al dbCodice PHP:
<?php
include("config.php");
if(isset($_GET['s'])) {
$search = mysql_query("SELECT * FROM w_articoli WHERE art_articolo LIKE '%$_GET[s]%'" );
$total = mysql_num_rows($search);
if($total == 0){
?>
<html>
<head>
<title>Cerca</title>
</head>
<body>
<form action="<?= $_SERVER['PHP_SELF']; ?>" method="get">
Cerca: <input type="text" name="s" /><br/>
<input type="submit" value="Cerca" />
</form>
</body>
</html>
<?php
echo "Non è stato trovato nessun risultato";
}else{
?>
<html>
<head>
<title>Cerca</title>
</head>
<body>
<form action="<?= $_SERVER['PHP_SELF']; ?>" method="get">
Cerca: <input type="text" name="s" /><br/>
<input type="submit" value="Cerca" />
</form>
</body>
</html>
<?php
$value = $_GET['s'];
$nvalue = "<strong>".$value."</strong>";
echo "Termine della ricerca: <b>".$value."</b><br /><br />";
while($r = mysql_fetch_array($search)) {
if(strpos($r['art_articolo'],$value)>50) {
$cc = "... ". str_replace($value,$nvalue,substr(htmlentities($r['art_articolo']),strpos($r['art_articolo'],$value)-50,150));
} else {
$cc = str_replace($value,$nvalue,substr(htmlentities($r['art_articolo']),0,150));
} //fine else
} // fine while.
} // fine else.
} else {
?>
<html>
<head>
<title>Cerca</title>
</head>
<body>
<form action="<?= $_SERVER['PHP_SELF']; ?>" method="get">
Cerca: <input type="text" name="s" /><br/>
<input type="submit" value="Cerca" />
</form>
</body>
</html>
<?php
}
?>
Ultima modifica di palla000 : 30-03-2009 alle ore 21.50.22
Prova a modificare la query così
comunque c'è una pagina per provarlo eventualmente=Codice PHP:
$search = mysql_query("SELECT * FROM w_articoli WHERE art_articolo LIKE '%".$_GET['s']."%'" );
ho modificato ma non va... cerca.php
boh ad occhio non vedo niente di sbagliato..
domanda stupida: c'è qualche articolo nella tabella ?
si ho scritto prova articolo e poi lettere a caso percio qualcosa dovrebbe trovare per forza
Mi sembra strano. Prova a dare la stessa query su phpmyadmin.
l'ho provata e funziona nn capisco cosa puo essere
Intanto cominciamo a fare ordine nel codice. Il form lo stampi sempre, quindi non ha senso metterlo in tutti gli if. lo lasci fuori e fai prima
Prova a postare il file config.phpCodice PHP:
<?php
include("config.php");
?>
<html>
<head>
<title>Cerca</title>
</head>
<body>
<form action="<?= $_SERVER['PHP_SELF']; ?>" method="get">
Cerca: <input type="text" name="s" /><br/>
<input type="submit" value="Cerca" />
</form>
<?php
if(isset($_GET['s'])) {
$search = mysql_query("SELECT * FROM w_articoli WHERE art_articolo LIKE '%".mysql_real_escape_string($_GET['s'])."%'");
$total = mysql_num_rows($search);
if($total == 0){
echo "Non è stato trovato nessun risultato";
}else {
$value = $_GET['s'];
$nvalue = "<strong>".$value."</strong>";
echo "Termine della ricerca: <b>".$value."</b><br /><br />";
while($r = mysql_fetch_array($search)) {
if(strpos($r['art_articolo'],$value)>50)
$cc = "... ". str_replace($value,$nvalue,substr(htmlentities($r['art_articolo']),strpos($r['art_articolo'],$value)-50,150));
else
$cc = str_replace($value,$nvalue,substr(htmlentities($r['art_articolo']),0,150));
}
}
?>
</body>
</html>
cosi mi da errore alla fine
Parse error: syntax error, unexpected $end in /membri/palla000/cerca.php on line 37 che è l'ultima riga non capisco cosa è...
Mi sono scordato di chiudere una parentesi
metti } prima di ?>
ok ora va
ho provato a levare la funzione che mi hai detto tu e non mi da lo stesso risultati
Ultima modifica di palla000 : 31-03-2009 alle ore 19.11.18
ciao di nuovo ho trovato l'errore della pagina e ora funziona... solo che con la funzione che mi hai dato (stoner) non mi stampa niente però non dice che non ha trovato risultati perciò l'errore sta nel tuo miscuglio di informazioni...
p.s. scusate il doppio post ma così il topic non andrebbe tra quelli non letti
Se non stampi quello che imposti è normale che non funziona :D
Codice PHP:
<?php
include("config.php");
?>
<html>
<head>
<title>Cerca</title>
</head>
<body>
<form action="<?= $_SERVER['PHP_SELF']; ?>" method="get">
Cerca: <input type="text" name="s" /><br/>
<input type="submit" value="Cerca" />
</form>
<?php
if(isset($_GET['s'])) {
$search = mysql_query("SELECT * FROM w_articoli WHERE art_articolo LIKE '%".mysql_real_escape_string($_GET['s'])."%'");
$total = mysql_num_rows($search);
if($total == 0){
echo "Non è stato trovato nessun risultato";
}else {
$value = $_GET['s'];
$nvalue = "<strong>".$value."</strong>";
echo "Termine della ricerca: <b>".$value."</b><br /><br />";
$out = "";
while($r = mysql_fetch_array($search)) {
if(strpos($r['art_articolo'],$value)>50)
$cc = "... ". str_replace($value,$nvalue,substr(htmlentities($r['art_articolo']),strpos($r['art_articolo'],$value)-50,150));
else
$cc = str_replace($value,$nvalue,substr(htmlentities($r['art_articolo']),0,150));
$out.=$cc;
}
echo $out;
}
?>
</body>
</html>
giusto che idiota... grazie ora funziona perfettamente!!! grazie!!