Problème avec une recherche

Répondre
BIO
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
LA GLOBULE
le 13/02/2009 à 09:25
LA GLOBULE
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.
BIO
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 smiley
avez vous de solution...

recherche-livre.php
<?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&eacute;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&eacute;sultat de votre recherche : ';
if($auteur) echo 'Auteur &laquo; '.$_POST['auteur'].' &raquo;';
if($titre) echo ' Titre &laquo; '.$_POST['titre'].' &raquo;';
echo '</span><br/>'.$nb_total;


if($nb_resultats > 1)
{
echo ' <span class="Vert">r&eacute;sultats trouv&eacute;s</span> ';
}
else
{
echo ' <span class="Vert">r&eacute;sultat trouv&eacute;</span> ';
}
echo 'dans notre biblioth&egrave;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&acute;édition : '.$donnees['maison_edition'].'<br/>';
if($donnees['lieu_edition']) echo 'Lieu d&acute;édition : '.$donnees['lieu_edition'].'<br/>';
if($donnees['collection']) echo 'Collection : '.$donnees['collection'].'<br/>';
if($donnees['annee_edition']) echo 'Année d&acute;é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&acute;avons trouver aucun livre avec le mot :
<span class="Vert">&laquo; '.$_POST['auteur'].' &raquo;</span></pre>';
}
echo '<span class="gras">'.barre_navigation($nb_total, $nb_affichage_par_page, $_GET['debut'], 3).'</span>';
}
mysql_close();
}
}
?>


fonction_num.php
<?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.'">&lt;&lt;</A>&nbsp;&nbsp;';
}
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.'&nbsp;-&nbsp;';
}
}
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>&nbsp;-&nbsp;";
}
}
}

$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 = '&nbsp;&nbsp;<A HREF="'.$cible.'">&gt;&gt;</A>';
}
else {
$lien='';
}
$barre .= $lien;

return $barre;
}
?>
moogli
le 21/02/2009 à 00:09
moogli
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 !!!!!
Répondre

Ecrire un message

Votre message vient d'être créé avec succès.
LoadingChargement en cours