Manque result sur moteur de recherche php
Résolu/Fermé
stefart
Messages postés
33
Date d'inscription
jeudi 28 février 2008
Statut
Membre
Dernière intervention
10 juin 2008
-
14 avril 2008 à 10:24
stefart Messages postés 33 Date d'inscription jeudi 28 février 2008 Statut Membre Dernière intervention 10 juin 2008 - 14 avril 2008 à 15:28
stefart Messages postés 33 Date d'inscription jeudi 28 février 2008 Statut Membre Dernière intervention 10 juin 2008 - 14 avril 2008 à 15:28
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
- Easy php - Télécharger - Divers Web & Internet
- Installer qwant moteur de recherche - Télécharger - Navigateurs
- Moteur de recherche sans censure - Accueil - Services en ligne
4 réponses
croy
Messages postés
453
Date d'inscription
samedi 19 janvier 2008
Statut
Membre
Dernière intervention
23 octobre 2012
114
14 avril 2008 à 11:12
14 avril 2008 à 11:12
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 ?
Alain_42
Messages postés
5361
Date d'inscription
dimanche 3 février 2008
Statut
Membre
Dernière intervention
13 février 2017
894
14 avril 2008 à 14:39
14 avril 2008 à 14:39
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:
stefart
Messages postés
33
Date d'inscription
jeudi 28 février 2008
Statut
Membre
Dernière intervention
10 juin 2008
14 avril 2008 à 15:28
14 avril 2008 à 15:28
merci aussi a toi Alain_42
tes remarques étaient aussi très juste
tes remarques étaient aussi très juste
stefart
Messages postés
33
Date d'inscription
jeudi 28 février 2008
Statut
Membre
Dernière intervention
10 juin 2008
14 avril 2008 à 14:42
14 avril 2008 à 14:42
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 ?
croy
Messages postés
453
Date d'inscription
samedi 19 janvier 2008
Statut
Membre
Dernière intervention
23 octobre 2012
114
14 avril 2008 à 14:55
14 avril 2008 à 14:55
AU contraire, ca devrait être un peu plus rapide.
A mettre en observation car peut dépendre de la charge globale du serveur.
A mettre en observation car peut dépendre de la charge globale du serveur.
stefart
Messages postés
33
Date d'inscription
jeudi 28 février 2008
Statut
Membre
Dernière intervention
10 juin 2008
14 avril 2008 à 15:23
14 avril 2008 à 15:23
finalement j'ai fais le test avec plusieurs requêtes différentes et ça marche super bien !
merci a toi Croy
merci a toi Croy
14 avril 2008 à 14:22
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 ?