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 :

Pagination en PHP/MySQL [MySQL]


Sujet :

PHP & Base de données

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Femme Profil pro
    Inscrit en
    Février 2012
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations forums :
    Inscription : Février 2012
    Messages : 17
    Par défaut Pagination en PHP/MySQL
    Bonjour,
    Après de nombreuses recherches sur Internet et différentes versions de code testées je me tourne vers vous pour m'aider. Voici ma demande :

    Je cherche à faire de la pagination, donc j'interroge ma base de données sur une requête de l'utilisateur et après je suis sensé afficher 10 tuples et passer à la page suivante.
    De tous les codes que j'ai essayé, j'arrive à obtenir une pagination, mais dès que je clique sur la page 2, il n'y a plus de requêtes...


    Je suppose que mon code est aussi très mauvais ><
    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
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
        <?php
        $recherche = $_POST['recherche'];
        // on se connecte à notre base
                        $connexion = mysql_connect("xxxxxxxxxxx","xxxxxxxxxxxxx","xxxxxxxxxx") or die(mysql_error());
                        mysql_select_db('xxxxxxx') or die(mysql_error());
        //ouverture du tableau qui va afficher le résultat
      		        if($_POST['recherchemod'] == 'nom')
                    {
        $sq1 = "SELECT * from mods WHERE nom = '$recherche'";
        $requete = mysql_query($sq1);
                while ($recherche2 = mysql_fetch_array($requete))
                    {
    echo "<table class=\"table table-striped table-bordered\"><tbody>";
                    print "<tr><td><b>$recherche2[nom]</b></td>";
    				print "<td width=150 rowspan=\"4\" colspan=\"1\"><img src=\"$recherche2[image]\" width=150 height=80</img><br/></td></tr>";
    				print "<tr><td><b>Material needed :</b><br>".nl2br($recherche2['materiel'])."</td></tr>";
    				print "<tr><td><b>Weight class : </b>$recherche2[poids]</td></tr>";
    				print "<tr><td><b>Link : </b><a href=\"$recherche2[lien]\">$recherche2[nom]</a></td></tr>";
        echo "</tbody></table><br>";
    				}
                }
     
        //2éme condition si l'user choisi par corps
            elseif($_POST['recherchemod'] == 'corps')
                    {
        $sq1 = "SELECT * from mods WHERE corps = '$recherche'";
        $requete = mysql_query($sq1);
                while ($recherche2 = mysql_fetch_array($requete))
                    {
    echo "<table class=\"table table-striped table-bordered\"><tbody>";
                    print "<tr><td><b>$recherche2[nom]</b></td>";
    				print "<td width=150 rowspan=\"4\" colspan=\"1\"><img src=\"$recherche2[image]\" width=150 height=80</img><br/></td></tr>";
    				print "<tr><td><b>Material needed :</b><br>".nl2br($recherche2['materiel'])."</td></tr>";
    				print "<tr><td><b>Weight class : </b>$recherche2[poids]</td></tr>";
    				print "<tr><td><b>Link : </b><a href=\"$recherche2[lien]\">$recherche2[nom]</a></td></tr>";
        echo "</tbody></table><br>";
                    }
                    }
        //3éme condition par caps           
        elseif($_POST['recherchemod'] == 'caps')
                    {
        $sq1 = "SELECT * from mods WHERE caps = '$recherche'";
        $requete = mysql_query($sq1);
                while ($recherche2 = mysql_fetch_array($requete))
                    {
    echo "<table class=\"table table-striped table-bordered\"><tbody>";
                    print "<tr><td><b>$recherche2[nom]</b></td>";
    				print "<td width=150 rowspan=\"4\" colspan=\"1\"><img src=\"$recherche2[image]\" width=150 height=80</img><br/></td></tr>";
    				print "<tr><td><b>Material needed :</b><br>".nl2br($recherche2['materiel'])."</td></tr>";
    				print "<tr><td><b>Weight class : </b>$recherche2[poids]</td></tr>";
    				print "<tr><td><b>Link : </b><a href=\"$recherche2[lien]\">$recherche2[nom]</a></td></tr>";
        echo "</tbody></table><br>";
                    }
                    }
        //4éme condition par poids
        elseif($_POST['recherchemod'] == 'poids')
                {
                        $sq1 = "SELECT * from mods WHERE poids = '$recherche'" ;
                        $requete = mysql_query($sq1);
                 while ($recherche2 = mysql_fetch_array($requete))
                    {
    echo "<table class=\"table table-striped table-bordered\"><tbody>";
                    print "<tr><td><b>$recherche2[nom]</b></td>";
    				print "<td width=150 rowspan=\"4\" colspan=\"1\"><img src=\"$recherche2[image]\" width=150 height=80</img><br/></td></tr>";
    				print "<tr><td><b>Material needed :</b><br>".nl2br($recherche2['materiel'])."</td></tr>";
    				print "<tr><td><b>Weight class : </b>$recherche2[poids]</td></tr>";
    				print "<tr><td><b>Link : </b><a href=\"$recherche2[lien]\">$recherche2[nom]</a></td></tr>";
        echo "</tbody></table><br>";
                    }
                    }
    	elseif($_POST['recherchemod'] == 'type')
                {
                        $sq1 = "SELECT * from mods WHERE type = '$recherche'";
                        $requete = mysql_query($sq1);
                while ($recherche2 = mysql_fetch_array($requete))
                    {
    echo "<table class=\"table table-striped table-bordered\"><tbody>";
                    print "<tr><td><b>$recherche2[nom]</b></td>";
    				print "<td width=150 rowspan=\"4\" colspan=\"1\"><img src=\"$recherche2[image]\" width=150 height=80</img><br/></td></tr>";
    				print "<tr><td><b>Material needed :</b><br>".nl2br($recherche2['materiel'])."</td></tr>";
    				print "<tr><td><b>Weight class : </b>$recherche2[poids]</td></tr>";
    				print "<tr><td><b>Link : </b><a href=\"$recherche2[lien]\">$recherche2[nom]</a></td></tr>";
        echo "</tbody></table><br>";
                    }
                    }
    mysql_close();
        ?>
    	<div class="pagination">
        <ul>
        <li><a href="#">Prev</a></li>
        <li class="active">
        <a href="#">1</a>
        </li>
        <li><a href="#">2</a></li>
        <li><a href="#">3</a></li>
        <li><a href="#">4</a></li>
        <li><a href="#">Next</a></li>
        </ul>
        </div>
    Je vous remercie d'avance !

  2. #2
    Membre Expert
    Avatar de ericd69
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2011
    Messages
    1 919
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Avril 2011
    Messages : 1 919
    Billets dans le blog
    1
    Par défaut
    salut,

    tout simple, faut le faire en 2 requêtes:
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $sq1 = "SELECT SQL_CALC_FOUND_ROWS * from mods WHERE nom = '$recherche' limit $offset,$pagesize";
    $sq2 = "SELECT FOUND_ROWS();"
    avec:
    • $pagesize, le nombre de ligne par page, ici: 10
    • $offset, le décalage en nombre de ligne retournée par rapport à la première qui l'aurait été: $page*$pagesize;
    • $page, le numéro de la page en cours (0 pour la première et $page<$pages)
    • $pages, le nombre de pages de résultats: intval($results/$pagesize)+(($results%$pagesize)>0?1:0)
    • $results, le résultat de $sq2


    ensuite oui ton code n'est pas top....
    vaut mieux te mettre à pdo pour accéder à mysql, le connecteur mysql que tu utilises est voué à disparaitre...

    tu ne testes pas ce qui est passé dans $_POST['recherche'] ni ne le sécurise avec les fonctions faites pour éviter les attaques par injection...

    vaut mieux préciser ce que tu retourne vraiment que mettre * dans ta requête...


  3. #3
    Membre averti
    Femme Profil pro
    Inscrit en
    Février 2012
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations forums :
    Inscription : Février 2012
    Messages : 17
    Par défaut
    Si je comprends bien tes 2 lignes :
    La première me renvoie le nombre de lignes.
    La seconde retourne toutes les lignes (enfin ici 10).

    Par contre je n'ai pas de gestion de la pagination avec ça ?

    Entre temps j'ai cherché et le soucis c'est que je ne garde pas en mémoire le contenu du formulaire d'où la deuxième page blanche, j'ai fait ça...

    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
     
    $req=$bdd->query("SELECT COUNT(*) AS nbMod FROM mods where nom='$recherche'");
    $data = $req->fetch();
    $nbMod= $data['nbMod'];
    $perPage=2;
    $nbPage = ceil($nbMod/$perPage);
    $cPage=1;
     
    if(isset($_GET['p']) && $_GET['p']>0 && $_GET['p']<=nbPage){
    $cPage= $_GET['p'];
    }
    else
    {
    $cPage=1;
    }
     
    $sq1 = "SELECT * from mods WHERE nom ='$recherche' ORDER BY id LIMIT ".(($cPage-1)*$perPage).",$perPage";
    $requete = $bdd->query($sq1);
                while ($recherche2 = $requete->fetch())
                    {
    echo "<table class=\"table table-striped table-bordered\"><tbody>";
                    print "<tr><td><b>$recherche2[nom]</b></td>";
    				print "<td width=150 rowspan=\"4\" colspan=\"1\"><img src=\"$recherche2[image]\" width=150 height=80</img><br/></td></tr>";
    				print "<tr><td><b>Material needed :</b><br>".nl2br($recherche2['materiel'])."</td></tr>";
    				print "<tr><td><b>Weight class : </b>$recherche2[poids]</td></tr>";
    				print "<tr><td><b>Link : </b><a href=\"$recherche2[lien]\">$recherche2[nom]</a></td></tr>";
        echo "</tbody></table><br>";
                    }
     
     
    echo '<div class="pagination"><ul>';
    for($i=1;$i<=$nbPage;$i++){
    if($i==$cPage){
    echo "<li><a href=#>$i</a></li>";
    }
    else{
    echo "<li><a href=recherche.php?p=$i>$i</a></li>";
    }
    }
    echo '</ul>';
     
        ?>
    Sinon oui dans ma BdD je retourne en fait tout le contenu d'où le * ^^.

    Pdo je ne connais pas du tout, je vais me renseigner alors vu ce que tu me dis (et pour les failles aussi >.< )

    EDIT : j'ai modifié mon code en utilisant PDO

  4. #4
    Membre Expert
    Avatar de ericd69
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2011
    Messages
    1 919
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Avril 2011
    Messages : 1 919
    Billets dans le blog
    1
    Par défaut
    bien un progrès déjà...

    la première renvoie le nombre de tuples de ta requête que tu désires voir en fonction de la page de tuple en cours tout en préservant la valeur du nombre total de tuples trouvés (donc pas besoin de te taper 2 fois ta requête de recherche pour avoir ensuite le nombre de pages)... mais elle doivent s'exécuter l'une derrière l'autre sans aucune autre requête entre elles

    pour pdo, l'avantage c'est que c'est de l'objet et que tu peux changer de sgbd (mysql, postgre, etc...) sans trop de modification de ton code...

    je te donne les piste.. faut que tu bosses un peu

    pour ta pagination tu as plein de façon de le faire

    ici tu dois passer en paramètre de ta page ($_GET ou $_POST) le numéro de la page en cours... pour se faire tu vas donc générer une liste de liens (ou d'input si tu passes par un formulaire pour changer de page...

    après tu peux faire une boucle de listage de ces liens plus ou moins complète selon la place que tu veux qu'elle tienne, le nombre total de page de tuples et la page courante...

  5. #5
    Membre averti
    Femme Profil pro
    Inscrit en
    Février 2012
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations forums :
    Inscription : Février 2012
    Messages : 17
    Par défaut
    Bien sur qu'il faut que je bosse ^^ je ne demande pas le code tout fait (sinon ça ne sert à rien pour moi).

    Pour la pagination, le petit soucis que je rencontre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    if(isset($_GET['p']) && $_GET['p']>0 && $_GET['p']<=nbPage){
    $cPage= $_GET['p'];
    }
    else
    {
    $cPage=1;
    }
    J'ai ça, donc ça vérifie le paramètre en URL, mais lors de ma requête, je ne modifie pas l'URL pour y intégrer le ?p=xxx

    On me parle d'un code du genre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    $url="xxxxxxxxxx.php";
    $url.="?p.cPage.";
    header("Location:".$url);
    Mais j'obtiens :
    Warning: Cannot modify header information - headers already sent by (output started at xxxx/recherche.php:15) in xxxx/recherche.php on line 85
    La ligne 85 fait référence à header("Location:".$url);

  6. #6
    Membre Expert
    Avatar de ericd69
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2011
    Messages
    1 919
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Avril 2011
    Messages : 1 919
    Billets dans le blog
    1
    Par défaut
    c'est normal...

    partons sur une liste de liens...

    en dessous de l'affichage des tuples, ta va avoir une liste de pages de tuples du genre:
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    $maxvisible=3;
    echo "<div class='nav'>";
    for($i=max(0,$cpage-$maxvisible);$i<$pagemax;$i++)
      echo($i!=$cPage?"<a href='/chemin/scrip.php?page=$i'>".($i+1)."</a>":"<span>".($i+1)."</span>");
    echo "</div>";

    là je ne gère pas le saut de page par décade ou centaines en cas de nombre de tuples important, juste un truc basique qui liste +/-3 pages autour de la page de tuples courante

    si tu as des sélections (choix) à propager entre pages soit tu les rajoutes à la fin de l'adresse avec la syntaxe GET:
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    "<a href='/chemin/scrip.php?page=$i".$opt."'>"
    avec les options de sélection de tes tuples, ici c1 et c2, ayant les valeur v1 et v2:
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    $opt="&c1=v1&c2=v2";

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

Discussions similaires

  1. Pagination en jquery/PHP/Mysql
    Par homecinemaoccasion dans le forum jQuery
    Réponses: 0
    Dernier message: 14/11/2014, 09h49
  2. [MySQL] Optimisation de scripts PHP/MySQL
    Par DgG dans le forum PHP & Base de données
    Réponses: 368
    Dernier message: 20/11/2013, 18h59
  3. [MySQL] Système de pagination avec php/mysql
    Par carinelog dans le forum PHP & Base de données
    Réponses: 3
    Dernier message: 01/07/2013, 17h34
  4. [AJAX] Pagination comme Facebook (PHP/mysql)
    Par mecmec dans le forum AJAX
    Réponses: 0
    Dernier message: 14/10/2011, 17h39
  5. Pagination avec PHP et Mysql
    Par __fabrice dans le forum Flash
    Réponses: 2
    Dernier message: 27/09/2006, 14h17

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