Regole del forum
1) Citare in modo preciso il linguaggio di programmazione usato.
2) Se possibile portare un esempio del risultato atteso.
3) Leggere attentamente le risposte ricevute.
4) Scrivere i messaggi con il colore di default, evitare altri colori.
5) Scrivere in Italiano o in Inglese, se possibile grammaticalmente corretto, evitate stili di scrittura poco chiari, quindi nessuna abbreviazione tipo telegramma o scrittura stile SMS o CHAT.
6) Appena registrati è consigliato presentarsi nel forum dedicato.
La non osservanza delle regole porta a provvedimenti di vari tipo da parte dello staff, in particolare la non osservanza della regola 5 porta alla cancellazione del post e alla segnalazione dell'utente. In caso di recidività l'utente rischia il ban temporaneo.
<?php
include("config.inc.php");
$db = mysql_connect($db_host, $db_user, $db_password);
if ($db == FALSE)
die ("Errore nella connessione. Verificare i parametri nel file config.inc.php");
mysql_select_db($db_name, $db)
or die ("Errore nella selezione del database. Verificare i parametri nel file config.inc.php");
$keys = explode (",", $chiave);
$query = "";
reset ($keys);
while (list(,$parola) = each ($keys))
{ $parola = trim($parola);
if ($parola != "")
$query .= "titolo LIKE '%$parola%' OR testo LIKE '%$parola%' OR autore LIKE '%$parola%' OR ";
}
$query .= "0";
$query = "SELECT id, titolo, data FROM news WHERE " . $query;
$result = mysql_query($query, $db);
while ($row = mysql_fetch_array($result))
{ echo "<a href="view.php?id=$row[id]">" . date("j/n/y", $row[data]) . " - $row[titolo]</a><br>"; }
?>
Ho fatto quanto detto, ma non funzia, non appare neanche l' ultima istruzione "echo "vvvsvsv";" (che ho messo apposta). Possibile che ci sia un' erroredi sintassi? Nella pagina "search.php" cambia qualcosa se scrivo "post" o "POST"?
<?php
include("config.inc.php");
$db = mysql_connect($db_host, $db_user, $db_password);
if ($db == FALSE)
die ("Errore nella connessione. Verificare i parametri nel file config.inc.php");
mysql_select_db($db_name, $db)
or die ("Errore nella selezione del database. Verificare i parametri nel file config.inc.php");
$keys = explode (",", $_POST["chiave"]);
$query = "";
reset ($keys);
while (list(,$parola) = each ($keys))
{ $parola = trim($parola);
if ($parola != "")
$query .= "titolo LIKE '%$parola%' OR testo LIKE '%$parola%' OR autore LIKE '%$parola%' OR ";
}
$query .= "0";
$query = "SELECT id, titolo, data FROM news WHERE " . $query;
$result = mysql_query($query, $db);
while ($row = mysql_fetch_array($result))
{ echo "<a href="view.php?id=$row[id]">" . date("j/n/y", $row[data]) . " - $row[titolo]</a><br>"; }
echo "vvvsvsv";
?>
Grazie a tutti per il vostro aiuto. Avrei ancora un paio di domande...
Se io immetto come parola chiave "ciao" viene fuori un risultato, se io immetto "luca" viene fuori un risultato ma se io immetto "ciao luca" (naturalmente senza virgolette in nessun caso) viene fuori niente. E' normale? Come posso fare per far in modo che venga fuori i risultati delle due parole chiave? Cioè che la variabile "$_POST["chiave"]" venga scomposta e considerata per tutte le parole che la compongono e non una sola?
Mi vorresti dire che quello che io chiedo lo fà già? Lo sò, ma nella parola chiave devo separare separare ogni parola con la virgola e io vorrei evitare questo.
ragnetto ha scritto:Mi vorresti dire che quello che io chiedo lo fà già? Lo sò, ma nella parola chiave devo separare separare ogni parola con la virgola e io vorrei evitare questo.
Ti vorrei dire che con le espressioni regolari (guarda anche http://it.php.net/manual/en/ref.pcre.php) dividi la stringa che ti viene passata in più stringhe. Il separatore lo scegli tu.
Per esempio
Ho capito ma non riesco a capire ancora come posso applicare questa cosa al motore di ricerca per fare in modo che non debba inserire la virgola tra una parola e l' altra. Se il ciclo "while" crea una query per ogni parola contenuta nell' arrey "$keys" (se dico bene) perchè quando scrivo "ciao luca" mi ritrovo la pagina bianca e quando scrivo "ciao, luca" mi ritrovo due risultati? Ho anche notato che:
io se fossi in te prima di dare in pasto la query a mysql, farei un echo $query, in modo che controlli bene cosa viene passato al database.
Per il resto explode o qualcosa di più complesso con le espressioni regolari (così da prevere casi con virgola e/o con spazio), ti da un insieme di stringhe. Dopo sta a te gestirle.
Come l'avevi prima prevedeva la virgola come separatore, è logico che senza lui prendeva una stringa intera composta da due parole, ecco perché non trovava niente.
Io per esempio solitamente lascio anche un campo AND o OR da far scegliere all'utente.
Nel tuo script, a parte che lo capisco poco per come è formattato, vedo un query .= 0 che mi sembra serva per terminare un OR finale. Io non farei così, ma fare in modo che non ci sia un OR finale. Ma queste sono pignolerie.
Controlla la stringa passata e la query
<?php
include("config.inc.php");
$db = mysql_connect($db_host, $db_user, $db_password);
if ($db == FALSE)
die ("Errore nella connessione. Verificare i parametri nel file config.inc.php");
mysql_select_db($db_name, $db)
or die ("Errore nella selezione del database. Verificare i parametri nel file config.inc.php");
$keys = explode (",", $_POST["chiave"]);
echo $keys;
$query = "";
reset ($keys);
while (list(,$parola) = each ($keys))
{ $parola = eregi_replace("[^a-z0-9]",",",$_POST["chiave"]));
if ($parola != "")
$query .= "titolo LIKE '%$parola%' OR testo LIKE '%$parola%' OR autore LIKE '%$parola%' OR ";
}
$query .= "0";
$query = "SELECT id, titolo, data FROM news WHERE " . $query;
$result = mysql_query($query, $db);
while ($row = mysql_fetch_array($result))
{ echo '<a href="view.php?id=$row[id]">' . date("j/n/y", $row[data]) . " - $row[titolo]</a><br>"; }
echo "bbs";
?>
Lavorando la stringa (come dice aschenaz) mi ritrovo una pagina bianca. Invece sostituendo REGEXP a LIKE (nella versione originale funzionante dello script) ottengo una scritta "Array".
<?php
include("config.inc.php");
$db = mysql_connect($db_host, $db_user, $db_password);
if ($db == FALSE)
die ("Errore nella connessione. Verificare i parametri nel file config.inc.php");
mysql_select_db($db_name, $db)
or die ("Errore nella selezione del database. Verificare i parametri nel file config.inc.php");
$chiavemodificata=eregi_replace("[^a-z0-0]",",",$_POST["chiave"]);
$keys = explode (",", $chiavemodificata);
echo $keys;
$query = "";
reset ($keys);
while (list(,$parola) = each ($keys)) {
if ($parola != "")
$query .= "titolo LIKE '%$parola%' OR testo LIKE '%$parola%' OR autore LIKE '%$parola%' OR ";
}
$query .= "0";
$query = "SELECT id, titolo, data FROM news WHERE " . $query;
$result = mysql_query($query, $db);
while ($row = mysql_fetch_array($result))
{ echo '<a href="view.php?id=$row[id]">' . date("j/n/y", $row[data]) . " - $row[titolo]</a><br>"; }
echo "bbs";
?>