Page 1 sur 2
Moteur de recherche interne / si aucun résultats -> messa
Posté : 11 avr. 2005, 14:06
par metisaz
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>
Re: Moteur de recherche interne / si aucun résultats -> m
Posté : 11 avr. 2005, 14:22
par flitox
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

Posté : 11 avr. 2005, 14:36
par metisaz
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.
Posté : 11 avr. 2005, 14:43
par flitox
Le problème viendrait de là :
else
{
echo $page['droite'];
}
C'est pas plutôt un
include() que tu veux faire?
Posté : 11 avr. 2005, 14:46
par metisaz
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. ?!
Posté : 11 avr. 2005, 15:00
par flitox
Moi je dirais de supprimer complètement le dernier else mais dis-moi quelle est l'erreur quand tu supprimes le else.
Posté : 11 avr. 2005, 15:10
par metisaz
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.

Posté : 11 avr. 2005, 15:19
par flitox
Tu n'as pas fermé ton else en fin de fichier
Posté : 11 avr. 2005, 15:24
par metisaz
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) ?
Posté : 11 avr. 2005, 15:36
par flitox
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 !
Posté : 11 avr. 2005, 15:53
par metisaz
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>
Posté : 11 avr. 2005, 16:00
par flitox
C'est laquelle la ligne 110?
Posté : 11 avr. 2005, 16:02
par metisaz
2 lignes après </html>

Posté : 11 avr. 2005, 16:04
par flitox
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.
Posté : 11 avr. 2005, 16:06
par flitox
<?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>