-
Motore di ricerca
Sto facendo un motore di ricerca per il mio sito. Fino a quando controllo i file txt tutto bene, quando invece controllo il database il risultato è una serie di risposte errate.... Potete darci un occhio?
Codice PHP:
function controlla_stringa($file,$stringa) {
$stringhe=explode(" ",$file);
$count = count($stringhe);
for ($fg=0;$fg<=$count;$fg++) {
if (strtolower ($stringhe[$fg]) == strtolower ($stringa)) {
return true;
}
}
return false;
}
.............
$sql = "select * from domande";
if (!$DB = mysql_connect($url_,$utente_,$password_)) {
die("<table><tr><td><p class='style2'>Attenzione Si è verificato un errore. (20)" . mysql_error() . "</p></td><td><img src='icone/allert.jpg' width='60' height='58' /></td></tr></table>");
}
if (!mysql_select_db($nomedb_,$DB)) {
die("<table><tr><td><p class='style2'>Attenzione Si è verificato un errore. (21)" . mysql_error() . "</p></td><td><img src='icone/allert.jpg' width='60' height='58' /></td></tr></table>");
}
if (!$result = mysql_query($sql, $DB)) {
die("<table><tr><td><p class='style2'>Attenzione Si è verificato un errore. (22)" . mysql_error() . "</p></td><td><img src='icone/allert.jpg' width='60' height='58' /></td></tr></table>");
}
$num_righe = mysql_num_rows($result);
if ($num_righe > 0) { // 16
while ($row = mysql_fetch_array($result)) { //17
$file = "";
$file = trim($row[domanda] . " " . $row[risposta] . " " . $row[_link]);
$array_parole = explode(" ",$_POST[parole]);
$count2 = count($array_parole);
if ($_POST[idselezione] == "tutte") { //13
$cont = "";
for($f=0;$f <= ($count2-1);$f++) { // arrayparole 4
$toSrc = trim($array_parole[$f]); // parola da cercare
$pstringa = Controlla_stringa($file, $toSrc);
if ($pstringa == false): //5
// non trovato.. parole sullo stesso file
else:
// trovato
$cont = $cont + 1;
endif; //5
if ($cont == $count2) {
print "<tr><td><a href='motore.php?q=" . $row[id] . "'>Parole trovate nel Database id : " . $row[id] . "</a></td></tr>";
}
} //4
} //3
..................
Ad esempio se gli dico di trovarmi la scritta francesco ( ID = 2 ) mi controlla solo il primo record e me lo dà come risultato ( ID = 1 )
Grazie.
-
Codice PHP:
if (!$DB = mysql_connect($url_,$utente_,$password_)
non capisco questo riga
non dovrebbe essere:
Codice PHP:
if ($DB != mysql_connect($url_,$utente_,$password_)
-
Citazione:
Originalmente inviato da
worldpixel
Codice PHP:
if (!$DB = mysql_connect($url_,$utente_,$password_)
non capisco questo riga
non dovrebbe essere:
Codice PHP:
if ($DB != mysql_connect($url_,$utente_,$password_)
E' la stessa cosa, ! è un operatore di negazione.
@service2000:
La parte che non mi convince è questa:
Codice PHP:
if (!$DB = mysql_connect($url_,$utente_,$password_)) {
die("<table><tr><td><p class='style2'>Attenzione Si è verificato un errore. (20)" . mysql_error() . "</p></td><td><img src='icone/allert.jpg' width='60' height='58' /></td></tr></table>");
}
if (!mysql_select_db($nomedb_,$DB)) {
die("<table><tr><td><p class='style2'>Attenzione Si è verificato un errore. (21)" . mysql_error() . "</p></td><td><img src='icone/allert.jpg' width='60' height='58' /></td></tr></table>");
}
if (!$result = mysql_query($sql, $DB)) {
die("<table><tr><td><p class='style2'>Attenzione Si è verificato un errore. (22)" . mysql_error() . "</p></td><td><img src='icone/allert.jpg' width='60' height='58' /></td></tr></table>");
}
Le variabili $url_, $utente_, $password_, $nomedb_ non sono definite da nessuna parte, all'interno della funzione. Suppongo che le hai definite fuori dalla funzione e per risolvere dovresti modificare solo l'inizio della funzione:
Codice PHP:
function controlla_stringa($file,$stringa) {
global $url_, $utente_, $password_, $nomedb_;
// resto del codice
-
chiedo scusa, non lo sapevo.
comuqnue non credo sia quello l'errore, anche perché la connessione al database non avviene dentro una funzione, e probabilmente le variabili le ha dichiarate, anche perché se no gli darebbe un qualche errore.
poi mi sembra che ci siano alcune righe che non servono, provo a riscriverti il codice:
Codice PHP:
$sql = "select * from domande";
if (!$DB = mysql_connect($url_,$utente_,$password_)) {
die("<table><tr><td><p class='style2'>Attenzione Si è verificato un errore. (20)" . mysql_error() . "</p></td><td><img src='icone/allert.jpg' width='60' height='58' /></td></tr></table>");
}
if (!mysql_select_db($nomedb_,$DB)) {
die("<table><tr><td><p class='style2'>Attenzione Si è verificato un errore. (21)" . mysql_error() . "</p></td><td><img src='icone/allert.jpg' width='60' height='58' /></td></tr></table>");
}
if (!$result = mysql_query($sql, $DB)) {
die("<table><tr><td><p class='style2'>Attenzione Si è verificato un errore. (22)" . mysql_error() . "</p></td><td><img src='icone/allert.jpg' width='60' height='58' /></td></tr></table>");
}
$num_righe = mysql_num_rows($result);
if ($num_righe > 0) { // 16
while ($row = mysql_fetch_array($result)) { //17
$file = trim($row['domanda'] . " " . $row['risposta'] . " " . $row['_link']);
$array_parole = explode(" ",$_POST[parole]);
$count2 = count($array_parole);
if ($_POST[idselezione] == "tutte") { //13
for($f=0;$f <= ($count2-1);$f++) { // arrayparole 4
$toSrc = trim($array_parole[$f]); // parola da cercare
$pstringa = Controlla_stringa($file, $toSrc);
if ($pstringa == false): //5
// non trovato.. parole sullo stesso file
else:
// trovato
print "<tr><td><a href='motore.php?q=" . $row[id] . "'>Parole trovate nel Database id : " . $row[id] . "</a></td></tr>";
endif; //5
} //4
} //3
l'errore penso fosse che tu mettevi se cont == count2, ma questo avviene una volta sola, cioé l'ultima e quindi ti stampa solo un risultato
-
Si hai ragione, io pensavo che tutto il codice si trovasse nella funzione controlla_stringa.
-
Io sono sull'orlo dell'assurdo, comunque ringrazio tutti e vi mostro il codice che funziona ( o provato più volte inserendo dati diversi )
Codice PHP:
if ($_POST[idselezione] == "tutte") { //13
$cont = "";
for($f=0;$f <= ($count2-1);$f++) { // arrayparole 4
$toSrc = trim($array_parole[$f]); // parola da cercare
$pstringa = Controlla_stringa($file, $toSrc);
if ($pstringa == false): //5
// non trovato.. parole sullo stesso file
else:
// trovato
$cont = $cont + 1;
endif; //5
if ($cont == $count2) {
$p = $p + 1;
if ($p < 2 ) {
print "<tr><td><a href='motore.php?q=" . ($row[id] + 1) . "'>Parole trovate nel Database id : " . ($row[id] + 1) . "</a></td></tr>";
$p = 0;
}
}
} //4
} //13
EDIT
L'unica cosa è che mi funziona se inserisco una frase e non la ricerca di tutte le parole per quello ci vorra un altro codice.......
EDIT 2
Il codice per le parole era quello da voi postato con un piccolo cambiamento :
Codice PHP:
if ($_POST[idselezione] == "tutte") { //13
for($f=0;$f <= ($count2-1);$f++) { // arrayparole 4
$toSrc = trim($array_parole[$f]); // parola da cercare
$pstringa = Controlla_stringa($file, $toSrc);
if ($pstringa == false): //5
// non trovato.. parole sullo stesso file
else:
// trovato
print "<tr><td><a href='motore.php?q=" . ($row[id]+1) . "'>Parole trovate nel Database id : " . ($row[id]+1) . "</a></td></tr>";
endif; //5
} //4
} //13
Una aggiunta di uno ad ID.
GRAZIE.
EDIT 3
Come non detto avevate ragione voi perchè il primo record di una tabella ha id = 0 e quindi non si deve aggiungere + 1.