Manque result sur moteur de recherche php [Résolu/Fermé]

Signaler
Messages postés
33
Date d'inscription
jeudi 28 février 2008
Statut
Membre
Dernière intervention
10 juin 2008
-
stefart
Messages postés
33
Date d'inscription
jeudi 28 février 2008
Statut
Membre
Dernière intervention
10 juin 2008
-
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 !!!...

4 réponses

Messages postés
453
Date d'inscription
samedi 19 janvier 2008
Statut
Membre
Dernière intervention
23 octobre 2012
108
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 ?
stefart
Messages postés
33
Date d'inscription
jeudi 28 février 2008
Statut
Membre
Dernière intervention
10 juin 2008

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 ?
Messages postés
5374
Date d'inscription
dimanche 3 février 2008
Statut
Membre
Dernière intervention
13 février 2017
869
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:
stefart
Messages postés
33
Date d'inscription
jeudi 28 février 2008
Statut
Membre
Dernière intervention
10 juin 2008

merci aussi a toi Alain_42
tes remarques étaient aussi très juste
Messages postés
33
Date d'inscription
jeudi 28 février 2008
Statut
Membre
Dernière intervention
10 juin 2008

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 ?

Messages postés
453
Date d'inscription
samedi 19 janvier 2008
Statut
Membre
Dernière intervention
23 octobre 2012
108
AU contraire, ca devrait être un peu plus rapide.

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

finalement j'ai fais le test avec plusieurs requêtes différentes et ça marche super bien !
merci a toi Croy