[php] moteur de recherche interne

Fermé
darksaif Messages postés 4 Date d'inscription vendredi 10 février 2006 Statut Membre Dernière intervention 20 août 2007 - 9 mars 2007 à 17:02
bbar Messages postés 436 Date d'inscription mercredi 27 septembre 2006 Statut Membre Dernière intervention 31 octobre 2008 - 15 mars 2007 à 12:20
Bonjour j'ai un ptit probleme sur mon programme je vous explique :

C'est tout simple lorsque je fait une recherche et qu'il ya plusieurs reponses on trouve un certains nombres de liens qui s'affichent (je l'ai limité a 3). Comme google j'ai voulu étaler les résultats sur plusieurs pages. Là est le probleme quand je clique sur la page numero 2 ca me dit :

Notice: Undefined index: mot in c:\program files\easyphp1-8\www\moteurex-1\moteur.php3 on line 30
Veuillez saisir un ou plusieurs mot-clés avant de cliquer sur Rechercher !

je ne comprends pas pourquoi j'ai cette erreur :s

Merci d'avance pour votre aide

<html>
<head>
<title>Moteur de recherche</title>

<STYLE type=text/css>
A:link{ COLOR: #c0c0c0;TEXT-DECORATION: none }
A:visited{ COLOR: #ffffff;TEXT-DECORATION: none }
A:hover { COLOR: #00ff00;TEXT-DECORATION: none }
</STYLE>

<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">

</head>

<body text="#FFFFFF" bgcolor="#000000" link="#9999FF" vlink="#6699FF" alink="#FFFF00">

<font face="Verdana" size=2>

<form action="moteur.php3" method="post">

<? include("config.inc.php3");?>
<?

/******************************************************************
* PROGRAMME PRINCIPAL
******************************************************************/

$et_ou="or";
$db_link = mysql_connect("$nomserv","$login","$mdp");
$mot = $_POST['mot'];;
$mots=split(" ",$mot);
$nombre_mots=count($mots);
$z=1;
$page=0;
$debut=0;
$texte=" contenant le mot <font color=00ff00>$mots[0]</font>";
$phrase="'%$mots[0]%'";
while($z<$nombre_mots)
{
$phrase.=" ".$et_ou." mots like '%$mots[$z]%'";
$texte.=" ";
if($et_ou=="and"){$texte.="et";}else{$texte.="ou";}
$texte.=" "$mots[$z]"";
$z++;
}
if($debut==""){$debut=0;}
$debut=$page*$limit;

// NOMBRE TOTAL D'ENREGISTREMENTS REPONDANT A LA REQUETE


$requete=mysql_db_query("$nombase","select count(*) from moteur where mots like $phrase order by id",$db_link);
$nb_total=mysql_result($requete,0,"count(*)");
$requete=mysql_db_query("$nombase","select * from moteur where mots like $phrase ",$db_link);
$num=mysql_num_rows($requete);

// DEFINITION DU MESSAGE A AFFICHER

if ($num==0) {echo "Désolé, aucune page de ce site ne contient $mot...";}
else if ($mot=="") {echo "Veuillez saisir un ou plusieurs mot-clés avant de cliquer sur Rechercher !";}
else if (strlen($mot)<2) {echo "Veuillez saisir au moins 2 caractères.";}

// AFFICHAGE DES RESULTATS

else {
echo "$nb_total réponse";
if ($nb_total>1) {echo "s";}
echo "$texte";

$i=0;
while($i<$num and $i<$limit)
{
$description=mysql_result($requete,$i,"description");
echo "<br><br></b>$description<br><font size=1></font>\n";
$i++;
}
$k=$i;

echo "<br><br>";

// AFFICHAGE DU LIEN PRECEDENT SI BESOIN EST
// (LA PREMIERE PAGES EST 0)

if ($page>0)
{
$precedent=$page-1;
print "<a href=\"$script_name?page=$precedent&mot=$mot\">page précédente</a> \n";
}

// AFFICHAGE DES NUMEROS DE PAGE

$i=0;$j=1;
if($nb_total>$limit)
{
while($i<($nb_total/$limit))
{
if($i!=$page){echo "<a href=\"$script_name?page=$i&mot=$mot\">$j</a> ";}
else {echo "<font color=00ff00>$j</font> ";}
$i++;$j++;
}
}

// AFFICHAGE DU LIEN SUIVANT SI BESOIN EST

if($debut+$limit<$nb_total)
{
$suivant=$page+1;
echo "<a href=\"$script_name?page=$suivant&mot=$mot\">page suivante</a>";
}
if ($page>0)
{
while($k<$nb_total)
{
echo "<br><br></b>$description<br><font size=1></font>\n";
$k++;
}
}
}

// DECONNEXION DE LA BASE DE DONNEE
mysql_close($db_link);
?>
</font>
</form>
</body>
</html>
A voir également:

1 réponse

bbar Messages postés 436 Date d'inscription mercredi 27 septembre 2006 Statut Membre Dernière intervention 31 octobre 2008 140
15 mars 2007 à 12:20
salut.
$mot = $_POST['mot'];; 

déjà sur ta ligne 30, tu as 2 * ; ce qui en fait un de trop. Ensuite, ce message est en fonction des champs que tu fait passer d'une page à l'autre.
Ensuite, ligne 96 :
if($i!=$page){echo "<a href=\"$script_name?page=$i&mot=$mot\">$j</a> ";} 

passer le paramètre dans l'url, c'est la méthode get, il est donc normal que tu n'arrives pas à la récup. Je pense qu'il te faut faire un test pour vérifier l'existance
- de $_POST['mot'] (cas de la première page)
- de $_GET['mot'] (cas des pages suivantes)
dans le cas où tu souhaite garder la page.
Une autre solution consiste à créer un champ :
<input type=hidden" value="<?echo $mot:?>" name="mot">

tout ça dans un formulaire de type post
0