PHP|Débutant :: Forums

Advertisement

Besoin d'aide ? N'hésitez pas, mais respectez les règles

Vous n'êtes pas identifié(e).

#1 26-05-2009 10:51:35

gabi1202
Membre
Inscription : 26-05-2009
Messages : 13

[Résolu] affichage pagination

Bonjour,
voila j'ai fais un script de recherche avec une pagination,
quand je fais la recherche il affiche bien les données correspondante. mais mon soucis est que quand je veux passé à la 2eme page avec la pagination, il m'affiche une page vide et non les résultat suivant demandé .

voici le code.

<?php
    if (isset($_POST['rechercher']))
    {
      mysql_connect("localhost", "root", "mysql");
      mysql_select_db("belgitopia");
      $q=$_POST['rechercher'];
      switch($_POST['choix'])
      {
        case "commune": $choix = "commune";
        break; 
        case "cp": $choix = "cp";
        break; 
        case "nom": $choix = "nom";
        break; 
        case "type_activite": $choix = "type_activite";
        break; 
        // On vérifie toutes les possibilités, pour ne pas pouvoir chercher dans des champs non autorisés.
      }
      if ($q == '')
      {
        echo 'Veuillez entrez votre recherche svp <br/>';
      }
      else   
      {
        $messageparpage=3;
        $retour_total= mysql_query ("SELECT COUNT(*) AS total from recherche WHERE $choix LIKE '%$q%'") or die (mysql_error()); //va chercher toutes les données qui se trouve la table recherche
        $donnees_total=mysql_fetch_assoc($retour_total);
        $total=$donnees_total['total'];
        $nombredepages=ceil($total/$messageparpage);
     
        if(isset($_GET['page']))
        {
          $pageactuelle=intval($_GET['page']);
       
          if($pageactuelle>$nombredepages)
          {
            $pageactuelle=$nombredepages;
          }
        }
        else
        {
          $pageactuelle=1;
        }
        $premiereentree=($pageactuelle-1)*$messageparpage;
       
        //$sql = "SELECT * FROM recherche WHERE $choix LIKE '%$q%'"; // On recherche dans la base séléctionnée
        $req=mysql_query("SELECT * FROM recherche WHERE $choix LIKE '%$q%' ORDER BY id DESC LIMIT ".$premiereentree.','.$messageparpage.'');
        //$req = mysql_query($d) or die(mysql_error());
       
        mysql_close();
        echo "<br/><br/>";
        while ($d = mysql_fetch_assoc($req))
        {
  ?>
 
 
  <div class="image_nom">
    <div class="nom">
      <?php echo $d['nom']; ?>
    </div> <!--fermeture di nom-->
    <div class="image">
      <img class="image1_1" src="<?php echo $d['image1']; ?>" alt="image" />
    </div> <!--dermeture div image-->
  </div> <!--fermeture div image nom-->
   
  <div class="coordonee">
    <p>
    <b>Adresse:</b>
    </p>
    <p>
    <?php echo $d['adresse'] ?>
    <br/>
    <?php echo $d['cp'] ?>
    <?php echo $d['commune'] ?>
    </p>
    <p>
    <b>Tel:</b> <?php echo $d['tel'] ?>
    <b>Fax:</b> <?php echo $d['fax'] ?>
    </p>
    <p>
    <b>E-mail:</b> <?php echo $d['mail'] ?>
    </p>
  </div> <!--fermeture coordonee-->
 
  <div class="sous_descriptif">
        <a title="clic pour plus d'info" href="#" onclick="description1(<?php echo $d['id'];?>); return false;" style="color:#525253; margin-left: 25px;">Plus d'info</a>
      </div> <!--fermeture sous_descriptif-->
      <div class="deco">
        <div id="cadre1<?php echo $d['id'];?>" style="display:none; border:3px solid #fff; padding: 5px;" >
          <div class="image2"> <a href="<?php echo $d['image2']; ?>" rel="lightbox"><img class="image2_2" src="<?php echo $d['image2']; ?>" title="clic pour agrandir"  alt="image" /></a>
          <p><?php echo $d['texte'];?></p>
          </div> <!--fermeture div image2-->
          <div class="texte_fin"><br/><br/>
          <strong>Horaire</strong><br/>
            <?php echo $d['horaires'];?><br/><br/>
          <div class="image_deco">
            <a href="<?php echo $d['image3']; ?>" rel="lightbox"> <img class="image2_3" src="<?php echo $d['image3']; ?>"   title="clic pour agrandir" alt="image" /></a>
            <a href="<?php echo $d['image4']; ?>" rel="lightbox"> <img class="image2_3" src="<?php echo $d['image4']; ?>"   title="clic pour agrandir" alt="image" /></a>
            <a href="<?php echo $d['image5']; ?>" rel="lightbox"> <img class="image2_3" src="<?php echo $d['image5']; ?>"   title="clic pour agrandir" alt="image" /></a>
            <a href="<?php echo $d['image6']; ?>" rel="lightbox"> <img class="image2_3" src="<?php echo $d['image6']; ?>"   title="clic pour agrandir" alt="image" /></a>
            <a href="<?php echo $d['image7']; ?>" rel="lightbox"> <img class="image2_3" src="<?php echo $d['image7']; ?>"   title="clic pour agrandir" alt="image" /></a>
            <br/>
          </div> <!--fermeture div image deco-->
          </div> <!--fermeture div texte fin-->
        </div> <!--fermeture div cadre1-->
      </div> <!--fermeture div deco-->
 
         
    <?php
        }
        echo '<p class="page" style="text-align: center;">Page : ';
        for($i=1; $i<=$nombredepages; $i++) //On fait notre boucle
        {
          //On va faire notre condition
          if($i==$pageactuelle) //Si il s'agit de la page actuelle...
          {
          echo ' [ '.$i.' ] ';
          }
          else //Sinon...
          {
          echo ' <a href="test.php?page='.$i.'" style="color:#7b7a7a;">'.$i.'</a> ';
          }
        }
        echo '</p>';
      }
    }

   
    ?>

cela doit être une petite erreur (enfin j'espere lol tongue ) mais je la trouve pas.

Pouvez-vous m'aidez a la trouvé svp?
Merci à vous

Gabi

Dernière modification par gabi1202 (26-05-2009 17:13:48)

Hors ligne

#2 26-05-2009 13:04:30

Alnoss
Modérateur absent
Lieu : 06 - PACA
Inscription : 11-05-2009
Messages : 541
Site Web

Re : [Résolu] affichage pagination

Bonjour,

$messageparpage=3;
....
$req=mysql_query("SELECT * FROM recherche WHERE $choix LIKE '%$q%' ORDER BY id DESC LIMIT ".$premiereentree.','.$messageparpage.'');


Vu que ton $messageparpage est fixé à 3, comment veux tu que lorsque tu passes à la 2eme page [censée afficher les enregistrements de 3 à 6], alors que ta requete demande d'afficher les enregistrements de 3 à ..... 3
Penses à ton incrémentation de $messageparpage ou alors à passer par un limit ''.$limiteinferieure.','.$limitesuperieure.'' pour la clarté wink

ICI, Alex dit des âneries


MERCI de lire le mode d'emploi avant de poster !!

Hors ligne

#3 26-05-2009 14:12:37

gabi1202
Membre
Inscription : 26-05-2009
Messages : 13

Re : [Résolu] affichage pagination

Bonjour,
Je te remercie de ta réponse, mais malgré elle je ne vois pas mon erreur hmm je suis novice en php depuis 3 semaines donc il est vrai que j'ai encore pas mal de difficulté.

pourrais tu m'oriente un peux plus  et me dir ce que je dois changé exactement et ou stp? ca serait très sympa.
Merci a toi d'avoir prêter attention a mon poste smile

Hors ligne

#4 26-05-2009 14:35:05

Alnoss
Modérateur absent
Lieu : 06 - PACA
Inscription : 11-05-2009
Messages : 541
Site Web

Re : [Résolu] affichage pagination

Pour faire simple, tu as posé ta requete en fixant un LIMIT [LIMIT ".$premiereentree.','.$messageparpage.'');] mais dont les paramètres ne sont pas cohérents.
Lorsque tu es sur la première page, ta requete se termine par LIMIT 0,3)
Lorsque tu es sur la deuxième page, ta requete se termine par LIMIT 3,3)
Lorsque tu es sur la troisième page, ta requete se termine par LIMIT 6,3)

En fait, ta variable $messageparpage n'a rien à faire dans ton LIMIT. Comme je te le mets plus haut, tente de clarifier ta requête car tu devrais avoir un LIMIT ''.$limiteinferieure.','.$limitesuperieure.'')

Dans ta boucle [et seulement dans ta boucle], initie une variable $limitsup telle que : $limitesup = $messageparpage*$pageactuelle [en francais, 3x le numéro de la page en cours : exemple page 2 : $limitsup = 3*2 = 6 etc...

Maintenant, compte tenu du fait que tu ais pondu le code ci-dessus, tu ne devrais pas trop avoir de mal à le mettre en oeuvre

Ici, Alnoss dit des âneries encore plus grosses


MERCI de lire le mode d'emploi avant de poster !!

Hors ligne

#5 26-05-2009 14:40:11

gabi1202
Membre
Inscription : 26-05-2009
Messages : 13

Re : [Résolu] affichage pagination

ok je te remercie, je vais partir de tes explication smile
je te tiens au courant, merci encore a toi.

Hors ligne

#6 26-05-2009 14:52:05

ManicoW
Cowrespondant
Lieu : Tours
Inscription : 08-05-2009
Messages : 192
Site Web

Re : [Résolu] affichage pagination

Plop,

Heu Alex, STOP ! Tu va nous l'embrouiller là, parce que c'est lui qui a raison ! la syntaxe d'un LIMIT en mysql, ca a jamais été LIMIT debut, fin, mais toujours LIMIT debut, nombre_d_element . Donc sa requete SQL est a priori bonne.

Je vais colorer le code pour mieux voir, mais je pencherai pour un truc genre une variable non définie.

@+


la v2, c'est tabou, on en viendra tous a bout

Hors ligne

#7 26-05-2009 14:57:55

gabi1202
Membre
Inscription : 26-05-2009
Messages : 13

Re : [Résolu] affichage pagination

Je viens de tester alnoss, mais malheureusement cela ne marche pas plus. ce que je comprend pas c'est que tu me demande de faire une variable comme celle ci

$limitesup = $messageparpage*$pageactuelle

alors que celle ci desous existe déja.

$premiereentree=($pageactuelle-1)*$messageparpage;

comme je dis je suis un débutant donc j'essaie en même temps de comprendre les codes lol ce qui est vraiment pas évident pour moi tongue

Hors ligne

#8 26-05-2009 15:02:44

Alnoss
Modérateur absent
Lieu : 06 - PACA
Inscription : 11-05-2009
Messages : 541
Site Web

Re : [Résolu] affichage pagination

OUPS !! On m'aurait donc menti ??? Effectivement, je suis confus.. A force de courir plusieurs lièvres à la fois, on en perds son latin

Gloire à ManicoW ! Berger qui remets ses brebis dans le droit chemin ^^
Toutes mes excuses à toi, Gabi... je vais me repencher dessus


MERCI de lire le mode d'emploi avant de poster !!

Hors ligne

#9 26-05-2009 15:03:58

gabi1202
Membre
Inscription : 26-05-2009
Messages : 13

Re : [Résolu] affichage pagination

Pas de problème Alnoss,

Je suis déjà très content que vous essayer de m'aider smile

Hors ligne

#10 26-05-2009 15:04:29

ManicoW
Cowrespondant
Lieu : Tours
Inscription : 08-05-2009
Messages : 192
Site Web

Re : [Résolu] affichage pagination

Perso je serai partisan d'affiche le requete SQL avant de l'executer, genre


$sql = "SELECT * FROM recherche WHERE $choix LIKE '%$q%' ORDER BY id DESC LIMIT ".$premiereentree.','.$messageparpage.'';
echo $sql;
$req=mysql_query($sql);
 

Dès fois, ca permet de voir un soucis.

Ha ben voila, stop, j'ai trouvé, en la recopiant, je tilt.

ton lien pour la page suivante est fait en GET, avec juste le paramètre page. Le premier test du code, c'est


if (isset($_POST['rechercher']))
 

L'appel à la page est pas en post, et meme si il l'étais, y'a rien qui défini rechercher ou choix, donc $q serait vide.

Le problème est donc qu'il faut faire les liens différements. Soit les faire en méthode GET en passant les paramètres supplémentaire et en allant chercher les paramètres en GET si necessaire dans le code (mais ca me parait pas top pour une recherche), soit faire par un système de formulaire pour que les liens soient en post (wai, c'est un peu chiant).

Suffit de regarder google, dans les liens de bas de page, y'a le motif de recherche qui est spécifié dans le lien smile

Bon courage
@+


la v2, c'est tabou, on en viendra tous a bout

Hors ligne

#11 26-05-2009 15:14:16

gabi1202
Membre
Inscription : 26-05-2009
Messages : 13

Re : [Résolu] affichage pagination

donc si je comprend bien il ne garde pas en mémoire la recherche effectuer?

ce qui est bizarre c'est ci je fait

$pageactuelle=2 au lieu $pageactuelle=1

il m'affiche bien le contenu de la 2eme page.

Le problème ne viendrait il pas de mes lien incrémenté?

Hors ligne

#12 27-05-2009 22:07:16

gabi1202
Membre
Inscription : 26-05-2009
Messages : 13

Re : [Résolu] affichage pagination

le problème est résolu,

tu avais raison ManicoW le problème venait bien du mon formulaire.

cela fonctionne correctement maintenant.

encore merci pour l'aide

Hors ligne

Pied de page des forums