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

Langage PHP Discussion :

Eviter la répétition d'un tirage aléatoire


Sujet :

Langage PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2012
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2012
    Messages : 9
    Par défaut Eviter la répétition d'un tirage aléatoire
    Je sais afficher avec un ordre aléatoire un texte depuis ma base de données , cependant je n'arrive pas à trouver un moyen d’empêcher la répétition d'un même texte.
    A travers un systeme de session, le visiteur clique sur suivant et les textes défilent aléatoirement sans se répéter.
    Si quelqu'un a une idée je suis preneur :p

    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
    <?php
    session_start();
    $_SESSION['pseudo'];
     
    try
    {
    $pdo_options[PDO::ATTR_ERRMODE] = PDO::ERRMODE_EXCEPTION;
    $bdd = new PDO('mysql:host=mysql51-57.perso;dbname=', '', '', $pdo_options);
     
    $reponse = $bdd->query('SELECT * FROM textesaleatoire ORDER BY rand() LIMIT 1,1');
    while ($donnees = $reponse->fetch())
    {
    <?
     
     
    <table width="100%" border="1" class="arrondiombre">
                    <tr>
                    <td><?php echo $donnees['textes']; ?></td>
                    </tr>
    </table>
     
     
    <?php
    }  
    $reponse->closeCursor();
    }
    catch(Exception $e)
    {
    die('Erreur : '.$e->getMessage());
    }
    ?>

  2. #2
    Membre émérite
    Avatar de amoiraud
    Homme Profil pro
    Développeur Web
    Inscrit en
    Octobre 2006
    Messages
    606
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

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

    Informations forums :
    Inscription : Octobre 2006
    Messages : 606
    Par défaut
    Salut,

    Tes textes ont un ID ?
    Si oui tu peut stocker chaque ID dans un tableau de session, puis dans ta requête tu fait un truc du style :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    $reponse = $bdd->query('SELECT * FROM textesaleatoire WHERE id NOT IN (' . implode(',', $_SESSION['ids_deja_tires'] . ') ORDER BY rand() LIMIT 1,1');

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2012
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2012
    Messages : 9
    Par défaut
    Ah merci! Je comprends la manière de faire
    Les textes ont des ID cependant je vois absolument pas comment on peut stocker des info depuis une bdd dans un tableau de session.

    J'imagine que je suis pas du tout sur la bonne voie...
    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
     
    <?php
    session_start();
    try
    {
        $pdo_options[PDO::ATTR_ERRMODE] = PDO::ERRMODE_EXCEPTION;
    	$bdd = new PDO('mysql:host=mysql51-57.perso;dbname=', '', '', $pdo_options);
        $reponse = $bdd->query('SELECT * FROM textesaleatoire');
        while ($donnees = $reponse->fetch())
     
    	$_SESSION['id'] = $donnees['id'];
    	$_SESSION['donnees'] = $donnees['texte'];
    ?>
    	<?php
        }
        $reponse->closeCursor(); 
    }
    catch(Exception $e)
    {
        die('Erreur : '.$e->getMessage());
    }
    ?>

  4. #4
    Membre émérite
    Avatar de amoiraud
    Homme Profil pro
    Développeur Web
    Inscrit en
    Octobre 2006
    Messages
    606
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

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

    Informations forums :
    Inscription : Octobre 2006
    Messages : 606
    Par défaut
    Essaye comme ca :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
        if (!isset($_SESSION['id'])) {
            $_SESSION['id'] = array();
        }
        while ($donnees = $reponse->fetch()) {
    	$_SESSION['id'][] = $donnees['id'];
        }
        $reponse->closeCursor();

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2012
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2012
    Messages : 9
    Par défaut
    Bonsoir, désolé de sollicité ton aide à nouveau,
    Aurais tu une idée de ce qui ne vas pas dans le code?
    Les id s'affichent mais finissent par retomber, j'ai l'impression d'avoir tout essayé.

    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
     
    <?php
    session_start();
     
    try
    {
        $pdo_options[PDO::ATTR_ERRMODE] = PDO::ERRMODE_EXCEPTION;
     $bdd = new PDO('mysql:host=mysql51-57.perso;dbname=', '', '', $pdo_options);
     $reponse = $bdd->query('SELECT *, id FROM textealeatoire WHERE id != "'.$_SESSION['id'].'" ORDER BY rand() LIMIT 1,1');
     
    if (isset($_SESSION['id'])) {
            $_SESSION['id'] = array();
        }
        while ($donnees = $reponse->fetch()) {
     $_SESSION['id'] = $donnees['id'];
     echo $donnees['id'];
        }
        $reponse->closeCursor();
     }
    catch(Exception $e)
    {
    die('Erreur : '.$e->getMessage());
    }
     ?>

  6. #6
    Membre émérite
    Avatar de amoiraud
    Homme Profil pro
    Développeur Web
    Inscrit en
    Octobre 2006
    Messages
    606
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

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

    Informations forums :
    Inscription : Octobre 2006
    Messages : 606
    Par défaut
    La dans ton code tu affecte un ID a $_SESSION['id'], donc il te stock à chaque fois le dernier ID tiré, pour les stocker dans ton tableau de session il faut faire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    $_SESSION['id'][] = $donnees['id'];

Discussions similaires

  1. Pipé un tirage aléatoire
    Par uloaccess dans le forum Access
    Réponses: 4
    Dernier message: 03/07/2006, 17h45
  2. Tirage Aléatoire unique ..
    Par FoX_McClouD dans le forum Requêtes
    Réponses: 2
    Dernier message: 13/06/2006, 14h48
  3. tirage aléatoire
    Par uloaccess dans le forum Access
    Réponses: 10
    Dernier message: 22/02/2006, 19h02
  4. Tirage aléatoire dans une base donnée
    Par leloup84 dans le forum SQL Procédural
    Réponses: 4
    Dernier message: 30/01/2006, 17h13
  5. Eviter deux nombres identiques dans un tirage aléatoire
    Par moon tiger dans le forum Pascal
    Réponses: 5
    Dernier message: 25/11/2002, 10h57

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