Buongiorno ragazzi,
ho uno strano problema, qualora completi un modulo di ricerca, anche lasciando i campi vuoti ottengo sempre come risultato il primo record della tabella.
Come si spiega questo fatto?
Vi serve il codice?
Grazie
Buongiorno ragazzi,
ho uno strano problema, qualora completi un modulo di ricerca, anche lasciando i campi vuoti ottengo sempre come risultato il primo record della tabella.
Come si spiega questo fatto?
Vi serve il codice?
Grazie
L'alternativa sarebbe utilizzare la sfera di cristallo!Originariamente inviato da phpmydeath
Vi serve il codice?
"Mai discutere con un idiota. Ti trascina al suo livello e ti batte con l'esperienza." (Oscar Wilde)
Credevo fosse una cosa risaputaOriginariamente inviato da satifal
L'alternativa sarebbe utilizzare la sfera di cristallo!
Ho compreso solo l'echo del primo campo, se inserisco gli altri naturalmente li stampa.codice:<html> <head> <title> Search Engine - Search </title> </head> <body> <h2> Search Engine </h2> <form action= './search.php' method='get'> <input type='text' name='k' size ='50'value='<?php echo $_GET['k'];?>' /> <input type='submit' value='Search'> </form> <hr /> <?php $k = $_GET['k']; $terms = explode(" ",$k); $query = "SELECT * FROM Opera WHERE "; foreach ($terms as $each){ $query .= " TipoOpera LIKE '$each' OR Titolo LIKE '$each' OR TitoloOriginale LIKE '$each' OR TitoloInternazionale LIKE '$each' OR Tecnica LIKE '$each' OR Anno LIKE '$each' OR Collocazione LIKE '$each' OR AreaCompetenza LIKE '$each' OR Altezza LIKE '$each' OR Larghezza LIKE '$each' OR Profondita LIKE '$each' OR Durata LIKE '$each' OR GenereFilm LIKE '$each' OR AutoreFotografia LIKE '$each' OR AutoreScenografia LIKE '$each' OR FormaMusicale LIKE '$each' OR Tonalita LIKE '$each' OR IdentificativoOpera LIKE '$each' OR PrimaEsecuzione LIKE '$each' OR Organico LIKE '$each' OR InformazioniLibretto LIKE '$each' OR Incipit LIKE '$each' OR IncipitModerno LIKE '$each' OR DataCreazione LIKE '$each' OR DataUltimaModifica LIKE '$each' "; } //connect mysql_connect("localhost","root", "db09"); mysql_select_db("Tesi"); $query = mysql_query($query); $numrows = mysql_num_rows($query); if($numrows>0){ while($row=mysql_fetch_assoc($query)){ $TipoOpera= $row['TipoOpera']; $Titolo = $row['Titolo']; $TitoloOriginale= $row['TitoloOriginale']; $TitoloInternazionale = $row['TitoloInternazionale']; $Anno = $row['Anno']; $Tecnica = $row['Tecnica']; $Collocazione = $row['Collocazione']; $AreaCompetenza = $row['AreaCompetenza']; $Altezza = $row['Altezza']; $Larghezza = $row['Larghezza']; $Profondita = $row['Profondita ']; $Durata = $row['Durata']; $GenereFilm = $row['GenereFilm']; $AutoreFotografia = $row['AutoreFotografia']; $AutoreScenografia = $row['AutoreScenografia']; $FormaMusicale = $row['FormaMusicale']; $Tonalita = $row['Tonalita']; $IdentificativoOpera = $row['IdentificativoOpera']; $PrimaEsecuzione = $row['PrimaEsecuzione']; $Organico = $row['Organico']; $InformazioniLibretto = $row['InformazioniLibretto']; $Incipit = $row['Incipit']; $IncipitModerno = $row['IncipitModerno']; $DataCreazione = $row['DataCreazione']; $DataUltimaModifica = $row['DataUltimaModifica']; echo "tipo: $TipoOpera "; } } else echo "Nessun risultato per la chiave \" $k[/b]"; //disconnet mysql_close(); ?> </body> </html>
Grazie
Allora aggiorno il problema e mi scuso nell'essere stato troppo affrettato.
Quando la query è vuota ottengo tutti i risultati mentre se ricerco una parola mi rende il record corrispondente.
Reinserisco per intero il codice rivisionato ma non corretto:
codice:<html> <head> <title> Search Engine - Search </title> </head> <body> <h2> Search Engine </h2> <form action= './search.php' method='get'> <input type='text' name='k' size ='50'value='<?php echo $_GET['k'];?>' /> <input type='submit' value='Search'> </form> <hr /> <?php $k = $_GET['k']; $terms = explode(" ",$k); $query = "SELECT * FROM Opera WHERE "; foreach ($terms as $each){ //$i++; //if($i == 1) $query .= " TipoOpera LIKE '$each' OR Titolo LIKE '$each' OR TitoloOriginale LIKE '$each' OR TitoloInternazionale LIKE '$each' OR Tecnica LIKE '$each' OR Anno LIKE '$each' OR Collocazione LIKE '$each' OR AreaCompetenza LIKE '$each' OR Altezza LIKE '$each' OR Larghezza LIKE '$each' OR Profondita LIKE '$each' OR Durata LIKE '$each' OR GenereFilm LIKE '$each' OR AutoreFotografia LIKE '$each' OR AutoreScenografia LIKE '$each' OR FormaMusicale LIKE '$each' OR Tonalita LIKE '$each' OR IdentificativoOpera LIKE '$each' OR PrimaEsecuzione LIKE '$each' OR Organico LIKE '$each' OR InformazioniLibretto LIKE '$each' OR Incipit LIKE '$each' OR IncipitModerno LIKE '$each' OR DataCreazione LIKE '$each' OR DataUltimaModifica LIKE '$each' "; //else // echo $query .= "OR keywords LIKE '%$each%' OR title LIKE '%$each%' OR description LIKE '%$each%' OR link LIKE '%$each%'"; echo mysql_error(); } //connect mysql_connect("localhost","root", "db09"); mysql_select_db("Tesi"); $query = mysql_query($query); echo mysql_error(); $numrows = mysql_num_rows($query); echo mysql_error(); if($numrows>0){ while($row=mysql_fetch_assoc($query)){ $TipoOpera= $row['TipoOpera']; $Titolo = $row['Titolo']; $TitoloOriginale= $row['TitoloOriginale']; $TitoloInternazionale = $row['TitoloInternazionale']; $Anno = $row['Anno']; $Tecnica = $row['Tecnica']; $Collocazione = $row['Collocazione']; $AreaCompetenza = $row['AreaCompetenza']; $Altezza = $row['Altezza']; $Larghezza = $row['Larghezza']; $Profondita = $row['Profondita']; $Durata = $row['Durata']; $GenereFilm = $row['GenereFilm']; $AutoreFotografia = $row['AutoreFotografia']; $AutoreScenografia = $row['AutoreScenografia']; $FormaMusicale = $row['FormaMusicale']; $Tonalita = $row['Tonalita']; $IdentificativoOpera = $row['IdentificativoOpera']; $PrimaEsecuzione = $row['PrimaEsecuzione']; $Organico = $row['Organico']; $InformazioniLibretto = $row['InformazioniLibretto']; $Incipit = $row['Incipit']; $IncipitModerno = $row['IncipitModerno']; $DataCreazione = $row['DataCreazione']; $DataUltimaModifica = $row['DataUltimaModifica']; //stampiamo i nostri dati echo "tipo: $TipoOpera "; echo "titolo: $Titolo "; echo "titolo originale: $TitoloOriginale "; echo "titolo internazionale: $TitoloInternazionale "; echo "anno: $Anno "; echo "tecnica: $Tecnica "; echo "collocazione: $Collocazione "; echo "area di competenza: $AreaCompetenza "; echo "altezza: $Altezza "; echo "larghezza: $Larghezza "; echo "profondità: $Profondita "; echo "durata: $Durata "; echo "genere del film: $GenereFilm "; echo "autore della fotografia: $AutoreFotografia "; echo "autore della scenografia: $AutoreScenografia "; echo "forma musicale: $FormaMusicale "; echo "tonalità: $Tonalita "; echo "identificativo dell'opera: $IdentificativoOpera "; echo "prima esecuzione: $PrimaEsecuzione "; echo "organico: $Organico "; echo "fonte del libretto: $InformazioniLibretto "; echo "incipit musicale: $Incipit "; echo "incipit in trascrizione moderna: $IncipitModerno "; echo "data di creazione: $DataCreazione "; echo "ultima modidifica: $DataUltimaModifica "; } } else echo "Nessun risultato per la chiave \" $k[/b]"; echo mysql_error(); //disconnet mysql_close(); ?> </body> </html>
Prova a fare un echo della query prima di eseguirla e vedi se è corretta, magari provandola a mano.
"Mai discutere con un idiota. Ti trascina al suo livello e ti batte con l'esperienza." (Oscar Wilde)
Purtroppo non mi capacito.
Se lancio il seguente codice:
senza immettere alcun carattere in ricerca ottengo:codice:<html> <head> <title> Ricerca </title> </head> <body> <h2> Ricerca </h2> <body> <form action= './search.php' method='get'> <input type='text' name='k' size ='50'value='<?php echo $_GET['k'];?>' > <input type='submit' value='Search'> </form> <hr /> <?php $k = $_GET['k']; $terms = explode(" ", $k); $query = "SELECT * FROM Opera WHERE "; foreach ($terms as $each){ //$i++; //if($i == 1) $query .= "TipoOpera LIKE '$each' OR Titolo LIKE '$each' OR Tecnica LIKE '$each' OR Anno LIKE '$each' OR Collocazione LIKE '$each' OR AreaCompetenza LIKE '$each' OR Altezza LIKE '$each' OR Larghezza LIKE '$each' OR Profondita LIKE '$each' OR Durata LIKE '$each' OR TitoloOriginale LIKE '$each' OR TitoloInternazionale LIKE '$each' OR GenereFilm LIKE '$each' OR AutoreFotografia LIKE '$each' OR AutoreScenografia LIKE '$each' OR FormaMusicale LIKE '$each' OR Tonalita LIKE '$each' OR IdentificativoOpera LIKE '$each' OR PrimaEsecuzione LIKE '$each' OR Organico LIKE '$each' OR InformazioniLibretto LIKE '$each' OR Incipit LIKE '$each' OR IncipitModerno LIKE '$each' OR DataCreazione LIKE '$each' OR DataUltimaModifica LIKE '$each' "; echo $query; //else // echo $query .= "OR keywords LIKE '%$each%' OR title LIKE '%$each%' OR description LIKE '%$each%' OR link LIKE '%$each%'"; } //connect mysql_connect("localhost","root", "db09"); mysql_select_db("Tesi"); $query = mysql_query($query); $numrows = mysql_num_rows($query); if($numrows>0){ while($row=mysql_fetch_assoc($query)){ $TipoOpera= $row['TipoOpera']; $Titolo = $row['Titolo']; $Tecnica= $row['Tecnica']; //stampiamo i nostri dati echo "tipo: $TipoOpera "; echo "titolo: $Titolo "; echo "tecnica: $Tecnica "; } } else echo "Nessun risultato per la chiave: \"$k\""; echo mysql_error(); //disconnet mysql_close(); ?> </body> </html>
nella barra degli indirizzi in alto:e visualizzo (ho messo un echo nella query):codice:http://localhost/Tesi/pages/search.php?k=mentre se la ricerca la eseguo con questo file che punta su un altro data base:codice:SELECT * FROM Opera WHERE TipoOpera LIKE '' OR Titolo LIKE '' OR Tecnica LIKE '' OR Anno LIKE '' OR Collocazione LIKE '' OR AreaCompetenza LIKE '' OR Altezza LIKE '' OR Larghezza LIKE '' OR Profondita LIKE '' OR Durata LIKE '' OR TitoloOriginale LIKE '' OR TitoloInternazionale LIKE '' OR GenereFilm LIKE '' OR AutoreFotografia LIKE '' OR AutoreScenografia LIKE '' OR FormaMusicale LIKE '' OR Tonalita LIKE '' OR IdentificativoOpera LIKE '' OR PrimaEsecuzione LIKE '' OR Organico LIKE '' OR InformazioniLibretto LIKE '' OR Incipit LIKE '' OR IncipitModerno LIKE '' OR DataCreazione LIKE '' OR DataUltimaModifica LIKE '' tipo: C titolo: casa tecnica: pittura tipo: C titolo: la monaca tecnica: scultura tipo: M titolo: idea tecnica: bizarre tipo: C titolo: il libro tecnica: manoscritto
e non inserisco alcun campo lanciando lanciando la query senza immettere alcun carattere ottengo:codice:<html> <head> <title> Ricerca </title> </head> <body> <h2>Ricerca </h2> <form action= './search.php' method='get'> <input type='text' name='k' size ='50'value='<?php echo $_GET['k'];?>' > <input type='submit' value='Search'> </form> <hr /> <?php $k = $_GET['k']; $terms = explode(" ", $k); $query = "SELECT * FROM search WHERE "; foreach ($terms as $each){ //$i++; //if($i == 1) $query .= "keywords LIKE '$each' OR title LIKE '$each' OR description LIKE '$each' OR link LIKE '$each'"; echo $query; //else //echo $query .= "OR keywords LIKE '%$each%' OR title LIKE '%$each%' OR description LIKE '%$each%' OR link LIKE '%$each%'"; } //connect mysql_connect("localhost","root", "db09"); mysql_select_db("tutorials"); $query = mysql_query($query); $numrows = mysql_num_rows($query); if($numrows>0){ while($row=mysql_fetch_assoc($query)){ $id= $row['id']; $title = $row['title']; $description= $row['description']; $keywords = $row['keywords']; $link = $row['link']; echo "<h2>$title</h2> $description "; } } else echo "Nessun risultato per la chiave: \"$k\""; //disconnet mysql_close(); ?> </body> </html>
e visualizzo (ho messo un echo nella query):codice:http://localhost/prova/search.php?k=
Come mai questa discrepanza? Perché ottengo nel primo caso tutti i record caricati nella base di dati pur lanciando una ricerca a vuoto, senza alcun carattere mentre nel secondo caso avverte giustamente con un messaggio che la query non ha trovato alcun risultato?codice:SELECT * FROM search WHERE keywords LIKE '' OR title LIKE '' OR description LIKE '' OR link LIKE ''Nessun risultato per la chiave "
Grazie
Ragazzi ho risolto.
Il motivo era perché le variabili Incipit ed IncipitModerno nel database non potevano essere nulle mentre io avevo aggiunto delle istanze ove avevo lasciato i campi vuoti.
Ho provveduto a correggere il database mettendo i campi relativi di defaul nulli ed ora la query ottiene il risultato sperato.
Ma non me lo potevate dire prima?
Grazie ancora del supporto e dello spazio occupato.
Presto tornerò con nuovi turbamenti
Buona giornata