Manque result sur moteur de recherche php
Résolu
stefart
Messages postés
33
Date d'inscription
Statut
Membre
Dernière intervention
-
stefart Messages postés 33 Date d'inscription Statut Membre Dernière intervention -
stefart Messages postés 33 Date d'inscription Statut Membre Dernière intervention -
Bonjour a vous,
Voila j'ai fais un moteur de recherche en php qui prends ces infos dans la base mysql de plusieurs table
Il marche bien mis a part qu'il n'affiche pas tous les résultats et je ne comprend pas bien le pourquoi du comment !
au début je pensait que c'était un problème de mise en forme mais même en brut il manque régulièrement 1 ou 2 résultat selon les recherche que l'on fais :
Il y a 10 résultat(s) à votre recherche. et il en affiche que 9
Voici donc le code que j'utilise :
Merci de vos remarques qui m'aideront beaucoup car là moi je bloque gravement !!!...
Voila j'ai fais un moteur de recherche en php qui prends ces infos dans la base mysql de plusieurs table
Il marche bien mis a part qu'il n'affiche pas tous les résultats et je ne comprend pas bien le pourquoi du comment !
au début je pensait que c'était un problème de mise en forme mais même en brut il manque régulièrement 1 ou 2 résultat selon les recherche que l'on fais :
Il y a 10 résultat(s) à votre recherche. et il en affiche que 9
Voici donc le code que j'utilise :
<? // configuration de la base mysql $host = "--"; // votre host sql $user = "--"; // votre identifiant $pass = "--"; // votre password $bdd = "--"; // le nom de votre base de donné // choix des tables où rechercher $table = "table1" ; // le nom de votre table 1 $table2 = "table2"; // le nom de votre table 2 $table3 = "table3"; // le nom de votre table 3 $table4 = "table4"; // le nom de votre table 4 // test de connections si c'est ok $c = @mysql_connect($host,$user,$pass) or die("connection impossible"); @mysql_select_db("$bdd",$c) or die("selection impossible"); // recherche dans la table 1 $result1 = mysql_query( "SELECT * FROM ".$table." WHERE `nom_qe` LIKE '%$search%' OR `resum_qe` LIKE '%$search%' OR `num_qe` LIKE '%$search%' OR `tete_qe` LIKE '%$search%' OR `date_qe_fr` LIKE '%$search%' OR `que_qe` LIKE '%$search%' OR `rep_qe` LIKE '%$search%' "); $ret1 = mysql_fetch_array($result1); // nombre de lignes $nb_results1 = mysql_num_rows($result1); // recherche dans la table 2 $result2 = mysql_query( "SELECT * FROM ".$table2." WHERE theme_lois LIKE '%$search%' OR num_lois LIKE '%$search%' OR date_lois LIKE '%$search%' OR expose_lois LIKE '%$search%' OR proposition_lois LIKE '%$search%' "); $ret2 = mysql_fetch_array($result2); // nombre de lignes $nb_results2 = mysql_num_rows($result2); // recherche dans la table 3 $result3 = mysql_query( "SELECT * FROM ".$table3." WHERE `resum_interv` LIKE '%$search%' OR `date_interv` LIKE '%$search%' OR `titre_interv` LIKE '%$search%' OR `texte_interv` LIKE '%$search%' "); $ret3 = mysql_fetch_array($result3); // nombre de lignes $nb_results3 = mysql_num_rows($result3); // recherche dans la table 4 $result4 = mysql_query( "SELECT * FROM ".$table4." WHERE `resum_euro` LIKE '%$search%' OR `date_euro` LIKE '%$search%' OR `titre_euro` LIKE '%$search%' OR `texte_euro` LIKE '%$search%' "); $ret4 = mysql_fetch_array($result4); // nombre de lignes $nb_results4 = mysql_num_rows($result4); // date US en FR function convUF($frdate) { if ( strlen( $frdate ) > 10 ) $frdate = substr($frdate, 0, 10); $frdate = ereg_replace('/', '-', $frdate); if( ereg("^([0-9]{2}|[0-9]{4})-[0-9]{1,2}-[0-9]{1,2}", $frdate) ) $tab = explode( "-", $frdate ); else if( ereg("^[0-9]{1,2}/[0-9]{1,2}/([0-9]{2}|[0-9]{4})", $frdate) ) $tab = explode( "/", $frdate ); else return FALSE; return $tab[2]."/".$tab[1]."/".$tab[0]; } $madatefr = convUF(date_qe_fr); // Resultat total de la recherche sur les tables $total_result = $nb_results1 + $nb_results2 + $nb_results3 + $nb_results4 ; if ($total_result == 0 OR empty($search)) { if (empty($search)) { echo "Pas de recherche à effectuer.";} else { echo "Il y a <b>$total_result</b> résultat à votre recherche. Recommencez avec un autre mot que <b>$search</b>"; } } else { echo "Il y a <b>$total_result</b> résultat(s) à votre recherche.<br>"; // tableau affichage de résultats : // tableau 1 while($ret1 = mysql_fetch_array($result1)){ echo " $ret1[resum_qe] qe"; echo " $ret1[date_qe_fr] <br>"; // tableau 2 while($ret2 = mysql_fetch_array($result2)){ echo " $ret2[theme_lois] lois"; echo " $ret2[date_lois] <br>"; // tableau 3 while($ret3 = mysql_fetch_array($result3)){ echo "$ret3[resum_interv] inter"; echo " $ret3[date_interv] <br>"; // tableau 4 while($ret4 = mysql_fetch_array($result4)){ echo " $ret4[resum_euro] euro"; echo " $ret4[date_euro] <br>"; } } } } } ?>
Merci de vos remarques qui m'aideront beaucoup car là moi je bloque gravement !!!...
A voir également:
- Manque result sur moteur de recherche php
- Recherche automatique des chaînes ne fonctionne pas - Guide
- Google moteur de recherche page d'accueil - Guide
- Copernic moteur de recherche - Télécharger - Navigateurs
- Pourquoi mon moteur de recherche change tout seul ✓ - Forum Réseaux sociaux
- Manque cam module - Forum TNT / Satellite / Réception
4 réponses
Bonjour,
Il y a deux erreurs de construction dans ton script :
1. les appels de mysql_fetch_array apres les mysql_query (
2. les while de la fin sont imbriqués alors que, sauf fonctionnalités que je n'ai pas captées, ils devraient être en séquence (voir dans le code suivant les lignes commentées par
Il y a une erreur de méthodologie : ne pas respecter les indentations montrant les blocs logiques.
Voici le code auquel j'arrive :
Qu'est-ce-que ça donne ?
Il y a deux erreurs de construction dans ton script :
1. les appels de mysql_fetch_array apres les mysql_query (
$ret4 = mysql_fetch_array($result4);) doivent être supprimés car il lisent le premier résultat qui n'est jamais affiché
2. les while de la fin sont imbriqués alors que, sauf fonctionnalités que je n'ai pas captées, ils devraient être en séquence (voir dans le code suivant les lignes commentées par
// ajouté)
Il y a une erreur de méthodologie : ne pas respecter les indentations montrant les blocs logiques.
Voici le code auquel j'arrive :
<? // configuration de la base mysql $host = "--"; // votre host sql $user = "--"; // votre identifiant $pass = "--"; // votre password $bdd = "--"; // le nom de votre base de donné // choix des tables où rechercher $table = "table1" ; // le nom de votre table 1 $table2 = "table2"; // le nom de votre table 2 $table3 = "table3"; // le nom de votre table 3 $table4 = "table4"; // le nom de votre table 4 // test de connections si c'est ok $c = @mysql_connect($host,$user,$pass) or die("connection impossible"); @mysql_select_db("$bdd",$c) or die("selection impossible"); // recherche dans la table 1 $query = "SELECT *" . " FROM " . $table . " WHERE nom_qe LIKE '%" . $search . "%'" . " OR resum_qe LIKE '%" . $search . "%'" . " OR num_qe LIKE '%" . $search . "%' " . " OR tete_qe LIKE '%" . $search . "%'" . " OR date_qe_fr LIKE '%" . $search . "%'" . " OR que_qe LIKE '%" . $search . "%'" . " OR rep_qe LIKE '%" . $search . "%'"; echo '<br>...' . $query; $result1 = mysql_query( $query ) or die( "erreur : " . $mysql_error() ); // $ret1 = mysql_fetch_array($result1); // nombre de lignes $nb_results1 = mysql_num_rows($result1); // recherche dans la table 2 $result2 = mysql_query( "SELECT * FROM ".$table2." WHERE theme_lois LIKE '%$search%' OR num_lois LIKE '%$search%' OR date_lois LIKE '%$search%' OR expose_lois LIKE '%$search%' OR proposition_lois LIKE '%$search%' "); // $ret2 = mysql_fetch_array($result2); // nombre de lignes $nb_results2 = mysql_num_rows($result2); // recherche dans la table 3 $result3 = mysql_query( "SELECT * FROM ".$table3." WHERE `resum_interv` LIKE '%$search%' OR `date_interv` LIKE '%$search%' OR `titre_interv` LIKE '%$search%' OR `texte_interv` LIKE '%$search%' "); // $ret3 = mysql_fetch_array($result3); // nombre de lignes $nb_results3 = mysql_num_rows($result3); // recherche dans la table 4 $result4 = mysql_query( "SELECT * FROM ".$table4." WHERE `resum_euro` LIKE '%$search%' OR `date_euro` LIKE '%$search%' OR `titre_euro` LIKE '%$search%' OR `texte_euro` LIKE '%$search%' "); // $ret4 = mysql_fetch_array($result4); // nombre de lignes $nb_results4 = mysql_num_rows($result4); // date US en FR function convUF($frdate) { if( strlen( $frdate ) > 10 ) $frdate = substr($frdate, 0, 10); $frdate = ereg_replace('/', '-', $frdate); if( ereg("^([0-9]{2}|[0-9]{4})-[0-9]{1,2}-[0-9]{1,2}", $frdate) ) $tab = explode( "-", $frdate ); else { if( ereg("^[0-9]{1,2}/[0-9]{1,2}/([0-9]{2}|[0-9]{4})", $frdate) ) $tab = explode( "/", $frdate ); else return FALSE; } return $tab[2]."/".$tab[1]."/".$tab[0]; } $madatefr = convUF( date_qe_fr ); // Resultat total de la recherche sur les tables $total_result = $nb_results1 + $nb_results2 + $nb_results3 + $nb_results4 ; if( $total_result == 0 OR empty( $search ) ) { if( empty( $search ) ) echo "Pas de recherche à effectuer."; else echo "Il y a <b>0</b> résultat à votre recherche. Recommencez avec un autre mot que <b>$search</b>"; } else { // ajouté echo "Il y a <b>$total_result</b> résultat(s) à votre recherche.<br>"; // tableau affichage de résultats : // tableau 1 while( $ret1 = mysql_fetch_array($result1) ) { echo " $ret1[resum_qe] qe"; echo " $ret1[date_qe_fr] <br>"; } // ajouté // tableau 2 while($ret2 = mysql_fetch_array($result2)) { echo " $ret2[theme_lois] lois"; echo " $ret2[date_lois] <br>"; } // ajouté // tableau 3 while($ret3 = mysql_fetch_array($result3)) { echo "$ret3[resum_interv] inter"; echo " $ret3[date_interv] <br>"; } // ajouté // tableau 4 while($ret4 = mysql_fetch_array($result4)) { echo " $ret4[resum_euro] euro"; echo " $ret4[date_euro] <br>"; } // ajouté } ?>
Qu'est-ce-que ça donne ?
Salut,
C'est normal qu'il en manque un
// recherche dans la table 1
$result1 = mysql_query(
"SELECT *
FROM ".$table."
WHERE `nom_qe` LIKE '%$search%'
OR `resum_qe` LIKE '%$search%'
OR `num_qe` LIKE '%$search%'
OR `tete_qe` LIKE '%$search%'
OR `date_qe_fr` LIKE '%$search%'
OR `que_qe` LIKE '%$search%'
OR `rep_qe` LIKE '%$search%'
");
$ret1 = mysql_fetch_array($result1);
// nombre de lignes
$nb_results1 = mysql_num_rows($result1);
quand tu fais $ret1 = mysql_fetch_array($result1); ça déplace le pointeur qui vient lire dans la zone mémoir de stocquage des résultats de la requette mysql
alors quand tu fais la boucle while après ça démare une ligne après
Pour faire mysql_num_rows($result1); tu n'as pas à faire mysql_fetch_array($result1); avant (surtout pas !)
fais tout simplement:
C'est normal qu'il en manque un
// recherche dans la table 1
$result1 = mysql_query(
"SELECT *
FROM ".$table."
WHERE `nom_qe` LIKE '%$search%'
OR `resum_qe` LIKE '%$search%'
OR `num_qe` LIKE '%$search%'
OR `tete_qe` LIKE '%$search%'
OR `date_qe_fr` LIKE '%$search%'
OR `que_qe` LIKE '%$search%'
OR `rep_qe` LIKE '%$search%'
");
$ret1 = mysql_fetch_array($result1);
// nombre de lignes
$nb_results1 = mysql_num_rows($result1);
<?php //toujours mettre les tags PHP longs //mettre ta fonction au debut ça ne change rien au fonctionnement mais ça clarifie ton code // configuration de la base mysql $host = "--"; // votre host sql $user = "--"; // votre identifiant $pass = "--"; // votre password $bdd = "--"; // le nom de votre base de donné // choix des tables où rechercher $table = "table1" ; // le nom de votre table 1 $table2 = "table2"; // le nom de votre table 2 $table3 = "table3"; // le nom de votre table 3 $table4 = "table4"; // le nom de votre table 4 // test de connections si c'est ok $c = @mysql_connect($host,$user,$pass) or die("connection impossible"); @mysql_select_db("$bdd",$c) or die("selection impossible"); // recherche dans la table 1 $result1 = mysql_query( "SELECT * FROM ".$table." WHERE `nom_qe` LIKE '%$search%' OR `resum_qe` LIKE '%$search%' OR `num_qe` LIKE '%$search%' OR `tete_qe` LIKE '%$search%' OR `date_qe_fr` LIKE '%$search%'OR `que_qe` LIKE '%$search%' OR `rep_qe` LIKE '%$search%'"); // nombre de lignes $nb_results1 = mysql_num_rows($result1); // recherche dans la table 2 $result2 = mysql_query( "SELECT * FROM ".$table2." WHERE theme_lois LIKE '%$search%' OR num_lois LIKE '%$search%' OR date_lois LIKE '%$search%' OR expose_lois LIKE '%$search%' OR proposition_lois LIKE '%$search%' "); // nombre de lignes $nb_results2 = mysql_num_rows($result2); // recherche dans la table 3 $result3 = mysql_query( "SELECT * FROM ".$table3." WHERE `resum_interv` LIKE '%$search%' OR `date_interv` LIKE '%$search%' OR `titre_interv` LIKE '%$search%' OR `texte_interv` LIKE '%$search%' "); // nombre de lignes $nb_results3 = mysql_num_rows($result3); // recherche dans la table 4 $result4 = mysql_query( "SELECT * FROM ".$table4." WHERE `resum_euro` LIKE '%$search%' OR `date_euro` LIKE '%$search%' OR `titre_euro` LIKE '%$search%' OR `texte_euro` LIKE '%$search%' "); // nombre de lignes $nb_results4 = mysql_num_rows($result4); $madatefr = convUF(date_qe_fr); // Resultat total de la recherche sur les tables $total_result = $nb_results1 + $nb_results2 + $nb_results3 + $nb_results4 ; if ($total_result == 0 OR empty($search)) { if (empty($search)) { echo "Pas de recherche à effectuer.";} else { echo "Il y a <b>$total_result</b> résultat à votre recherche. Recommencez avec un autre mot que <b>$search</b>"; } } else { echo "Il y a <b>$total_result</b> résultat(s) à votre recherche.<br>"; // tableau affichage de résultats : //il ne faut pas imbriquer les boucles while // tableau 1 while($ret1 = mysql_fetch_array($result1)){ echo " $ret1[resum_qe] qe"; echo " $ret1[date_qe_fr] <br>"; } // tableau 2 while($ret2 = mysql_fetch_array($result2)){ echo " $ret2[theme_lois] lois"; echo " $ret2[date_lois] <br>"; } // tableau 3 while($ret3 = mysql_fetch_array($result3)){ echo "$ret3[resum_interv] inter"; echo " $ret3[date_interv] <br>"; } // tableau 4 while($ret4 = mysql_fetch_array($result4)){ echo " $ret4[resum_euro] euro"; echo " $ret4[date_euro] <br>"; } ?>
quand tu fais $ret1 = mysql_fetch_array($result1); ça déplace le pointeur qui vient lire dans la zone mémoir de stocquage des résultats de la requette mysql
alors quand tu fais la boucle while après ça démare une ligne après
Pour faire mysql_num_rows($result1); tu n'as pas à faire mysql_fetch_array($result1); avant (surtout pas !)
fais tout simplement:
MERCI Croy,
bon et bien j'ai juste ajouté tes modifs a la recherche table 1 et a l'affichage de résultats
ça marche super
Mais j'ai l'impression que les résultats sont plus lonq a venir !?
c'est pt'etres parce que je devais faire la modif sur la recherche table 2, 3 et 4 ?
bon et bien j'ai juste ajouté tes modifs a la recherche table 1 et a l'affichage de résultats
ça marche super
Mais j'ai l'impression que les résultats sont plus lonq a venir !?
c'est pt'etres parce que je devais faire la modif sur la recherche table 2, 3 et 4 ?
Merci de ton aide je test de suite
dois-je faire les modifs de recherche table 1
sur les autres table 2, 3 et 4 ?