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
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 :

<?
// 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:

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
Bonjour,

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 ?
0
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:22
bonjour Croy,

Merci de ton aide je test de suite

dois-je faire les modifs de recherche 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);



sur les autres table 2, 3 et 4 ?
0
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
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);


<?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:
0
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
merci aussi a toi Alain_42
tes remarques étaient aussi très juste
0
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
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 ?

0
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
AU contraire, ca devrait être un peu plus rapide.

A mettre en observation car peut dépendre de la charge globale du serveur.
0
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
finalement j'ai fais le test avec plusieurs requêtes différentes et ça marche super bien !
merci a toi Croy
0