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

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : Moteur de recherche interne / si aucun résultats -> messa

par daffy » 18 avr. 2005, 17:11

Si tu veux chercher plusieurs mots dans ta requete against, elle doit etre de la forme against ('mot1|mot2|mot3').

par metisaz » 11 avr. 2005, 17:14

J'ai du remettre mon
// sinon on affiche le cadre de droite
else echo $page["droite"];
Sinon ma $page "droite" disparaissait dans ma page d'accueil. :wink:

par metisaz » 11 avr. 2005, 16:56

Bien vu Flitox. :D

par flitox » 11 avr. 2005, 16:32

Code : Tout sélectionner

if($_GET['page']=='recherche'&&isset($_GET['recherche'])&&$_GET['recherche']) {
Ce if n'a pas d'accolade de fermeture. Vu son niveau dans l'imbrication des conditions, il doit être fermé après le dernier mysql_free_result($results);

par metisaz » 11 avr. 2005, 16:23

Tu vois ci-dessous ma page complète. Je pensais pas que ce serait autant la mouize de rajouter cela. J'insiste, peut-être plus simple pour toi d'installer rapidos la bdd et d'essayer trankillos le site en local.
<?php
// on inlut le fichier de config (nom de base, etc)
// il faut modifier ce fichier d'apres l'hebergeur...
include("etc/config.php");

// ce fichier crée la connexion a la base MySQL ($mysql_link)
include("inc/mysql_connexion.php");

//teste si on passe en parametre d'URL une page... (http://.../index.php?page=accueil)
//si pas de page definie page=accueil (par defaut)
if(!isset($_GET['page'])) $_GET['page']='accueil';

// on enleve les espaces devant et derriere pour la recherche...
if (isset($_GET['recherche'])) $_GET['recherche']=trim($_GET['recherche']);

// crée la requete qui recupère les donnée d'une page dans la table bn_page grace a l'identifiant
$query="select * from bn_page where id='$_GET[page]'";
// select * from bn_page where id='page' par ex...
// NB : pour l'identifant de page n'utiliser que les caracteres [a-z0-9] (pas d'espace, pas d'accents)

// execution de la requete...
$results=mysql_query($query,$mysql_link);

// on recupere l'enregistrement dans la variable $page
$page=mysql_fetch_assoc($results);
// maintenant page est un tableau associatif dont les elements correspondent aux champs de la table bn_page
// $page['id'] l'identifiant de page (?page=acceuil par ex)
// $page['titre_entete'] le <title> dans <head>
// $page['titre'] titre complet
// $page['gauche'] le code du cadre de navigation
// $page['droite'] le code du cadre détail
// $page['mots_cles'] pour que la recherche marche bien faut que les mots soient séparés par des espace des . etc mais pour ' ça marche pas donc << l'ensemble >> par ex ça marche pas... en plus les accents en entites HTML (&eacute; par ex) sont pas gérés... donc dans mots cles tu peux ajouter des mots cles que tu veux pour que la page sorte pour ce mot...

// on fait le menage...
mysql_free_result($results);

// si il n'y a pas d'enregistrement pour cet identifiant, on a un probleme : erreur !
if(!$page) die("erreur : page '$_GET[page]' inexistante !");
// on pourrait faire un include() d'une page d'erreur plus propre...

?>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> 
<html>
<head>
<title>Titre - <?php	// on affiche ce qu'il faut pour le titre...	// ça vient de la base... :)	echo $page["titre_entete"];?></title>
<meta name="keywords" content="alex">
<meta name="description" content="Site.">
<meta name="revisit-after" content="15 day">
<meta name="identifier-url" content="http://xxx.fr">
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<link href="fichier.css" rel="stylesheet" type="text/css">
</head>
<body class style="margin-top: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px;">
<div class="global">
  <div class="navi-h"><form class="form">Rechercher sur le site :
      <input type="hidden" name="page" value="recherche">  
      <input type="text" name="recherche" value="<? if (isset($_GET['recherche'])) echo $_GET['recherche']; ?>">
      <input name="Submit" type="submit" id="bouton" value="Envoyer">
  </form>
  </div>
	<div class="navi">
	  <object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,29,0" width="862" height="30">
        <param name="movie" value="images/navi.swf">
        <param name="quality" value="high">
        <embed src="images/navi.swf" quality="high" pluginspage="http://www.macromedia.com/go/getflashplayer" type="application/x-shockwave-flash" width="862" height="30"></embed>
      </object>
</div>
	<div class="frame-g"><?php
// on affiche le cadre de gauche
echo $page["gauche"];
	?></div>
  	<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);

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>
PS : pas d'amélioration avec "mysql_close();"

par flitox » 11 avr. 2005, 16:13

J'ai modifié vite fait le code en haut pour interroger la bdd.

Mais j'avoue ne pas être sûr que le problème soit dans cette partie de code qu'on traite depuis tout à l'heure. Tu as du code PHP encore plus haut?

par metisaz » 11 avr. 2005, 16:09

J'ai pas compris. Il n'y avait pas de balise non fermée donc ? Tu as modifié
mysql_free_result($results);
par
mysql_close();
, c'est tout, non ?

par flitox » 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>

par flitox » 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.

par metisaz » 11 avr. 2005, 16:02

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

par flitox » 11 avr. 2005, 16:00

C'est laquelle la ligne 110?

par metisaz » 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>

par flitox » 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 !

par metisaz » 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) ?

par flitox » 11 avr. 2005, 15:19

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