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 :

[Tableaux] Boucle while + passer un tour


Sujet :

Langage PHP

  1. #1
    Membre du Club
    Inscrit en
    Avril 2006
    Messages
    101
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 101
    Points : 56
    Points
    56
    Par défaut [Tableaux] Boucle while + passer un tour
    Salut !
    Voila mon problème : J'ai fait un Script d'edition de Tutorial.
    Pour les categories je les ai mise dans un <select> pourqu'on puisse les choisir aisement.
    Alors de la BDD je vois de quel categorie fait parti le tutorial et je l'affiche premier dans mon <select> avec <option select="selected">.
    Maintenant p-e on a fait une erreur et il faudra modifier cette categorié via le choix quis e trouve dans ce select. Pour afficher toutes les autres categories qui existent je vais faire appel a une autre table et les reafficher. Seulement évidemment il y a ura toujorus 2 fois la même afficher un moment dans la liste

    Mon code resemble a ca :

    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
     
     
    $cat2 =  // Categirué récupérée
     
     
    $sql2 = "SELECT * FROM cat2tuto";
    $req2 = mysql_query($sql2);
    $cat2 = '<select name="cat2" class="formstyle1">
    <option selected="selected">'.$cat2.'</option>';
    while ($donnees2 = mysql_fetch_array($req2))
    {
     
    $cat2 .= '<option>'.$donnees2["cat2"].'</option>';
    }
    $cat2 .= '</select>';

    Ce qu'il faudrai que je fasse c'est include un if et si $cat2 == $donnees2["cat2"] que la boucle passe un tour. Mais je ne sais pas comment on fait cela ?

  2. #2
    Membre expert Avatar de Amara
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    2 688
    Détails du profil
    Informations personnelles :
    Localisation : France, Sarthe (Pays de la Loire)

    Informations forums :
    Inscription : Juillet 2004
    Messages : 2 688
    Points : 3 115
    Points
    3 115
    Par défaut
    J'ai pas compris grand chose au message mais je tente ma chance...

    En mettant ça comme requête :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $sql2 = "SELECT DISTINCT(cat2) FROM cat2tuto";
    Mais sinon je vois pas où est le problème, pour "sauter" un tour dans ton while il suffit de rajouter un if classique

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    while ($donnees2 = mysql_fetch_array($req2))
    {
    if(condition pour afficher les données)
          $cat2 .= '<option>'.$donnees2["cat2"].'</option>';
    }
    Pas de questions techniques par MP, le forum est là pour ça et est plus efficace.

    Orthographe : une connexion (avec un x), un langage (sans u), une requête (un seul t), 'une quote' (avec qu), une syntaxe (sans h)

  3. #3
    Membre du Club
    Inscrit en
    Avril 2006
    Messages
    101
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 101
    Points : 56
    Points
    56
    Par défaut
    Salut, merci pour ta réponse.
    Le Problème c'est que je dois au tout debut du <select> faire un <option select="selected">LA CATEGORIE</option>
    En suite je rentre dans ma boucle pour afficher tout ceux qui se trouvent dans une table SAUF LA CATEGORIE.
    C'est la le problème Avec DISTINCT ca marchera pas car toutes les catégories sont différents dans la table mais il y en a une qui est égale à LA CATEGORIE.
    Merci pour ton aide

  4. #4
    Membre expert Avatar de Amara
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    2 688
    Détails du profil
    Informations personnelles :
    Localisation : France, Sarthe (Pays de la Loire)

    Informations forums :
    Inscription : Juillet 2004
    Messages : 2 688
    Points : 3 115
    Points
    3 115
    Par défaut
    Ok, si tu connais déjà la catégorie à ne pas réafficher il suffit d'ajouter une condition comme je te l'ai montré dans la deuxième partie de mon précédent post...

    Sinon la solution plus classiquement utilisée consiste à construire ton SELECT avec toutes les catégories, et juste pour la catégorie adéquate tu ajoutes SELECTED="selected".
    Pas de questions techniques par MP, le forum est là pour ça et est plus efficace.

    Orthographe : une connexion (avec un x), un langage (sans u), une requête (un seul t), 'une quote' (avec qu), une syntaxe (sans h)

  5. #5
    Rédacteur

    Homme Profil pro
    Développeur Web
    Inscrit en
    Juillet 2003
    Messages
    695
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Juillet 2003
    Messages : 695
    Points : 1 071
    Points
    1 071
    Par défaut
    si, dans ta boucle, ta ligne correspond à ta catégorie, continue
    http://fr2.php.net/continue

    c'est une technique que j'aime bien
    Articles sur developpez.com
    - Gestion des exceptions avec PHP5
    - Chiffrement et hash en PHP contre l'attaque Man in the middle
    - Aedituus - Espace membre sécurisé en PHP5

  6. #6
    Membre du Club
    Inscrit en
    Avril 2006
    Messages
    101
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 101
    Points : 56
    Points
    56
    Par défaut
    Pour le continue
    J'ai fait ainsi :

    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
     
     
    $cat2 = $donnees["cat2"];
    $cat2o = $cat2;
    $sql2 = "SELECT * FROM  cat2tuto";
    $req2 = mysql_query($sql2);
    $cat2 = '<select name="cat2" class="formstyle1">
    <option selected="selected">'.$cat2.'</option>';
    while ($donnees2 = mysql_fetch_array($req2))
    {
    if ( $donnees["cat2"] == $cat2o)
    {
    continue;
    }
    $cat2 .= '<option>'.$donnees2["cat2"].'</option>';
    }
     
    $cat2 .= '</select>';


    Mais le Problème maintenant cela ne m'affiche plus qu'une catégorie La categorie du départ



    Ok, si tu connais déjà la catégorie à ne pas réafficher il suffit d'ajouter une condition comme je te l'ai montré dans la deuxième partie de mon précédent post...

    Sinon la solution plus classiquement utilisée consiste à construire ton SELECT avec toutes les catégories, et juste pour la catégorie adéquate tu ajoutes SELECTED="selected".
    Peux tu me donner un bout de code ? Je comprend bien l'idée mais je ne vois pas comment je peux mettre en place cela :S

  7. #7
    Membre expert Avatar de Amara
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    2 688
    Détails du profil
    Informations personnelles :
    Localisation : France, Sarthe (Pays de la Loire)

    Informations forums :
    Inscription : Juillet 2004
    Messages : 2 688
    Points : 3 115
    Points
    3 115
    Par défaut
    Citation Envoyé par wamania
    si, dans ta boucle, ta ligne correspond à ta catégorie, continue
    http://fr2.php.net/continue

    c'est une technique que j'aime bien
    Perso je vois pas l'intérêt autant faire le traitement directement dans le if.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    if(condition de traitement)
       traitement;
    avec un continue ça donne

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    if(condition de non-traitement)
       continue;
    traitement;
    La première solution me semble plus propre dans le cas précis...
    Pas de questions techniques par MP, le forum est là pour ça et est plus efficace.

    Orthographe : une connexion (avec un x), un langage (sans u), une requête (un seul t), 'une quote' (avec qu), une syntaxe (sans h)

  8. #8
    Membre expert Avatar de Amara
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    2 688
    Détails du profil
    Informations personnelles :
    Localisation : France, Sarthe (Pays de la Loire)

    Informations forums :
    Inscription : Juillet 2004
    Messages : 2 688
    Points : 3 115
    Points
    3 115
    Par défaut
    Si $categorie contient la catégorie par défaut ça fait un truc comme ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    $sql2 = "SELECT * FROM cat2tuto";
    $req2 = mysql_query($sql2);
    $cat2 = '<select name="cat2" class="formstyle1">
    while ($donnees2 = mysql_fetch_array($req2))
    {
    $cat2 .= '<option';
    if($donnees2["cat2"] == $categorie)
      $cat2.= ' selected="selected"';
    $cat2 .= '>'.$donnees2["cat2"].'</option>';
    }
    $cat2 .= '</select>';
    Une autre chose bizarre tu ne donnes pas d'attributs VALUE à tes SELECT donc je vois pas comment tu vas récupérer la sélection...
    Et pourquoi tu mets tout ton code dans $cat2 au lieu de l'afficher directement avec echo ?
    Pas de questions techniques par MP, le forum est là pour ça et est plus efficace.

    Orthographe : une connexion (avec un x), un langage (sans u), une requête (un seul t), 'une quote' (avec qu), une syntaxe (sans h)

  9. #9
    Membre du Club
    Inscrit en
    Avril 2006
    Messages
    101
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 101
    Points : 56
    Points
    56
    Par défaut
    Bingo ca marche !!!!
    Maintenant je vais analyser ton code
    Merci beaucoup pour ton aide !!!

  10. #10
    Membre expert Avatar de Amara
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    2 688
    Détails du profil
    Informations personnelles :
    Localisation : France, Sarthe (Pays de la Loire)

    Informations forums :
    Inscription : Juillet 2004
    Messages : 2 688
    Points : 3 115
    Points
    3 115
    Par défaut
    Il en va sans peine.



    Bon courage.
    Pas de questions techniques par MP, le forum est là pour ça et est plus efficace.

    Orthographe : une connexion (avec un x), un langage (sans u), une requête (un seul t), 'une quote' (avec qu), une syntaxe (sans h)

  11. #11
    Rédacteur

    Homme Profil pro
    Développeur Web
    Inscrit en
    Juillet 2003
    Messages
    695
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Juillet 2003
    Messages : 695
    Points : 1 071
    Points
    1 071
    Par défaut
    Juste pour terminer le débat sur le continue, je dirais pour sa défense que si le while possède 5000 lignes entre ses incolades, 72 conditions différentes de traitement, sur 14 traitements possibles différents.
    Je pense qu'il vaut mieux d'office retirer les exceptions avec continue que partir dans des profondeurs de IF abyssales.

    Bien sûr, on est pas dans ce cas ici. Et pour un traitement très simple, il peut être plus propre et lisible d'utiliser un
    if (traitement)
    ...
    Articles sur developpez.com
    - Gestion des exceptions avec PHP5
    - Chiffrement et hash en PHP contre l'attaque Man in the middle
    - Aedituus - Espace membre sécurisé en PHP5

  12. #12
    Membre expert Avatar de Amara
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    2 688
    Détails du profil
    Informations personnelles :
    Localisation : France, Sarthe (Pays de la Loire)

    Informations forums :
    Inscription : Juillet 2004
    Messages : 2 688
    Points : 3 115
    Points
    3 115
    Par défaut
    Oui je n'ai jamais dit le contraire mais là on n'est pas dans ce cas
    Pas de questions techniques par MP, le forum est là pour ça et est plus efficace.

    Orthographe : une connexion (avec un x), un langage (sans u), une requête (un seul t), 'une quote' (avec qu), une syntaxe (sans h)

  13. #13
    Rédacteur

    Homme Profil pro
    Développeur Web
    Inscrit en
    Juillet 2003
    Messages
    695
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Juillet 2003
    Messages : 695
    Points : 1 071
    Points
    1 071
    Par défaut
    Oui je n'ai jamais dit le contraire mais là on n'est pas dans ce cas
    La où je voulais en venir c'est que le continue est bcp plus souple (je trouve), et que qq soit le cas, je préfère l'utiliser.
    Articles sur developpez.com
    - Gestion des exceptions avec PHP5
    - Chiffrement et hash en PHP contre l'attaque Man in the middle
    - Aedituus - Espace membre sécurisé en PHP5

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

Discussions similaires

  1. [T-SQL]Skipper un tour de boucle while
    Par agougeon dans le forum Sybase
    Réponses: 2
    Dernier message: 04/08/2006, 13h26
  2. [Tableaux] boucle while qui ne boucle pas comme je veux
    Par oceane751 dans le forum Langage
    Réponses: 5
    Dernier message: 05/06/2006, 00h42
  3. [Tableaux] Ma boucle While ne va pas !!!
    Par tigzirt dans le forum Langage
    Réponses: 7
    Dernier message: 05/05/2006, 11h47
  4. [Tableaux] boucle while
    Par dafalri dans le forum Langage
    Réponses: 8
    Dernier message: 24/02/2006, 10h52
  5. [Tableaux] Boucle while imbriquer
    Par Le-Cortex dans le forum Langage
    Réponses: 11
    Dernier message: 09/09/2005, 14h22

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