IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

PHP & Base de données Discussion :

Affichage du résultat page par page (pagination) [Fait] [MySQL]


Sujet :

PHP & Base de données

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    47
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 47
    Points : 25
    Points
    25
    Par défaut Affichage du résultat page par page (pagination)
    j'ai vraiment du mal et la encore plus....
    quelqu'un pourrait m'expliquer et me montrer de preference sur mon code le systeme pour faire un page par page avec les liens page suivante page precedente sachant que souhaite afficher 10 enregistrement par page ?

    voici mon code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    <?php 
     
     
    $departement = $_POST['departement'];  
    $poste = $_POST['choixposte'];
    $db = mysql_connect('localhost', 'root', ''); 
    mysql_select_db('profimmo',$db); 
     
    $sql = "SELECT * FROM annonces_entreprise WHERE annonce_dept ='$departement' AND annonce_poste ='$poste' ORDER BY id_annonce DESC";
     
    $req = mysql_query($sql) or die('Erreur SQL !<br>'.$sql.'<br>'.mysql_error()); 
    $nb_res = mysql_num_rows($req);
     
     
    if ($nb_res != 0) //si il ya des résultats
     {
     //on fait l'affichage
    echo '<table>'."\n";
     
     
    	echo '<caption> Département : '.$departement.'</caption>';
     
            echo '<tr>';
    	  echo '<th><b><center>Créee le </center></b></th>';
     
            echo '<th><b><center>Entreprise</center></b></th>';
     
          	echo '<th><b><center>Poste</center></b></th>';
     
    		echo '<th><b><center>Ville</center></b></th>';
     
    		echo '<th><b><center>Détail</center></b></th>';
     
            echo '</tr>'."\n";
           echo '<tr><td>';
     
     
      while($data = mysql_fetch_assoc($req)) 
        { 
     
          echo '<tr>';
    	  echo '<td><b>'.$data['date_creation'].'</b></td>'; 
     
          echo '<td><b>'.$data['nom_entreprise'].'</b></td>';
     
    	  echo '<td><b>'.$data['annonce_poste'].'</b></td>';
     
    	  echo '<td><b>'.$data['ville_entreprise'].'</b></td>'; 
     
    	  echo '<td><b>'.$data['lien_annonce'].'</b></td>'; 
     
    	echo '</tr><br>'."\n";
     
    	}
    echo '</table>'."\n";
     echo '</td></tr>';
     echo '</table>';
     
     }
    else //il n'y a pas de résultat
     {
      echo "Aucun resultat pour cette recherche";
     }
     
     
    mysql_close(); 
    ?> 
    </div>
    </html>
    </body>
    Merci d'avance

  2. #2
    Membre expert
    Inscrit en
    Janvier 2005
    Messages
    2 291
    Détails du profil
    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 291
    Points : 3 212
    Points
    3 212
    Par défaut
    Sur developpez.com il y a beaucoup de tutoriels sur l'utilisation de PHP dont celui la: Créer un systeme de pagination automatique
    ca explique, sur un exemple de livre d'or, le genre de présentation que tu recherches.

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    47
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 47
    Points : 25
    Points
    25
    Par défaut
    merci je ne l'avais pas vu.

  4. #4
    Membre expert
    Inscrit en
    Janvier 2005
    Messages
    2 291
    Détails du profil
    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 291
    Points : 3 212
    Points
    3 212
    Par défaut
    Citation Envoyé par marcito
    merci je ne l'avais pas vu.
    Vous avez le code qui affiche tous les résultats. Maintenant il faut juste comprendre comment utiliser le LIMIT dans une requete mysql (pour n'avoir qu'une partie des éléments) et comment faire deux liens précédents/suivants qui vont passer entre chaque appel au script les bons paramètres (numéro courant des résultats, et numéro des prochains)

  5. #5
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    47
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 47
    Points : 25
    Points
    25
    Par défaut
    ouais j'essaye de me pencher sur les tuto mais c'est trop haut pour moi rrrrrr je comprends pas et ca m'ennerve

  6. #6
    Membre expert
    Inscrit en
    Janvier 2005
    Messages
    2 291
    Détails du profil
    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 291
    Points : 3 212
    Points
    3 212
    Par défaut
    Ben le tutorial que je t'ai donné est bien expliqué, il explique clairement quelles sont les différentes étapes, donc qu'est ce que tu ne comprends pas?

  7. #7
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    47
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 47
    Points : 25
    Points
    25
    Par défaut
    ouais il est tres bien expliqué mais tu sais je débute et pour l'integrer a mon code c'est coton... mais bon je vais essayé...

  8. #8
    Expert éminent sénior

    Profil pro
    Inscrit en
    Juin 2002
    Messages
    6 152
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 6 152
    Points : 17 778
    Points
    17 778
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    <?php
    define('NB_PAR_PAGE', 10);
     
    $departement = $_REQUEST['departement']; /* Ugly hack */
    $poste = $_REQUEST['choixposte']; /* Ugly hack */
    $db = mysql_connect('localhost', 'root', '');
    mysql_select_db('profimmo', $db);
     
    $page = isset($_GET['page']) ? intval($_GET['page']) : 1;
    /* Ugly hack */
    unset($_REQUEST['page']);
    $request = http_build_query($_REQUEST); // Retransmettre les données (requiert PHP 5)
     
    $sql_d = sprintf("
        SELECT SQL_CALC_FOUND_ROWS * FROM annonces_entreprise
            WHERE annonce_dept ='%s' AND annonce_poste ='%s'
            ORDER BY id_annonce DESC
            LIMIT %d, %d",
        mysql_real_escape_string($departement), mysql_real_escape_string($poste), ($page - 1) * NB_PAR_PAGE, NB_PAR_PAGE);
     
    $req_d = mysql_query($sql_d) or die('Erreur SQL !<br>' . $sql_d . '<br>' . mysql_error());
     
    $req_n = mysql_query('SELECT FOUND_ROWS()');
    $res_n = mysql_fetch_row($req_n);
     
    if ($res_n[0] > 0)
    {
        $derniere_page = ceil($res_n[0] / NB_PAR_PAGE);
     
        echo '<table>'."\n";
        echo '<caption> Département : ' . $departement . '</caption>';
        echo '<tr>';
        echo '<th><b><center>Créee le </center></b></th>';
        echo '<th><b><center>Entreprise</center></b></th>';
        echo '<th><b><center>Poste</center></b></th>';
        echo '<th><b><center>Ville</center></b></th>';
        echo '<th><b><center>Détail</center></b></th>';
        echo '</tr>' . "\n";
        echo '<tr><td>';
     
        while($res_d = mysql_fetch_assoc($req_d)) 
        {
            echo '<tr>';
            echo '<td><b>' . $res_d['date_creation'] . '</b></td>'; 
            echo '<td><b>' . $res_d['nom_entreprise'] . '</b></td>';
            echo '<td><b>' . $res_d['annonce_poste'] . '</b></td>';
            echo '<td><b>' . $res_d['ville_entreprise'] . '</b></td>'; 
            echo '<td><b>' . $res_d['lien_annonce'] . '</b></td>'; 
            echo '</tr><br>' . "\n";
        }
        echo '</table>' . "\n";
        echo '</td></tr>';
        echo '</table>';
     
        if ($page > 1) {
            printf('<a href="%s?page=%d&amp;%s">Page précédente</a>', basename(__FILE__), $page - 1, $request);
        }
        for ($i = 1; $i <= $derniere_page; $i++) {
            if ($i == $page) {
                echo '<b>' . $i . '</b>';
            } else {
                printf('<a href="%s?page=%d&amp;%s">%d</a>', basename(__FILE__), $i, $request, $i);
            }
        }
        if ($page < $derniere_page) {
            printf('<a href="%s?page=%d&amp;%s">Page suivante</a>', basename(__FILE__), $page + 1, $request);
        }
    } else {
        echo "Aucun résultat pour cette recherche";
    }
    mysql_close(); 
    ?> 
     
    </div>
    </html>
    </body>
    (non testé et ce serait plus simple avec un jeu de test)

    C'est la clause LIMIT la clef de voûte du système de pagination : elle permet de sélectionner les enregistrements des "positions" X à Y. Ici j'ai utilisé une propriété de MySQL : SQL_CALC_FOUND_ROWS (versions >= 4.0.0) qui indique au SGBD de calculer et conserver le nombre total d'enregistrements correspondant à la requête (sans tenir compte de la clause LIMIT) : c'est en quelque sorte l'équivalent d'une requête COUNT(), qui nous permet de déterminer notamment s'il y aura d'autres pages de résultat.

    Par contre il faudrait que vous vous penchiez plus sérieusement sur les paramètres (GET/POST) de ce script : retransmission (utilisation d'une session ?) et ne pas les réutiliser tels quels (j'ai rajouté des appels à mysql_real_escape_string).

    Note : votre code HTML ne doit pas être valide (au niveau du(des) tableau(x)).

  9. #9
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    47
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 47
    Points : 25
    Points
    25
    Par défaut
    mon dieu si vous etiez a coté de moi je vous embrasserrais ca marche vraiment bien.....

    par contre je vais me pencher sur ta remarque avec les sessions.

    a bientot et merci encore

  10. #10
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    47
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 47
    Points : 25
    Points
    25
    Par défaut
    j'ai un petit soucis a la première page du tableau en haut du tableau j'ai ce message d'erreur :

    Notice: Undefined index: page in C:\Program Files\EasyPHP 2.0b1\www\new7.php on line 28

    ligne 28 qui correspond a :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $page = $_GET['page'] ? intval($_GET['page']) : 1;
    j'ai cherché dans le code script que tu m'a donné mais je saisi pas????

  11. #11
    Modératrice
    Avatar de Celira
    Femme Profil pro
    Développeuse PHP/Java
    Inscrit en
    Avril 2007
    Messages
    8 633
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Développeuse PHP/Java
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2007
    Messages : 8 633
    Points : 16 372
    Points
    16 372
    Par défaut
    C'est un opérateur ternaire :
    A?B:C <=> if (A) { B } else { C }
    En l'occurence, il ne doit pas trouver la variable $_GET['page']. Il faudrait peut-être utiliser isset dans la condition :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $page = isset($_GET['page']) ? intval($_GET['page']) : 1;
    Modératrice PHP
    Aucun navigateur ne propose d'extension boule-de-cristal : postez votre code et vos messages d'erreurs. (Rappel : "ça ne marche pas" n'est pas un message d'erreur)
    Cherchez un peu avant poser votre question : Cours et Tutoriels PHP - FAQ PHP - PDO une soupe et au lit !.

    Affichez votre code en couleurs : [CODE=php][/CODE] (bouton # de l'éditeur) et [C=php][/C]

  12. #12
    Expert éminent sénior

    Profil pro
    Inscrit en
    Juin 2002
    Messages
    6 152
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 6 152
    Points : 17 778
    Points
    17 778
    Par défaut
    Citation Envoyé par Celira
    Il faudrait peut-être utiliser isset dans la condition :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $page = isset($_GET['page']) ? intval($_GET['page']) : 1;
    Exact Celira, un oubli de ma part, c'était bien le test que je comptais initialement mettre dans la condition. J'ai corrigé en conséquence.



  13. #13
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    47
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 47
    Points : 25
    Points
    25
    Par défaut
    vraiment super, a priori c'était ca....

    je comprends pas tout le code que j'ai copier coller mais je vous jure de me pencher a fond dessus.
    si vous saviez a quel point ca m'ennerve de butter sur des trucs comme ca qui on l'air si simple pour vous.

    c'est dure de redevenir un débutant a 32ans.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Affichage page par page des résultats avec des pointillés pour les numeros de page
    Par lewhechris dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 4
    Dernier message: 27/10/2011, 12h15
  2. Affichage page par page des résultats
    Par Abou Zar dans le forum Langage
    Réponses: 59
    Dernier message: 07/12/2009, 12h21
  3. [MySQL] pagination affichage page par page
    Par dunbar dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 24/03/2007, 21h42
  4. [MySQL] afficher plusieurs enregistrements par page par page à la volée
    Par pod1978 dans le forum PHP & Base de données
    Réponses: 4
    Dernier message: 14/03/2006, 12h22

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo