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

  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";

  7. #7
    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
    Ça d'accord ^^, mais en fait je comprends pourquoi rien ne s'affichait, ma boucle "for" se fait mais avec 0 donc aucun affichage d'où ma pagination inexistante....


    Donc c'est là que je dois utiliser tes 2 requêtes, j'ai juste ? Par contre je ne comprends pas comment les mettre avec ma boucle :

    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
     
    $sq1 = "SELECT SQL_CALC_FOUND_ROWS * from mods WHERE nom = '$recherche' limit ".(($cPage-1)*$perPage).",$perPage";
    $sq2 = "SELECT FOUND_ROWS();"
    //$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>";
                    }
    J'ai
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Parse error: syntax error, unexpected T_VARIABLE in recherche.php on line 86

  8. #8
    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
    je vois pas où tu fais un:
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    $req = $bdd->query($sq2)

    donc tu récupère jamais le nombre de pages

  9. #9
    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
    True.

    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
     
     
    $sqlnbMod = $bdd->prepare("SELECT * from mods WHERE nom ='$recherche' ORDER BY id");
    $sqlnbMod->execute();
    $rows = $sqlnbMod->fetchAll();
    $nbMod = count($rows);
    $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?recherche=".$_GET["recherche"]."&p=$i>$i</a></li>";
    }
    }
    echo '</ul>';
     
        ?>
    Ca fonctionne bien ici ouf >< j'ai changé mon POST en GET, et maintenant faut que je gère le trop grand nombre de page, as tu une petite idée pour m'aiguiller stp ?

    Merci ^^

  10. #10
    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
    le plus simple c'est tout en GET pour la propagation entre pages...

    oublie pas qu'après la première sélection tu ne fais potentiellement que jouer sur des liens, y a plus rien en POST

    pour tes GET fais plutôt un truc du genre:
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    if(isset($_GET['truc']))
      $val=($_GET['truc']<$vmax?max($_GET['truc'],0):$vmax);
    c'est plus propre car tu teste si la valeur existe avant de voir les contraintes dessus

    le déroulé serait:
    • tu exécutes ta première pour avoir tes tuples
    • tu exécutes la 2ème pour avoir le nombre de tuples
    • tu calcules le nombre de pages
    • tu récupères ta valeur de page en GET
    • tu affiches tes tuples
    • tu affiches la listes des pages


  11. #11
    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
    Voilà j'ai tout mis en GET.

    Pour mes GET, ton code n'est valable que pour le numéro de page ?

    Car pour l'instant le truc pas sécurisé en GET que j'ai c'est ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    $recherche = $_GET['q'];
    $option = $_GET['op'];
    D'ailleurs comment le sécuriser pour mon code ? (vu qu'il a plein de manière selon ce qu'on en fait j'ai vu)

    Pour la page j'ai toujours :
    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;
    }
    Que je devrais transformer de cette manière si je suis ton code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    if(isset($_GET['p']))
      $val=($_GET['p']<$vmax?max($_GET['p'],0):$vmax);
    }
    else
    {
    $cPage=1;
    }
    Avec vmax qui correspond dans mon code à nbPage ?

    Merci

  12. #12
    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
    oui pour $vmax

    y a pas de façon unique et ultime de faire la sécurisation quand tu ne récupères pas de valeur numérique...

    l'idée c'est d'utiliser les fonctions d'échappement de php qui vont déjà bien faire les choses (sous réserve que tout ce que tu rentre dans ta bd passes par un traitement identique)...

    une autre façon de faire aussi pour le texte c'est d'utiliser des regexp mais seulement quand le modèle du texte le permet (adresse mail, nom, prénom, etc...)

  13. #13
    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
    Ok pour vmax c'est fait ^^

    Fonctions d'échappement ? Kezako => ça uniquement addslashes( $variable) ?

    Dans mon traitement oui tout est de la même manière, j'ai une partie "option" qui sélectionne l'attribut qui ensuite sera interrogé par l'entrée de l'utilisateur

  14. #14
    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
    oui mais lis bien la doc sur le réglages du serveur pour savoir si c'est fait automatiquement ou pas...

    tu as aussi des fonctions qui élimine les mots clé de certains langages...

  15. #15
    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
    Je crois que chez OVH c'est automatisé ^^.


    En tout cas je te remercie beaucoup de m'avoir aidé, je pense avoir fait le tour et réussir à terminer le code (même si tout n'est pas encore parfait, je pense que la pagination est faite)


    Encore merci

  16. #16
    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


    oui mais tu as un bout de code qui teste ça dans la doc php vaut mieux passer par lui comme ça tu es sur

  17. #17
    Membre confirmé
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Septembre 2008
    Messages
    171
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Septembre 2008
    Messages : 171
    Par défaut
    Bonjour,

    pour info j'ai fais comme ceci :

    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
     
    $messagesParPage=5; //Nous allons afficher 5 offres d'emploi par page.
    	if(!isset($_SESSION['id_droit']) || $_SESSION['id_droit'] != 3){
    			$retour_total=mysql_query('SELECT COUNT(*) AS total FROM offreemploi'); //Nous récupérons le contenu de la requête dans $retour_total
    	}else{
    			$retour_total=mysql_query('SELECT COUNT(*) AS total FROM offreemploi WHERE agence ='.$_SESSION['id_utilisateurs'].''); //Nous récupérons le contenu de la requête dans $retour_total											
    	}
    	$donnees_total=mysql_fetch_assoc($retour_total); //On range retour sous la forme d'un tableau.
    	$total=$donnees_total['total']; //On récupère le total pour le placer dans la variable $total.
     
    	//Nous allons maintenant compter le nombre de pages.
    	$nombreDePages=ceil($total/$messagesParPage);
     
    	if(isset($_GET['page'])){ // Si la variable $_GET['page'] existe...
    	     $pageActuelle=intval($_GET['page']);
     
    	     if($pageActuelle>$nombreDePages){ // Si la valeur de $pageActuelle (le numéro de la page) est plus grande que $nombreDePages...
    	          $pageActuelle=$nombreDePages;
    	     }
    	}
    	else{
    				$pageActuelle=1; // La page actuelle est la n°1    
    	}
    	$premiereEntree=($pageActuelle-1)*$messagesParPage; // On calcul la première entrée à lire
     
     
     
    //affichage de la pagination
    if($nombreDePages != '0'){
    			echo '<p align="center">Page : '; //Pour l'affichage, on centre la liste des pages
    			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="offreEmploi.php?page='.$i.'">'.$i.'</a> ';
    			     }
    			}
    			echo '</p><br>';
                                //fin d'affichage de la pagination
    }
    bonne journée

  18. #18
    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
    Bonjour et merci de ton ajout ^^,

    On m'a grondé pour du mysql_query et je vois que je ne suis pas le seul à l'utiliser encore ^^ (enfin plus maintenant).

    Y'a juste cette ligne que je comprends pas trop, mais qui doit correspondre à tes choses de ton côté :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if(!isset($_SESSION['id_droit']) || $_SESSION['id_droit'] != 3){
    Je t'ai pris ton petit bout de code concernant le cas du 1 seule page à afficher car je n'ai pas pensé à le mettre ^^.

    Merci

  19. #19
    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
    il passe par les sessions php pour garder des informations entre pages

    ici il teste en gros quel type d'identification a été fait par l'utilisateur avant de lui laisser accéder plus ou moins de fonctionnalités...

    je le gère aussi dans mon code si tu lis bien...

    j'utilise juste une écriture un peu plus avancée (inline avec l'opérateur ?) comme ça tu voit différente façon de l'écrire...

    attention à la cohérence de tes index de page en fonction de de la formule choisie, sous peine d'avoir un décalage...

+ 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