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 :

Boucle while


Sujet :

Langage PHP

  1. #1
    Membre du Club
    Inscrit en
    Juin 2010
    Messages
    112
    Détails du profil
    Informations forums :
    Inscription : Juin 2010
    Messages : 112
    Points : 60
    Points
    60
    Par défaut Boucle while
    Salut tout le monde,
    J’ai divisé mon forum en deux grâce aux cookies.
    Si je suis sur le forum des programmes je devrais voir les forums de mangas en bas et vice-versa. Pour ce faire j'ai programmé le code suivant :
    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
    if($_COOKIE ["SiteID"] == "1"){
    $search =mysql_query("SELECT CAT_ID FROM FORUM_CATEGORY WHERE SITE_ID =2");
    $title =":programmes";
     
    }
    else{
    $search =mysql_query("SELECT CAT_ID FROM FORUM_CATEGORY WHERE SITE_ID =1");
    $title =":mangas";
     
    }
    $num = mysql_num_rows($search);
    $x =0;
    while ($x < $num ){
    $rs = Mysql_fetch_array($search);
     
     
    $cat =$rs['CAT_ID'];
    $get= mysql_fetch_array(mysql_query("SELECT F_SUBJECT,FORUM_ID FROM FORUM_FORUM WHERE CAT_ID ='".intval($cat)."'"));
    $forum_name= $get['F_SUBJECT'];
    $f_id= $get['FORUM_ID'];
    ++$x;}
     
     
    echo'<table align ="center">
    <tr>
    <td align ="center" colspan="10">
    '.$title.'
    </td>
    </tr>
    </table>
    <table align ="right">
    <tr>
    <td align ="right">
    <a href ="index.php?mode=f&f='.$f_id.'"><font color ="#0404B4">'.$forum_name.'</font><nobr></a>
    </td>
    </tr>
    </table>
    ';
    Mais le problème c'est qu'il ne s'affiche qu'un seul forum
    <NB>: Chaque forum suit une catégorie et les catégories sont séparées par les cookies </NB>
    Alors j'ai constaté que le While ne marche pas, et j'ignore pourquoi.

  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
    Points : 44 155
    Points
    44 155
    Par défaut
    Tu dois simplifier ton code comme ç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
    if($_COOKIE["SiteID"] == "1"){
        $site_id = 2;
        $title =":programmes";
     }
    else{
        $site_id = 2;
        $title =":mangas";
    }
     
    $row= mysql_fetch_array(mysql_query("SELECT F_SUBJECT,FORUM_ID FROM FORUM_FORUM 
    JOIN FORUM_CATEGORY USING (CAT_ID)
    WHERE CAT_ID ='".intval($cat)."' AND SITE_ID = " . $site_id;
     
    $forum_name= $row['F_SUBJECT'];
    $f_id= $row['FORUM_ID'];
    Si ça ne fonctionne pas, affiche et vérifie la requête dans phpMyAdmin.
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  3. #3
    Modérateur

    Avatar de MaitrePylos
    Homme Profil pro
    DBA
    Inscrit en
    Juin 2005
    Messages
    5 496
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : Belgique

    Informations professionnelles :
    Activité : DBA
    Secteur : Service public

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 496
    Points : 12 596
    Points
    12 596
    Par défaut
    Si tu ne mets pas ton code HTML dans ton while, alors seule la dernière boucle sera prise en compte.

    Pense également à séparer ton code PHP du code HTML. Voici un petit nettoyage, mais qui n'est surement pas exempt d'erreur.

    Regarde surtout comment je fais la boucle "while"

    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
     
     
            if ($_COOKIE ["SiteID"] == "1") {
                $search = mysql_query("SELECT CAT_ID FROM FORUM_CATEGORY WHERE SITE_ID =2");
                $title = ":programmes";
            } else {
                $search = mysql_query("SELECT CAT_ID FROM FORUM_CATEGORY WHERE SITE_ID =1");
                $title = ":mangas";
            }
            // $num = mysql_num_rows($search);
            // $x = 0;
    ?>
            <table align ="center">                
                <tr>                
                    <td align ="center" colspan="10">                
                <?php echo $title ?> 
            </td>        
        </tr>        
    </table>         
    <?php
                while ($row = mysql_fetch_array($search)) {
     
                    $cat = $row['CAT_ID'];
                    $result = mysql_query("SELECT F_SUBJECT,FORUM_ID FROM FORUM_FORUM WHERE CAT_ID ='" . intval($cat) . "'");
                    $get = mysql_fetch_array($result);
                    $forum_name = $get['F_SUBJECT'];
                    $f_id = $get['FORUM_ID'];
                    ?>
                <table align ="right">
                <tr>
                <td align ="right">
                <a href ="index.php?mode=f&f=<?php echo $f_id  ?>"><font color ="#0404B4"><?php echo $forum_name ?></font><nobr></a>
                </td>
                </tr>
                </table>
     
                <?php    
                }
     
    ?>

  4. #4
    Membre du Club
    Inscrit en
    Juin 2010
    Messages
    112
    Détails du profil
    Informations forums :
    Inscription : Juin 2010
    Messages : 112
    Points : 60
    Points
    60
    Par défaut
    Sabotage,
    tes requêtes je devrais les mettre dans la boucle while?

  5. #5
    Membre du Club
    Inscrit en
    Juin 2010
    Messages
    112
    Détails du profil
    Informations forums :
    Inscription : Juin 2010
    Messages : 112
    Points : 60
    Points
    60
    Par défaut
    MaitrePylos,

    Bonne nouvelle, il n'y a pas d'erreur dans ton code à part deux ; apres echo.

    La mauvaise nouvelle c'est que je ne reçois que 3 enregistrement alors qu'il y en a plus!!

  6. #6
    Membre du Club
    Inscrit en
    Juin 2010
    Messages
    112
    Détails du profil
    Informations forums :
    Inscription : Juin 2010
    Messages : 112
    Points : 60
    Points
    60
    Par défaut
    Les amis, euh non ça n'a pas marché. J'ai essayé de combiner les solutions mais ça ne marche pas. Alors mon dernier essai était le suivant:
    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
    if($_COOKIE ["SiteID"] == "1"){
    $search =mysql_query("SELECT CAT_ID FROM FORUM_CATEGORY WHERE SITE_ID =2");
    $title ="المنتديات العامة:";
     
    }
    else{
    $search =mysql_query("SELECT CAT_ID FROM FORUM_CATEGORY WHERE SITE_ID =1");
    $title ="منتديات المانجا:";
    }
    echo'<table align ="center" width ="90%">
    <tr>
    <td align ="center" colspan="10" >
    '.$title.'
    </td>
    </tr>
    </table>';
     
    $rs  = mysql_fetch_array($search);
    $cat = $rs['CAT_ID'];
    $sql = mysql_query("SELECT F_SUBJECT,FORUM_ID FROM FORUM_FORUM WHERE CAT_ID ='".intval($cat)."'");
    $num = mysql_num_rows($sql);
     
     
    while ($get= mysql_fetch_array($sql)){
    $forum_name= $get['F_SUBJECT'];
    $f_id= $get['FORUM_ID'];
    echo'
    <table>
    <tr>
    <td align ="right" width ="90%">
    <a href ="index.php?mode=f&f='.$f_id.'"><font color ="#0404B4">'.$forum_name.'<nobr></font><nobr></a>
    </td>
    </tr>
    </table>
    ';
    }
    Ça marche mais (toujours des mais) il ne m'affiche que le résultat que d’une seule catégorie.
    Ça veut dire qu'il ne retient qu'une seule valeur de CAT_ID.
    Alors qu'il doit retenir toutes les valeurs de CAT_ID selon le WHERE précis
    D'ailleurs, c'est ce que fait le mysql_fetch_array, non?

Discussions similaires

  1. boucle while trop lente
    Par atouze dans le forum Access
    Réponses: 17
    Dernier message: 15/06/2005, 16h35
  2. Boucle while & read
    Par gibet_b dans le forum Linux
    Réponses: 4
    Dernier message: 29/04/2005, 15h38
  3. boucle while et post incrémentation
    Par tut dans le forum C++
    Réponses: 7
    Dernier message: 10/12/2004, 17h24
  4. [MFC] Dialog dans une boucle while
    Par oxor3 dans le forum MFC
    Réponses: 5
    Dernier message: 23/04/2004, 22h51
  5. [débutant]Documentation? boucle "while"? Session?
    Par o151181 dans le forum Servlets/JSP
    Réponses: 2
    Dernier message: 19/01/2004, 15h20

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