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

Eléphanteau du PHP | 18 Messages

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 ?

Mammouth du PHP | 859 Messages

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?

Eléphanteau du PHP | 18 Messages

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();"

Mammouth du PHP | 859 Messages

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);

Eléphanteau du PHP | 18 Messages

11 avr. 2005, 16:56

Bien vu Flitox. :D

Eléphanteau du PHP | 18 Messages

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:

daffy
Invité n'ayant pas de compte PHPfrance

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').