Problème avec une recherche
le 12/02/2009 à 20:27
BIO
j'ai le code suivant:
<?php
$host = 'localhost';
$pseudo = 'root';
$password = '';
$database = 'moteur_recherche';
$connection = mysql_connect($host,$pseudo,$password)
or die ('Erreur Connection'.mysql_error($conenction));
$select_db = mysql_select_db($database)
or die ('Base inexistante'.mysql_error($conenction));
$requete = htmlentities(mysql_real_escape_string($_POST['requete']));
if (!empty($requete))
{
$req = "SELECT * FROM site WHERE nom_site LIKE '%$requete%'";
$exec = mysql_query($req);
$nb_resultats = mysql_num_rows($exec);
if($nb_resultats != 0)
{
echo '<center>';
echo '
<form action="moteur_recherche2.php" method="Post">
<input type="text" name="requete" size="60px">
<input type="submit" value="Ok">
</form>';
echo '</center>';
echo '<font color="blue">Resultat de votre recherche </font><br/>
<font size="2px">'.$nb_resultats.'</font>';
if($nb_resultats > 1)
{
echo ' <font size="2px" color="red">resultats</font> ';
}
else
{
echo ' <font size="2px" color="red">resultats trouvé</font> ';
}
echo '<font size="2px">dans notre base de donnees :</font><br/><br/>';
while($donnees = mysql_fetch_array($exec))
{
?>
<?php
echo '<span>';
echo '<font size="2px">'.$donnees['adresse_site'].'</font><br/>';
echo '<font size="2px">'.$donnees['nom_site'].'</font><br/>';
echo '<font size="2px">'.$donnees['description_site'].'</font><br/>';
echo '</span>';
?>
<?php
} // fin de la boucle
?>
<?php
}
else
{
echo '<center>';
echo '
<form action="moteur_recherche2.php" method="Post">
<input type="text" name="requete" size="60px">
<input type="submit" value="Ok">
</form>';
echo '</center>';
echo '<h5>Pas de resultats</h3>';
echo '<pre>Nous n avons trouver aucun resultats pour votre requete
<font color="blue">' .$_POST['requete'].'</font></pre>';
}
mysql_close();
}
else
{
echo '<center>';
echo '
<form action="moteur_recherche2.php" method="Post">
<input type="text" name="requete" size="60px">
<input type="submit" value="Ok">
</form>';
echo '</center>';
}
?>
le problème est que lors de l'affichage de la page dans mon navigateur une erreur du type:
"Undefined index: requete in ..." est c'est avec la ligne
$requete = htmlentities(mysql_real_escape_string($_POST['requete']));
juste après la connexion à la base. et cette même erreur disparaisse après la première exécution
Ben cela veut dire que dans certains cas, $_POST['requete'] n'existe pas.
Tu devrais tester son existence avant de l'utiliser. Si elle n'existe pas, ne lance pas la recherche.
le 19/02/2009 à 14:49
BIO
merci beaucoup pour la réponse elle m'a vraiment aidé. j'ai essayé de raffiner un peu mon code et j'ai introduit un affichage de page par page que j'ai trouvé sur ce site mais le résultat de ma recherche s'affiche seulement sur une première page la deuxième s'affiche vide
avez vous de solution...
<?php
echo'<form action="catalogue-livre.php" method="Post" >
<table align="center" border="0" cellpadding="5" cellspacing="5">
<tr>
<td>Auteur :</td>
<td><input type="text" name="auteur" size="50"></td>
</tr>
<tr>
<td>Mot du titre :</td>
<td><input type="text" name="titre" size="50"></td>
</tr>
<tr>
<td></td>
<td><input type="submit" value="Chercher" name="go" class="SubmitBleu">Recherche avancée</td>
</tr>
</table>
</form>'
?>
<?php
require 'fonction_num.php';
require('connect.php');
if (isset($_POST['go']) && $_POST['go']=='Chercher')
{
($auteur = htmlentities(mysql_real_escape_string($_POST['auteur'])));
($titre = htmlentities(mysql_real_escape_string($_POST['titre'])));
$req = "SELECT count(*) FROM livres WHERE auteur LIKE '%$auteur%' AND titre LIKE '%$titre%'";
$resultat = mysql_query($req) ;
$nb_total = mysql_fetch_array($resultat);
if (($nb_total = $nb_total[0]) == 0)
{
echo 'Aucune réponse trouvée';
} else {
if (!empty($auteur)||!empty($titre))
{
if (!isset($_GET['debut'])) $_GET['debut'] = 0;
$nb_affichage_par_page = 2;
$req = "SELECT * FROM livres WHERE auteur LIKE '%$auteur%' AND titre LIKE '%$titre%' ORDER BY titre ASC LIMIT ".$_GET["debut"].",".$nb_affichage_par_page;
$exec = mysql_query($req);
$nb_resultats = mysql_num_rows($exec);
if($nb_resultats != 0)
{
echo '<span class="Bleu">Résultat de votre recherche : ';
if($auteur) echo 'Auteur « '.$_POST['auteur'].' »';
if($titre) echo ' Titre « '.$_POST['titre'].' »';
echo '</span><br/>'.$nb_total;
if($nb_resultats > 1)
{
echo ' <span class="Vert">résultats trouvés</span> ';
}
else
{
echo ' <span class="Vert">résultat trouvé</span> ';
}
echo 'dans notre bibliothèque des livres :<br/><br/>';
while($donnees = mysql_fetch_array($exec))
{
?>
<?php
echo '<span>';
echo 'Siécle : '.$donnees['siecle'].'<br/>';
if($donnees['genre']) echo ' Genre : '.$donnees['genre'].'<br/>';
if($donnees['cote']) echo ' Cote : '.$donnees['cote'].'<br/>';
if ($donnees['auteur']) echo 'Auteur : '.$donnees['auteur'].'<br/>';
echo 'Titre : '.$donnees['titre'].'<br/>';
if($donnees['critique']) echo ' Critique : '.$donnees['critique'].'<br/>';
if($donnees['maison_edition']) echo 'Maison d´édition : '.$donnees['maison_edition'].'<br/>';
if($donnees['lieu_edition']) echo 'Lieu d´édition : '.$donnees['lieu_edition'].'<br/>';
if($donnees['collection']) echo 'Collection : '.$donnees['collection'].'<br/>';
if($donnees['annee_edition']) echo 'Année d´édition : '.$donnees['annee_edition'].'<br/>';
echo 'Nombre de page : '.$donnees['nb_pages'].'<br/>';
if($donnees['mots_cles']) echo 'Mots Clés : '.$donnees['mots_cles'].'<br/>';
echo'<hr>';
echo '</span>';
?>
<?php
} // fin de la boucle
?>
<?php }
else
{
echo '<h5>Pas de resultats</h3>';
echo '<pre>Nous n´avons trouver aucun livre avec le mot :
<span class="Vert">« '.$_POST['auteur'].' »</span></pre>';
}
echo '<span class="gras">'.barre_navigation($nb_total, $nb_affichage_par_page, $_GET['debut'], 3).'</span>';
}
mysql_close();
}
}
?>
<?php
function barre_navigation ($nb_total,
$nb_affichage_par_page,
$debut,
$nb_liens_dans_la_barre) {
$barre = '';
// on recherche l'URL courante munie de ses paramètre auxquels on ajoute le paramètre 'debut' qui jouera le role du premier élément de notre LIMIT
if ($_SERVER['QUERY_STRING'] == "") {
$query = $_SERVER['PHP_SELF'].'?debut=';
}
else {
$tableau = explode ("debut=", $_SERVER['QUERY_STRING']);
$nb_element = count ($tableau);
if ($nb_element == 1) {
$query = $_SERVER['PHP_SELF'].'?'.$_SERVER['QUERY_STRING'].'&debut=';
}
else {
if ($tableau[0] == "") {
$query = $_SERVER['PHP_SELF'].'?debut=';
}
else {
$query = $_SERVER['PHP_SELF'].'?'.$tableau[0].'debut=';
}
}
}
// on calcul le numéro de la page active
$page_active = floor(($debut/$nb_affichage_par_page)+1);
// on calcul le nombre de pages total que va prendre notre affichage
$nb_pages_total = ceil($nb_total/$nb_affichage_par_page);
// on calcul le premier numero de la barre qui va s'afficher, ainsi que le dernier ($cpt_deb et $cpt_fin)
// exemple : 2 3 4 5 6 7 8 9 10 11 << $cpt_deb = 2 et $cpt_fin = 11
if ($nb_liens_dans_la_barre%2==0) {
$cpt_deb1 = $page_active - ($nb_liens_dans_la_barre/2)+1;
$cpt_fin1 = $page_active + ($nb_liens_dans_la_barre/2);
}
else {
$cpt_deb1 = $page_active - floor(($nb_liens_dans_la_barre/2));
$cpt_fin1 = $page_active + floor(($nb_liens_dans_la_barre/2));
}
if ($cpt_deb1 <= 1) {
$cpt_deb = 1;
$cpt_fin = $nb_liens_dans_la_barre;
}
elseif ($cpt_deb1>1 && $cpt_fin1<$nb_pages_total) {
$cpt_deb = $cpt_deb1;
$cpt_fin = $cpt_fin1;
}
else {
$cpt_deb = ($nb_pages_total-$nb_liens_dans_la_barre)+1;
$cpt_fin = $nb_pages_total;
}
if ($nb_pages_total <= $nb_liens_dans_la_barre) {
$cpt_deb=1;
$cpt_fin=$nb_pages_total;
}
// si le premier numéro qui s'affiche est différent de 1, on affiche << qui sera un lien vers la premiere page
if ($cpt_deb != 1) {
$cible = $query.(0);
$lien = '<A HREF="'.$cible.'"><<</A> ';
}
else {
$lien='';
}
$barre .= $lien;
// on affiche tous les liens de notre barre, tout en vérifiant de ne pas mettre de lien pour la page active
for ($cpt = $cpt_deb; $cpt <= $cpt_fin; $cpt++) {
if ($cpt == $page_active) {
if ($cpt == $nb_pages_total) {
$barre .= $cpt;
}
else {
$barre .= $cpt.' - ';
}
}
else {
if ($cpt == $cpt_fin) {
$barre .= "<A HREF='".$query.(($cpt-1)*$nb_affichage_par_page);
$barre .= "'>".$cpt."</A>";
}
else {
$barre .= "<A HREF='".$query.(($cpt-1)*$nb_affichage_par_page);
$barre .= "'>".$cpt."</A> - ";
}
}
}
$fin = ($nb_total - ($nb_total % $nb_affichage_par_page));
if (($nb_total % $nb_affichage_par_page) == 0) {
$fin = $fin - $nb_affichage_par_page;
}
// si $cpt_fin ne vaut pas la dernière page de la barre de navigation, on affiche un >> qui sera un lien vers la dernière page de navigation
if ($cpt_fin != $nb_pages_total) {
$cible = $query.$fin;
$lien = ' <A HREF="'.$cible.'">>></A>';
}
else {
$lien='';
}
$barre .= $lien;
return $barre;
}
?>
salut,
tu pourrais utiliser le wall pour mettre le wall ;)
25 $query = $_SERVER['PHP_SELF'].'?'.$tableau[0].'debut=';
$tableau[0].'debut=' y a des chance pour que $_GET['debut'] n'existe pas ;)
Mais au final le problème vient simplement du fait que quand tu clique sur le lien de la seconde page, le tableau $_POST sera vide, donc pas de recherche ce qui inclus la page vide vu qu'il n'y a aucune alternative au fait que $_POST soit vide.
Donc il te faut trouver un moyen d'utiliser les informations du formulaire sur la seconde page.
Pour cela j'opterais pour les session, il te faut juste savoir si l'info viens de POST ou $_SESSION et lorsqu'elle viens de $_POST mettre a jour $_SESSION avec !
@+
Il en faut peu pour être heureux !!!!!
Ecrire un message
Votre message vient d'être créé avec succès.
BB-Code
Pour insérer une URL clickable
Pour insérer une adresse E-mail
Pour annoter
Pour écrire du code
Pour faire un lien vers une fonction PHP
Pour écrire du texte préformaté
Pour écrire du texte en gras
Pour écrire du texte en italique
Pour écrire du texte souligné
Pour écrire du texte barré
Pour écrire un titre principal
Pour écrire un titre secondaire
Pour écrire une liste
Smiley
:bond:
:boxe:
:bsmile:
:bump:
:clap:
:coeur:
:cool:
:cry:
:eek:
:evil:
:fleur:
:fou2:
:fou:
:grin:
:grrr:
:hammer:
:hippy:
:hum:
:idee2:
:idee:
:kdo:
:king:
:ko:
:lol:
:love2:
:love:
:mad:
:maitre:
:noel:
:oops:
:raa:
:razz:
:roll:
:sad:
:skull:
:smile:
:timide:
:trink:
:vice:
:vomi:
:wink:
:zzz: