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 requète aléatoire


Sujet :

PHP & Base de données

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Inscrit en
    Novembre 2013
    Messages
    24
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2013
    Messages : 24
    Par défaut Pagination requète aléatoire
    Bonjour a tous ,
    Je travail sur un projet en ce moment (pour m'entrainer , je débute).

    J'ai donc réussi a créer une pagination automatique du résultat d'une requète sql en suivant un tuto sur internet dont 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
    <?php
    try
    {
    $bdd = new PDO('mysql:host=localhost;dbname=dechetterie_npdc' , 'root' , '' ) ;
    }
    catch (Exception $e)
    {
    die('Erreur :' .$e->getMessage());
    }
     
    // --------------- Étape 2 -----------------
    // On écrit les liens vers chacune des pages
    // -----------------------------------------
     
    // On met dans une variable le nombre de messages qu'on veut par page
    $nombreDeMessagesParPage = 4; // Essayez de changer ce nombre pour voir :o)
    // On récupère le nombre total de messages
    $retour = $bdd->query('SELECT COUNT(*) AS nb_messages FROM npdc');
    $donnees = $retour->fetch();
    $totalDesMessages = $donnees['nb_messages'];
    // On calcule le nombre de pages à créer
    $nombreDePages  = ceil($totalDesMessages / $nombreDeMessagesParPage);
    // Puis on fait une boucle pour écrire les liens vers chacune des pages
    echo 'Page : ';
    for ($i = 1 ; $i <= $nombreDePages ; $i++)
    {
        echo '<a href="test3.php?page=' . $i . '">' . $i . '</a> ';
    }
    ?>
     
    </p>
     
    <?php
     
     
    // --------------- Étape 3 ---------------
    // Maintenant, on va afficher les messages
    // ---------------------------------------
     
    if (isset($_GET['page']))
    {
            $page = $_GET['page']; // On récupère le numéro de la page indiqué dans l'adresse (livreor.php?page=4)
    }
    else // La variable n'existe pas, c'est la première fois qu'on charge la page
    {
            $page = 1; // On se met sur la page 1 (par défaut)
    }
     
    // On calcule le numéro du premier message qu'on prend pour le LIMIT de MySQL
    $premierMessageAafficher = ($page - 1) * $nombreDeMessagesParPage;
     
    $reponse = $bdd->query('SELECT * FROM npdc ORDER BY id DESC LIMIT ' . $premierMessageAafficher . ', ' . $nombreDeMessagesParPage);
     
    while ($donnees = $reponse->fetch())
    {
            echo '<p><strong>' . $donnees['adresse'] . '</strong> a écrit :<br />' . $donnees['ville'] . '</p>';
    }
     
    ?>
    Je voudrais maintenant obtenir la meme chose mais avec une requete à tri aléatoir du type :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $reponse = $bdd->query('select * from (select * from npdc ) s order by rand()');
    Je ne sais pas trop comment mis prendre , sur le code actuel , on fait une boucle et a chaque changement de page , on relance la requete en changeant les LIMIT ( enfin si j'ai bien compris);

    Si vous avez une solution( un tuto , une idée de départ??) , j'ai pas mal chercher sur le web mais j'ai pas trouvé se que je voulais.

    En vous remerciant.

  2. #2
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Par défaut
    Le résultat de ta requête va changer à chaque fois, il va donc falloir conserver le résultat aléatoire sorti :

    - faire une fois la requête
    - stocker les résultats dans un tableau dans une session PHP
    - tes boutons suivants/précédents indiquent de la même façon la position souhaitée
    - le LIMIT de la requête est remplacé par un découpage du tableau à la position demandée
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  3. #3
    Membre averti
    Homme Profil pro
    Inscrit en
    Novembre 2013
    Messages
    24
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2013
    Messages : 24
    Par défaut
    OK ca fonctionne , j'ai donc utilisé " session_start() "

    Je remet le code avec les modifications en couleur violet:
    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
    <?php
    session_start();
     
    if (!isset($_SESSION['key'])) {
        $_SESSION['key'] = rand(1, 1000);
    }
    ?>
    
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
     
    
     
    <?php
    try
    			{
    			$bdd = new PDO('mysql:host=localhost;dbname=dechetterie_npdc' , 'root' , '' ) ;
    			}
    			catch (Exception $e)
    			{
    			die('Erreur :' .$e->getMessage());
    			}
    
     
    
     // --------------- Étape 2 -----------------
    // On écrit les liens vers chacune des pages
    // -----------------------------------------
     
    // On met dans une variable le nombre de messages qu'on veut par page
    $nombreDeMessagesParPage = 4; // Essayez de changer ce nombre pour voir :o)
    // On récupère le nombre total de messages
    $retour = $bdd->query('SELECT COUNT(*) AS nb_messages FROM npdc');
    $donnees = $retour->fetch();
    $totalDesMessages = $donnees['nb_messages'];
    // On calcule le nombre de pages à créer
    $nombreDePages  = ceil($totalDesMessages / $nombreDeMessagesParPage);
    // Puis on fait une boucle pour écrire les liens vers chacune des pages
    echo 'Page : ';
    for ($i = 1 ; $i <= $nombreDePages ; $i++)
    {
        echo '<a href="test4.php?page=' . $i . '">' . $i . '</a> ';
    }
    ?>
     
    </p>
     
    <?php
     
     
    // --------------- Étape 3 ---------------
    // Maintenant, on va afficher les messages
    // --------------------------------------- 
     
    if (isset($_GET['page']))
    {
            $page = $_GET['page']; // On récupère le numéro de la page indiqué dans l'adresse (livreor.php?page=4)
    }
    else // La variable n'existe pas, c'est la première fois qu'on charge la page
    {
            $page = 1; // On se met sur la page 1 (par défaut)
    }
     
    // On calcule le numéro du premier message qu'on prend pour le LIMIT de MySQL
    $premierMessageAafficher = ($page - 1) * $nombreDeMessagesParPage;
     
    $reponse = $bdd->query('SELECT * FROM npdc ORDER BY RAND(' . $_SESSION['key'] . ') LIMIT ' . $premierMessageAafficher . ', ' . $nombreDeMessagesParPage);
     
    while ($donnees = $reponse->fetch())
    {
            echo '<p><strong>' . $donnees['adresse'] . '</strong> a écrit :<br />' . $donnees['ville'] . '</p>';
    }
     
    ?>
     
    </body>
    </html>
    Voila ca fonctionne comme je veus , maintenant si vous voyer des erreurs ou d'autres facon de faire n'hésiter pas .
    Merci

  4. #4
    Membre averti
    Homme Profil pro
    Inscrit en
    Novembre 2013
    Messages
    24
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2013
    Messages : 24
    Par défaut pagination de plusieurs requètes sql
    Bonjour a tous ,
    Aujourdui je vaudrais corser un peu mon code d'hier ( pour ce qui ont suivi ).

    Je voudrais faire une pagination des résultats de 3 requètes sql aléatoire ( en faite j'ai dans ma table sql une colonne positions avec comme valeurs soit 1 , 2 ou 3) .

    En gros :
    REQUETE A (position = 1) : résultat sur x nombre de pages
    REQUETE B (position = 2) : résultat sur x nombre de pages a la suite de requète A
    REQUETE C (position = 3) : résultat sur x nombre de pages a la suite de requète B

    Il faudra que je puisse inserer les titres de mes requetes(requete A, requete B, requette C) avant les résultats


    je met mon code d'hier ou la pagination fonctionne parfaitement sur une seul requete aléatoire :

    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
    100
    101
    102
    103
     
     
    <?php
    session_start();
     
    if (!isset($_SESSION['key'])) {
        $_SESSION['key'] = rand(1, 1000);
    }
    if ((isset($_GET['action'])) && ($_GET['action'] == 'logout'))
    	{
    		$_SESSION = array();
    		session_destroy();
    		session_start();
    	}
    ?>
     
     
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
     
    <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr">
       <head>
           <title>Livre d'or</title>
            <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
     
            <style type="text/css">
            form, .pages
            {
                text-align:center;
            }
            </style>
        </head>
     
     
        <p class="pages">
     <p><a href="test4.php?action=logout" title="Déconnexion">Se déconnecter</a></p>
     
     
     
    <?php
    try
    			{
    			$bdd = new PDO('mysql:host=localhost;dbname=dechetterie_npdc' , 'root' , '' ) ;
    			}
    			catch (Exception $e)
    			{
    			die('Erreur :' .$e->getMessage());
    			}
     
     
     
    // --------------- Étape 2 -----------------
    // On écrit les liens vers chacune des pages
    // -----------------------------------------
     
    // On met dans une variable le nombre de messages qu'on veut par page
    $nombreDeMessagesParPage = 4; // Essayez de changer ce nombre pour voir :o)
    // On récupère le nombre total de messages
    $retour = $bdd->query('SELECT COUNT(*) AS nb_messages FROM npdc');
    $donnees = $retour->fetch();
    $totalDesMessages = $donnees['nb_messages'];
    // On calcule le nombre de pages à créer
    $nombreDePages  = ceil($totalDesMessages / $nombreDeMessagesParPage);
    // Puis on fait une boucle pour écrire les liens vers chacune des pages
    echo 'Page : ';
    for ($i = 1 ; $i <= $nombreDePages ; $i++)
    {
        echo '<a href="test4.php?page=' . $i . '">' . $i . '</a> ';
    }
    ?>
     
    </p>
     
    <?php
     
     
    // --------------- Étape 3 ---------------
    // Maintenant, on va afficher les messages
    // --------------------------------------- 
     
    if (isset($_GET['page']))
    {
            $page = $_GET['page']; // On récupère le numéro de la page indiqué dans l'adresse (livreor.php?page=4)
    }
    else // La variable n'existe pas, c'est la première fois qu'on charge la page
    {
            $page = 1; // On se met sur la page 1 (par défaut)
    }
     
    // On calcule le numéro du premier message qu'on prend pour le LIMIT de MySQL
    $premierMessageAafficher = ($page - 1) * $nombreDeMessagesParPage;
     
    $reponse = $bdd->query('SELECT * FROM npdc WHERE POSITION=1 ORDER BY RAND(' . $_SESSION['key'] . ') LIMIT ' . $premierMessageAafficher . ', ' . $nombreDeMessagesParPage);
     
    while ($donnees = $reponse->fetch())
    {
            echo '<p><strong>' . $donnees['adresse'] . '</strong> a écrit :<br />' . $donnees['ville'] . '</p>';
     
    } 
     
    ?>
     
    </body>
    </html>
    Voila j'ai beaucoup chercher sur le net hier après-midi et soir , j'ai pas trouvé ce que je voulais , il y a pas mal d'info pour 1 seul requete mais pas plusieurs , apparament c'est assez complexe .

    Moi je débute , je me lance quelque defis pour apprendre .

    En vous remerciant.

  5. #5
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Par défaut
    Le principe est le même x3 non ?
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  6. #6
    Membre averti
    Homme Profil pro
    Inscrit en
    Novembre 2013
    Messages
    24
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2013
    Messages : 24
    Par défaut
    Bah non si je fais un copier coller x3 , les resultats des autres requete s'affiche sur la page 1 , il recommence par la page 1 , moi je veus que ce soit a la suite ,
    la je regarde pour essayer de tous mettre dans mon fetch() mais je n'arrive pas a le faire avec 3 requeteS séparé .

  7. #7
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Par défaut
    Tu veux
    x lignes de requête A mélangé
    x lignes de requête B mélangé
    x lignes de requête C mélangé

    ou

    x lignes de (requête A + requête B + requête C) mélangé
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  8. #8
    Membre averti
    Homme Profil pro
    Inscrit en
    Novembre 2013
    Messages
    24
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2013
    Messages : 24
    Par défaut
    Je veus :
    x lignes de requête A mélangé
    x lignes de requête B mélangé
    x lignes de requête C mélangé

    avec a quoi correspondent mais requetes , le tous a la suite avec pagination.

    C'est la galère

Discussions similaires

  1. Requête aléatoire et pagination
    Par Nowwis dans le forum Langage
    Réponses: 4
    Dernier message: 11/08/2011, 19h09
  2. Pagination requête complexe
    Par nemo67 dans le forum Développement
    Réponses: 4
    Dernier message: 22/12/2009, 22h21
  3. Résultat requête aléatoire
    Par jmacrez dans le forum SQL
    Réponses: 7
    Dernier message: 03/10/2008, 14h26
  4. Requête aléatoire SQL
    Par calogerogigante dans le forum Requêtes
    Réponses: 2
    Dernier message: 20/05/2008, 10h26
  5. [MySQL] Affichage requête aléatoire paginé
    Par bodysplash007 dans le forum PHP & Base de données
    Réponses: 22
    Dernier message: 22/05/2007, 11h52

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