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 :

foreach et condition cumulé


Sujet :

Langage PHP

  1. #1
    Membre du Club
    Inscrit en
    Février 2008
    Messages
    190
    Détails du profil
    Informations forums :
    Inscription : Février 2008
    Messages : 190
    Points : 53
    Points
    53
    Par défaut foreach et condition cumulé
    bonjour à tous...

    Voilà, je voudrais savoir si un truc est possible (certainement) et si oui, comment ?

    Imaginez, j'ai 50 variables que je peux caser dans un tableau...
    Pour le moment je suis passé par des if, elseif, else.

    On pourrait fonctionner par un case mais je n'aime pas trop dans ce cas, ca fais bcp de ligne...

    L'autre solution, serais un foreach. Mais l'utilisation que j'ai vu pour le moment des foreach c'est d'afficher TOUT le contenu, hors ce n'est pas ce que je cherche.

    Exemple, j'ai un formulaire, avec 50 cases à cocher, la personnes en coche 6... Donc sur la page suivante avec mon traitement PHP je voudrais afficher les choix et donc j'aurais affiché 6 valeurs différente.

    Est-ce possible avec le foreach de rajouter des conditions pour lui dire si tel ou tel choix est sélectionner, afficher les variables correspondantes...

    J'espère que j'aurai été clair, lol...
    Merci à vous...

  2. #2
    Modérateur
    Avatar de grunk
    Homme Profil pro
    Lead dév - Architecte
    Inscrit en
    Août 2003
    Messages
    6 691
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Lead dév - Architecte
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2003
    Messages : 6 691
    Points : 20 230
    Points
    20 230
    Par défaut
    Suffit de conditionner dans ton foreach :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    foreach($_POST['caseacocher'] as $valeur)
    {
      if($valeur=='on')
           echo 'coché';
    }
    Mais le foreach bouclera de toute manière sur la totalité du tableau.

    Dernier point un switch/case fait peut être plus de ligne mais est plus rapide dès que le nombre de condition devient important
    Pry Framework php5 | N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  3. #3
    Modératrice
    Avatar de Celira
    Femme Profil pro
    Développeuse PHP/Java
    Inscrit en
    Avril 2007
    Messages
    8 633
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Développeuse PHP/Java
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2007
    Messages : 8 633
    Points : 16 372
    Points
    16 372
    Par défaut
    Je rappelle au passage que dans le cas d'un tableau de checkboxes seules les case cochées sont réellement envoyées...

    Et tu peux parfaitement placer un switch dans ton foreach...
    Modératrice PHP
    Aucun navigateur ne propose d'extension boule-de-cristal : postez votre code et vos messages d'erreurs. (Rappel : "ça ne marche pas" n'est pas un message d'erreur)
    Cherchez un peu avant poser votre question : Cours et Tutoriels PHP - FAQ PHP - PDO une soupe et au lit !.

    Affichez votre code en couleurs : [CODE=php][/CODE] (bouton # de l'éditeur) et [C=php][/C]

  4. #4
    Membre du Club
    Inscrit en
    Février 2008
    Messages
    190
    Détails du profil
    Informations forums :
    Inscription : Février 2008
    Messages : 190
    Points : 53
    Points
    53
    Par défaut
    Citation Envoyé par grunk Voir le message
    Suffit de conditionner dans ton foreach :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    foreach($_POST['caseacocher'] as $valeur)
    {
      if($valeur=='on')
           echo 'coché';
    }
    Mais le foreach bouclera de toute manière sur la totalité du tableau.

    Dernier point un switch/case fait peut être plus de ligne mais est plus rapide dès que le nombre de condition devient important
    En fait voici un exemple de ce que j'ai fais :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
                   if (isset($_SESSION['rmo']))        echo 'Activite_RMO'.'<br />';                   // rmo
                   if (isset($_SESSION['asn']))        echo 'Agence_Simulation'.'<br />';              // asn
                   if (isset($_SESSION['hpc']))        echo 'HPC'.'<br />';                            // hpc
                   if (isset($_SESSION['lcc']))        echo 'LienCaoCalcul'.'<br />';                  // lcc
                   if (isset($_SESSION['log']))        echo 'Logistique'.'<br />';                     // log
                   if (isset($_SESSION['l350rp']))     echo 'Lu_A350_Rp_IEV'.'<br />';                 // l350rp
                   if (isset($_SESSION['p_p3x']))      echo 'P3xxxx_A3OX'.'<br />';                    // p_p3x
                   if (isset($_SESSION['p_pas']))      echo 'Pole_Abaqus'.'<br />';                    // p_pas
                   if (isset($_SESSION['p_pae']))      echo 'Pole_Acoustique'.'<br />';                // p_pae
                   if (isset($_SESSION['p_pan']))      echo 'Pole_Aerodyn'.'<br />';                   // p_pan
                   if (isset($_SESSION['p_pam']))      echo 'Pole_Astrium'.'<br />';                   // p_pam
                   if (isset($_SESSION['p_bpm']))      echo 'Pole_BPM'.'<br />';                       // p_bpm
    Le texte à affiché change celon les cases cochés...
    Et tu me dis :
    Mais chaque case à un nom différent... ?

  5. #5
    Modérateur
    Avatar de grunk
    Homme Profil pro
    Lead dév - Architecte
    Inscrit en
    Août 2003
    Messages
    6 691
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Lead dév - Architecte
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2003
    Messages : 6 691
    Points : 20 230
    Points
    20 230
    Par défaut
    C'était pour l'exemple
    Mais si tu veux faire un foreach sur ta variable de session , ca risque de pas être pratique , j'imagine qu'il n'ya pas que ce que tu veux afficher dans ta session.
    Et garde bien en tête qu'une case non cochée n'est pas envoyée en post.

    Eventuellement faire un tableaux de tes cases à coché en les nommants toutes de la même facon du genre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <input type="checkbox" name="caseacocher[]">
    Enfin tout ca pour dire que il est tout à fait possible de conditionner dans ta boucle foreach.
    Pry Framework php5 | N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  6. #6
    Membre du Club
    Inscrit en
    Février 2008
    Messages
    190
    Détails du profil
    Informations forums :
    Inscription : Février 2008
    Messages : 190
    Points : 53
    Points
    53
    Par défaut
    Bon, par exemple, si je fais ca :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <input type="checkbox" name="polyserve[01]" id="01" <?php echo ($_SESSION['01']=='on') ? 'checked' :  '' ; ?> /><label for="01"> Activite_RMO</label><br />
    Bon, j'en met qu'un pour l'exemple.
    Ca c'est dans ma première page, dans le form.

    2° page :
    Le traitement PHP
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    echo "<br />";
    $tableau = array (
    "01" => Activité RMO,
    "02" => Agence Simulation
    );
     
       foreach ($tableau as $cle => $value)
       {
          if (isset($_SESSION['$cle'])) echo $value;
       }
    Est-ce que ca pourrait coler ?

    Par contre y'a forcement une erreur vu que ma page est toute blanche, lol
    J'arrive pas à comprendre pourquoi et quand je vire cette portion de code, ca passe.

    Merci.

  7. #7
    Modérateur
    Avatar de grunk
    Homme Profil pro
    Lead dév - Architecte
    Inscrit en
    Août 2003
    Messages
    6 691
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Lead dév - Architecte
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2003
    Messages : 6 691
    Points : 20 230
    Points
    20 230
    Par défaut
    $_SESSION[$cle] et non pas $_SESSION['$cle']

    un example fonctionnel si besoin :

    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
    var_dump($_POST);
    session_start();
    $_SESSION['machin1'] = 'OK';
    if(!empty($_POST))
    {
    	foreach($_POST['test'] as $key=>$value)
    	{
    		if(isset($_SESSION[$key]))
    			echo $value;
    	}
    }
    ?>
    <html>
    <head>
    </head>
    <body>
    <form action="" method="post">
    <input type="checkbox" value="case1" name="test[machin1]" />
    <input type="checkbox" value="case2" name="test[machin2]" />
    <input type="checkbox" value="case3" name="test[machin3]" />
    <input type="submit" value="send !" />
    </form>
    </body>
    </html>
    Pry Framework php5 | N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  8. #8
    Membre du Club
    Inscrit en
    Février 2008
    Messages
    190
    Détails du profil
    Informations forums :
    Inscription : Février 2008
    Messages : 190
    Points : 53
    Points
    53
    Par défaut
    Merci pour ta réponse...
    J'ai réussis à mettre en place ce système dans mon appli...

    Par contre il me reste un dernier soucis à régler.

    Voici une case à cocher (au départ)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <input type="checkbox" name="rmo" id="rmo" <?php echo ($_SESSION['rmo']=='on') ? 'checked' :  '' ; ?> /><label for="rmo"> Activite_RMO</label><br />
    Avec la modif du foreach, j'ai besoin d'un value et de modifier le nom de la checkbox, voici ce que cela donne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <input type="checkbox" name="polyserve[pe_2]" id="pe_2" value="Agence_Simulation" <?php echo ($_SESSION['pe_2']=='on') ? 'checked' :  '' ; ?> /><label for="pe_2"> Agence_Simulation test</label><br />
    Si en plein milieu il y'a le code PHP c'est pour 'retenir' que la case à été coché (ou pas) par l'utilisateur si il devait revenir en arrière...
    Hors, là, ca ne marche plus... Toutes mes cases sont 'vide'.

    Comment je pourrait régler le problème ?

    Encore merci.

  9. #9
    Membre du Club
    Inscrit en
    Février 2008
    Messages
    190
    Détails du profil
    Informations forums :
    Inscription : Février 2008
    Messages : 190
    Points : 53
    Points
    53
    Par défaut
    Personne aurait une idée ???

  10. #10
    Membre du Club
    Inscrit en
    Février 2008
    Messages
    190
    Détails du profil
    Informations forums :
    Inscription : Février 2008
    Messages : 190
    Points : 53
    Points
    53
    Par défaut
    Bon, en fait, au lieu de mettre dans mon form tout un tat de <input> à la suite, je suis passé par une boucle for que voici :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    <?php
    $nom ="Polyserve_";
     
    $tableau = array(
        '1' => 'Premier',
        '2' => 'Deuxième',
        '3' => 'Troisième',
        '4' => 'Quatrième'
    );
     
    for ($j = 1 ; $j <= 4 ; $j++){
        echo "<input type=\"checkbox\" name=\"".$nom.$j."\" id=\"".$nom.$j."\" value=\"".'test'."\" />"."<label for=\"".$nom.$j."\">".$tableau[$j]."</label><br />";
    }
    ?>
    Donc, ca marche pas mal mais le soucis c'est que je n'arrive pas à faire l'équivalent sur mon ancien code de ca :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <?php echo ($_SESSION['PRN31C046']=='on') ? 'checked' :  '' ; ?>

Discussions similaires

  1. [XL-2003] Faire un cumul avec condition.
    Par probexcel dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 11/06/2009, 09h52
  2. plusieurs conditions avec foreach
    Par decksroy dans le forum Langage
    Réponses: 16
    Dernier message: 06/03/2007, 11h43
  3. cumul de conditions
    Par socooooool dans le forum Bases de données
    Réponses: 2
    Dernier message: 02/06/2006, 17h59
  4. Problème de requête avec cumul des conditions sur un champ
    Par UtopieAmbiante dans le forum Requêtes
    Réponses: 4
    Dernier message: 11/01/2006, 10h52
  5. Cumul ce condition
    Par joy dans le forum Langage SQL
    Réponses: 4
    Dernier message: 08/03/2005, 09h13

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