Moteur de recherche interne / si aucun résultats -> messa

Eléphanteau du PHP | 18 Messages

11 avr. 2005, 14:06

Bonjour,

Je débute tout juste en php. J'ai créé un moteur de recherche interne php sur un site. Il fonctionne bien, cependant je souhaiterai afficher un message lorsqu'une recherche ne donne aucun résultat.

J'ai pigé le principe mais je peine à l'appliquer. Il me faut créer une variable associée à while, et si elle est égale à 0, le message doit apparaître, non ?

Merci de votre aide. Si vous pouviez me fournir un exemple de code modifié ce serait l'idéal (j'ai pas l'habitude de demander à ce qu'on fasse du code à ma place mais là, je bute depuis trop longtemps à mon goût !).
div class="frame-d"><?php
// est-ce qu'il y a une recherche...
if($_GET['page']=='recherche'&&isset($_GET['recherche'])&&$_GET['recherche'])
{
	//on gere la recherche
	// requete qui utilise l'indexe FULLTEXT
?>
      <p class="titre" id="titre-h">Résultat(s) :</p>
<?php
	$query="select * from bn_page where match(titre,titre_entete,gauche,droite,mots_cles) against ('".mysql_real_escape_string($_GET['recherche'])."*' in boolean mode)";

	$results=mysql_query($query,$mysql_link);

// on recupere les enregistrements
	while($respage=mysql_fetch_assoc($results))
	{

// on affiche les resultats
?><ul style="margin-left:15px;  padding-left:15px;">
<li style="margin-bottom:-30px;" class="Style1"><a href="?page=<? echo $respage['id']; ?>"><? echo $respage['titre']; ?></li></ul><br>
<?php
	}
	// on fait le menage...
	mysql_free_result($results);

}
// sinon on affiche le cadre de droite
else echo $page["droite"];
	?></div>

Mammouth du PHP | 859 Messages

11 avr. 2005, 14:22

Essaye comme ceci :
<div class="frame-d"><?php
// est-ce qu'il y a une recherche...
if($_GET['page']=='recherche'&&isset($_GET['recherche'])&&$_GET['recherche'])
	{
		//on gere la recherche
		// requete qui utilise l'indexe FULLTEXT
	?>
	      <p class="titre" id="titre-h">Résultat(s) :</p>
	<?php
		$query="select * from bn_page where match(titre,titre_entete,gauche,droite,mots_cles) against ('".mysql_real_escape_string($_GET['recherche'])."*' in boolean mode)";
	
		$results=mysql_query($query,$mysql_link);
	    
		//--------------------------------------------------------------
		// PARTIE RAJOUTEE
		//--------------------------------------------------------------
		if(mysql_num_rows($results) == 0)
		    {
				echo "La recherche a donné 0 résultat";
		    }
	    else
	        {
				// on recupere les enregistrements
				while($respage=mysql_fetch_assoc($results))
				{
					// on affiche les resultats
					?><ul style="margin-left:15px;  padding-left:15px;">
					<li style="margin-bottom:-30px;" class="Style1"><a href="?page=<? echo $respage['id']; ?>"><? echo $respage['titre']; ?></li></ul><br>
					<?php
				}
				// on fait le menage...
				mysql_free_result($results);
			}
	}
// sinon on affiche le cadre de droite
else
	{
		echo $page["droite"];
	}
?></div>
Je ne qualifierai pas ton code de moteur de recherche à proprement parlé car que fait-il quand il y a plusieurs mots à chercher? A-t-on la possibilité de trouver n'importe quel mot? tous les mots?

Cest un bon début mais tu vas devoir étoffer ton code ;)

Eléphanteau du PHP | 18 Messages

11 avr. 2005, 14:36

Tout d'abord, merci pour ton aide.

Ben à l'origine on m'avait conseillé l'Api de Google, puis c'est sur un forum qu'un membre m'a conseillé de le faire par php. Si la méthode indiquée n'est pas idéale, elle a au moins eu le mérite de m'apprendre (bien modestement) à manipuler un peu de php.

Je préciserai que l'on ne peut frapper qu'un mot dans le champs de recherche, etc, tant que le code ne prévoit pas les améliorations que tu suggères.

Pour le problème présent, il y a une erreur avec la dernière instruction. L'enlever ne semble pas résoudre le problème.

Mammouth du PHP | 859 Messages

11 avr. 2005, 14:43

Le problème viendrait de là :
else
    {
        echo $page['droite'];
    }
C'est pas plutôt un include() que tu veux faire?

Eléphanteau du PHP | 18 Messages

11 avr. 2005, 14:46

Ben disons qu'avant la création du message (Aucun résultat") en cas de recherche infructueuse, la page de droite vide s'affichait. Je fais quoi ? Je supprime ? Mais quand je le supprime j'ai une erreur. ?!

Mammouth du PHP | 859 Messages

11 avr. 2005, 15:00

Moi je dirais de supprimer complètement le dernier else mais dis-moi quelle est l'erreur quand tu supprimes le else.

Eléphanteau du PHP | 18 Messages

11 avr. 2005, 15:10

Parse error: parse error, unexpected $end in h:\travaux\sites\monsite-bdd\index.php on line 108
Et j'ai keud' à cette ligne (c'est une ligne après la fermeture de ma balise html). (?!)
<?php
	$query="select * from bn_page where match(titre,titre_entete,gauche,droite,mots_cles) against ('".mysql_real_escape_string($_GET['recherche'])."*' in boolean mode)";

	$results=mysql_query($query,$mysql_link);

if(mysql_num_rows($results) == 0) 
            { 
                echo "La recherche a retourné 0 résultat(s)"; 
            } 
        else 
            { 
// on recupere les enregistrements
	while($respage=mysql_fetch_assoc($results))
	{

// on affiche les resultats (faut travailler la présentation...
?><ul style="margin-left:15px;  padding-left:15px;">
<li style="margin-bottom:-30px;" class="Style1"><a href="?page=<? echo $respage['id']; ?>"><? echo $respage['titre']; ?></li></ul><br>
<?php
	}
	// on fait le menage...
	mysql_free_result($results);
?></div>
	<div class="navi-b"></div>
</div>

</body>
</html>
Si tu voulais avoir les fichiers (email ou mise en ligne), je ne vois pas d'inconvénient à te les transmettre, si c'est plus simple pour déceler l'erreur, n'hésite pas à me le demander. :wink:

Mammouth du PHP | 859 Messages

11 avr. 2005, 15:19

Tu n'as pas fermé ton else en fin de fichier

Eléphanteau du PHP | 18 Messages

11 avr. 2005, 15:24

Désolé mais quelque chose m'échappe, là. Tu ne me proposais pas de le faire sauter ce else de fin de fichier (celui qui affiche la page droite en cas de non résultat) ?

Mammouth du PHP | 859 Messages

11 avr. 2005, 15:36

Je te proposais de faire sauter :
else
    {
        echo $page["droite"];
    }
Et toi t'en as enlevé encore plus, tu as supprimé l'accolade de fermeture du 1er else !

Eléphanteau du PHP | 18 Messages

11 avr. 2005, 15:53

C'est l'erreur que j'obtiens. :
Parse error: parse error, unexpected $end in h:\travaux\sites\monsite-bdd\index.php on line 110
Après modification (remis l'accolade sauvagement virée) :
<ul style="margin-left:15px;  padding-left:15px;">
<li style="margin-bottom:-30px;" class="Style1"><a href="?page=<? echo $respage['id']; ?>"><? echo $respage['titre']; ?></li></ul><br>
<?php
	}
	// on fait le menage...
	mysql_free_result($results);

}
?></div>
	<div class="navi-b"></div>
</div>
</body>
</html>

Mammouth du PHP | 859 Messages

11 avr. 2005, 16:00

C'est laquelle la ligne 110?

Eléphanteau du PHP | 18 Messages

11 avr. 2005, 16:02

2 lignes après </html> :cry:

Mammouth du PHP | 859 Messages

11 avr. 2005, 16:04

Regarde tes balises il doit y en avoir une qui n'a pas été fermée. C'est le problème typique qui déclenche cette erreur.

Mammouth du PHP | 859 Messages

11 avr. 2005, 16:06

<?php
    $query="select * from bn_page where match(titre,titre_entete,gauche,droite,mots_cles) against ('".mysql_real_escape_string($_GET['recherche'])."*' in boolean mode)";

    $results=mysql_query($query);

if(mysql_num_rows($results) == 0)
            {
                echo "La recherche a retourné 0 résultat(s)";
            }
        else
            {
// on recupere les enregistrements
    while($respage=mysql_fetch_array($results))
    {

// on affiche les resultats (faut travailler la présentation...
?><ul style="margin-left:15px;  padding-left:15px;">
<li style="margin-bottom:-30px;" class="Style1"><a href="?page=<?php echo $respage['id']; ?>"><?php echo $respage['titre']; ?></a></li></ul><br>
<?php
    }
    // on fait le menage...
    mysql_close();
?></div>
    <div class="navi-b"></div>
</div>

</body>
</html>