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 :

Variable if dans boucle while


Sujet :

Langage PHP

  1. #1
    Membre à l'essai
    Femme Profil pro
    Étudiant
    Inscrit en
    Mai 2014
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 34
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2014
    Messages : 16
    Points : 11
    Points
    11
    Par défaut Variable if dans boucle while
    Bonjour,

    j'ai un problème assez simple mais qui me prend la tête : comment mettre en place la condition "Si aucun membre en ligne, on affiche 0" dans mon cas?

    Actuellement, le reste fonctionne correctement : si des membres sont en ligne ça affiche bien leur pseudo.

    Merci de votre aide..!

    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
    //Décompte des membres
    $texte_a_afficher = "<br />Online members : ";
    $time_max = time() - (60 * 5);
    $query=$db->prepare('SELECT membre_id, membre_pseudo
    FROM forum_whosonline
    LEFT JOIN forum_membres ON online_id = membre_id
    WHERE online_time > :timemax AND online_id <> 0');
    $query->bindValue(':timemax',$time_max, PDO:PARAM_INT);
    $query->execute();
    $count_membres=0;
     
     
    while ($data = $query->fetch())
    {
        $count_membres ++;
        if (empty($data['online_id'])) echo $texte_a_afficher .= '0';
        else $texte_a_afficher .= '<a href="./voirprofil.php?m='.$data['membre_id'].'&amp;action=consulter">
        '.stripslashes(htmlspecialchars($data['membre_pseudo'])).'</a> ,';
    }

  2. #2
    Expert éminent sénior
    Avatar de rawsrc
    Homme Profil pro
    Dev indep
    Inscrit en
    Mars 2004
    Messages
    6 142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Dev indep

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 142
    Points : 16 545
    Points
    16 545
    Billets dans le blog
    12
    Par défaut
    Salut,

    Réfléchis 30 secondes...
    Si ton SELECT ne rapatrie aucune donnée : ta boucle de lecture while ne fera même pas un tour car $query->fetch() renverra false d'entrée.

  3. #3
    Membre à l'essai
    Femme Profil pro
    Étudiant
    Inscrit en
    Mai 2014
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 34
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2014
    Messages : 16
    Points : 11
    Points
    11
    Par défaut
    Merci beaucoup !

    voici la solution pour ceux que ça pourrait aider..

    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
    //Décompte des membres
    $texte_a_afficher = "<br /><img src='./images/member.png' class='icon_footer' alt='Online Members' />Online members : ";
    $time_max = time() - (60 * 5);
    $query=$db->prepare('SELECT membre_id, membre_pseudo 
    FROM forum_whosonline
    LEFT JOIN forum_membres ON online_id = membre_id
    WHERE online_time > :timemax AND online_id <> 0');
    $query->bindValue(':timemax',$time_max, PDO::PARAM_INT);
    $query->execute();
    $count_membres=0;
     
     
    if ($data = $query->fetch())
    {
        $count_membres ++;
         $texte_a_afficher .= '<a href="./voirprofil.php?m='.$data['membre_id'].'&amp;action=consulter">
        '.stripslashes(htmlspecialchars($data['membre_pseudo'])).'</a> ,';
    }
    else
    {
        $texte_a_afficher .= '0,';
    }

  4. #4
    Expert éminent sénior
    Avatar de rawsrc
    Homme Profil pro
    Dev indep
    Inscrit en
    Mars 2004
    Messages
    6 142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Dev indep

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 142
    Points : 16 545
    Points
    16 545
    Billets dans le blog
    12
    Par défaut
    Là avec ta soluce, tu considères que le SELECT n'est censé rapatrier qu'une seul et unique enregistrement ou rien. T'es sûr de ça ?

  5. #5
    Membre à l'essai
    Femme Profil pro
    Étudiant
    Inscrit en
    Mai 2014
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 34
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2014
    Messages : 16
    Points : 11
    Points
    11
    Par défaut
    Hum.. effectivement je voudrais rapatrier plusieurs enregistrements, de manière à afficher maximum 5 membres en ligne.

    je ne peux meme pas tester car je suis en développement en local donc impossible d'avoir un autre membre que moi-même connecté au même moment.

    A ton avis si je rajoute DESC LIMIT ça suffit?

    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
    //Décompte des membres
    $texte_a_afficher = "<br /><img src='./images/member.png' class='icon_footer' alt='Online Members' />Online members : ";
    $time_max = time() - (60 * 5);
    $query=$db->prepare('SELECT membre_id, membre_pseudo 
    FROM forum_whosonline DESC LIMIT 0, 5
    LEFT JOIN forum_membres ON online_id = membre_id
    WHERE online_time > :timemax AND online_id <> 0');
    $query->bindValue(':timemax',$time_max, PDO::PARAM_INT);
    $query->execute();
    $count_membres=0;
     
     
    if ($data = $query->fetch())
    {
        $count_membres ++;
         $texte_a_afficher .= '<a href="./voirprofil.php?m='.$data['membre_id'].'&amp;action=consulter">
        '.stripslashes(htmlspecialchars($data['membre_pseudo'])).'</a> ,';
    }
    else
    {
        $texte_a_afficher .= '0,';
    } 
     
    $texte_a_afficher = substr($texte_a_afficher, 0, -1);
    $count_online = $count_visiteurs + $count_membres;
    echo '<ul class="ul_forum"><li class="footer_forum"><img src="./images/connected_members.png" class="icon_footer" alt="Messages" />'.$count_online.' people currently online ('.$count_membres.' members and '.$count_visiteurs.' visitors)</li>';
    echo '<li class="footer_forum">'.$texte_a_afficher.'</li>';
    $query->CloseCursor();

  6. #6
    Expert éminent sénior
    Avatar de rawsrc
    Homme Profil pro
    Dev indep
    Inscrit en
    Mars 2004
    Messages
    6 142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Dev indep

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 142
    Points : 16 545
    Points
    16 545
    Billets dans le blog
    12
    Par défaut
    Quelque chose dans ce genre plutôt :
    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
    // Décompte des membres
    $time_max = time() - (60 * 5);
     
    $sql = <<<'sql'
    SELECT
        membre_id,
        membre_pseudo
    FROM
        forum_whosonline
        LEFT JOIN forum_membres ON online_id = membre_id
    WHERE
        online_time > :timemax
        AND online_id <> 0
    ORDER BY
        online_time DESC
    LIMIT
        0, 5
    sql;
     
    $stmt = $db->prepare($sql);
    $stmt->bindValue(':timemax', $time_max, PDO::PARAM_INT);
    $stmt->execute();
     
    $members = array();
    $nb      = 0;
     
    while ($row = $stmt->fetch())
    {
        $members[] = '<a href="./voirprofil.php?m='.$row['membre_id'].'&amp;action=consulter">'.stripslashes(htmlspecialchars($row['membre_pseudo'])).'</a>';
        ++$nb;
    }
     
    $html = (empty($members)) ? '0' : implode(', ', $members);
     
    echo <<<html
    <ul class="ul_forum">
        <li class="footer_forum"><img src="./images/connected_members.png" class="icon_footer" alt="Messages" />{$count_online} people currently online ({$nb} members and {$count_visiteurs} visitors)</li>
        <li class="footer_forum"><br /><img src="./images/member.png" class="icon_footer" alt="Online Members" />Online members : {$html}</li>
    html;
    EDIT : correction du rendu : ajout du comptage des membres (le nombre des connectés je ne sais pas comment tu le détermine)

  7. #7
    Membre à l'essai
    Femme Profil pro
    Étudiant
    Inscrit en
    Mai 2014
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 34
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2014
    Messages : 16
    Points : 11
    Points
    11
    Par défaut
    Merci! je ne m'y connais encore assez pour comprendre ta syntaxe, je vais essayer de déchiffrer ça. En tout cas ça a l'air de fonctionner, à voir quand ce sera en prod et que je pourrai tester avec plusieurs personnes en ligne en meme temps.

    Voici comment je compte le nombre de visiteurs en ligne :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    //Décompte des visiteurs
    $count_visiteurs=$db->query('SELECT COUNT(*) AS nbr_visiteurs FROM forum_whosonline WHERE online_id = 0')->fetchColumn();
    $query->CloseCursor();

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

Discussions similaires

  1. Problème de bouton stop dans boucle while
    Par Simon et ulrich dans le forum LabVIEW
    Réponses: 4
    Dernier message: 04/08/2011, 10h59
  2. [PHP-JS] GET et variable $i dans un While
    Par dembroski dans le forum Langage
    Réponses: 3
    Dernier message: 29/08/2007, 02h45
  3. Réponses: 3
    Dernier message: 17/08/2007, 13h47
  4. Récupérer une variable exécuter dans un while
    Par Blo0d4x3 dans le forum Shell et commandes GNU
    Réponses: 6
    Dernier message: 04/06/2007, 22h27
  5. Requete SQL dans boucle while
    Par vince_grenoblois dans le forum MS SQL Server
    Réponses: 18
    Dernier message: 04/08/2006, 20h41

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