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 :

Plusieurs foreach à la suite.


Sujet :

Langage PHP

  1. #1
    Membre du Club
    Inscrit en
    Novembre 2008
    Messages
    68
    Détails du profil
    Informations forums :
    Inscription : Novembre 2008
    Messages : 68
    Points : 46
    Points
    46
    Par défaut Plusieurs foreach à la suite.
    Bonjour,

    J'ai crée un formulaire avec l'option select multiple.
    Et je récupérer plusieurs valeurs à partir d'un foreach.
    Sauf seul petit problème, j'ai plusieurs menu select multiple.
    Alors, j'ai imbriqué des foreach

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    foreach($division as $choixdivision)
            {
                    $choixdivision;
            foreach($pays as $choixpays)
                    $choixpays;
            foreach($site as $choixsite)
                    $choixsite;
            foreach($societe as $choixsociete)
                    $choixsociete;
    }
    Et j'ai un message d'erreur " Invalid argument supplied for foreach() in"
    J'ai fais un var_dump, de choixpays, choixsite et choixsociete,
    Les valeurs sont NULL
    Alors que j'ai sélectionné des valeurs.

    Que dois-je faire ?
    Merci d'avance pour votre aide.
    Cyril.

  2. #2
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    77
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 77
    Points : 68
    Points
    68
    Par défaut
    Il faudrait le code qui definit $pays etc..

  3. #3
    Membre du Club
    Inscrit en
    Novembre 2008
    Messages
    68
    Détails du profil
    Informations forums :
    Inscription : Novembre 2008
    Messages : 68
    Points : 46
    Points
    46
    Par défaut
    Citation Envoyé par djaih Voir le message
    Il faudrait le code qui definit $choix_pays etc..
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    <select multiple="multiple" size="10" name="pays[]" id="test">
                <option value="France" >France</option>
                <option value="Italie">Italie</option>
                <option value="Egypte">Egypte</option>
            </select>
    Et idem pour choixdivision etc.
    J'ai bien mis les crochets !

    Merci d'avance

  4. #4
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    77
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 77
    Points : 68
    Points
    68
    Par défaut
    Le code de ton php stp.

    En général on récupère les variables d'un formulaire avec $_POST ou $_GET

  5. #5
    Membre habitué Avatar de ilalaina
    Homme Profil pro
    Inscrit en
    Mai 2007
    Messages
    341
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Madagascar

    Informations forums :
    Inscription : Mai 2007
    Messages : 341
    Points : 187
    Points
    187
    Par défaut
    Généralement, tu testes d'abord si le variable n'est pas vide avant d'exécuter la boucle.

  6. #6
    Membre expert Avatar de Fench
    Homme Profil pro
    Chercheur en informatique
    Inscrit en
    Mai 2002
    Messages
    2 353
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Groenland

    Informations professionnelles :
    Activité : Chercheur en informatique
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Mai 2002
    Messages : 2 353
    Points : 3 390
    Points
    3 390
    Par défaut
    Bonjour,

    Comme dit djaih, tu ne vas pas pouvoir utiliser directement pays par le seul fait que dans ton formulaire tu as définis pays[] dans ta liste déroulante à choix multiples.
    Il faut utiliser les variables $_POST ou $_GET ...

  7. #7
    Membre du Club
    Inscrit en
    Novembre 2008
    Messages
    68
    Détails du profil
    Informations forums :
    Inscription : Novembre 2008
    Messages : 68
    Points : 46
    Points
    46
    Par défaut
    Citation Envoyé par Fench Voir le message
    Bonjour,

    Comme dit djaih, tu ne vas pas pouvoir utiliser directement pays par le seul fait que dans ton formulaire tu as définis pays[] dans ta liste déroulante à choix multiples.
    Il faut utiliser les variables $_POST ou $_GET ...
    Merci c'est très gentil de vos remarques,

    Je n'avais pas tout copié le code PHP mais le voici mes chers amis

    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
    <?php
     
    extract($_POST);
    if(isset($_POST['envoyer']))
    {
            if(!empty($nom) && !empty($prenom) && !empty($tgi) && !empty($mail) &&!empty($division) && !empty($pays) && !empty($site) && !empty($societe))
            {
            foreach($division as $choixdivision)
            {
            foreach($pays as $choixpays)
                    $choixpays;
            foreach($site as $choixsite)
                    $choixsite;
            foreach($societe as $choixsociete)
                    $choixsociete;
    $db = pg_connect("host=xx port=5432 user=xxx password=xx dbname=xxx")
                            or die("Connexion impossible");
                            $result = pg_query($db,"INSERT INTO demanderssi (nom, prenom, tgi, mail, division, pays, site, societe) VALUES ('$nom','$prenom','$tgi', '$mail' ,'$choixdivision' ,'$choixpays' ,'$choixsite' ,'$choixsociete')");
                            if (!$result)
                            {
                                    echo "Une erreur s'est produite.\n";
                                    exit;
                            }
            }
                    echo "Votre demande a bien ete enregistre";
            }
            else
            {
                    echo "Vous n'avez pas saisi tous les champs!";
            }
    }
    ?>

  8. #8
    Membre du Club
    Inscrit en
    Novembre 2008
    Messages
    68
    Détails du profil
    Informations forums :
    Inscription : Novembre 2008
    Messages : 68
    Points : 46
    Points
    46
    Par défaut
    Citation Envoyé par cycy_88 Voir le message
    Merci c'est très gentil de vos remarques,

    Je n'avais pas tout copié le code PHP mais le voici mes chers amis

    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
    <?php
     
    extract($_POST);
    if(isset($_POST['envoyer']))
    {
            if(!empty($nom) && !empty($prenom) && !empty($tgi) && !empty($mail) &&!empty($division) && !empty($pays) && !empty($site) && !empty($societe))
            {
            foreach($division as $choixdivision)
            {
            foreach($pays as $choixpays)
                    $choixpays;
            foreach($site as $choixsite)
                    $choixsite;
            foreach($societe as $choixsociete)
                    $choixsociete;
    $db = pg_connect("host=xx port=5432 user=xxx password=xx dbname=xxx")
                            or die("Connexion impossible");
                            $result = pg_query($db,"INSERT INTO demanderssi (nom, prenom, tgi, mail, division, pays, site, societe) VALUES ('$nom','$prenom','$tgi', '$mail' ,'$choixdivision' ,'$choixpays' ,'$choixsite' ,'$choixsociete')");
                            if (!$result)
                            {
                                    echo "Une erreur s'est produite.\n";
                                    exit;
                            }
            }
                    echo "Votre demande a bien ete enregistre";
            }
            else
            {
                    echo "Vous n'avez pas saisi tous les champs!";
            }
    }
    ?>
    J'ai trouvé la solution

    voici ce que je dois changer :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    foreach($division as $choixdivision)
            {
            foreach($pays as $choixpays)
            {
            foreach($site as $choixsite)
            {
            foreach($societe as $choixsociete)
            {
     
     
    }}}}
    Seul inconvénient, du fait que les valeurs sont multiples, il les ajoute un par un par dans la base de données c'est chiant, quel est la solution.

    Exemple si je choisis choixsite : paris et lyon, pour qu'il me l'ajoute directement dans le champs site et en une ligne ?

    Est-ce-possible ?

    Cordialement,
    Cyril.

  9. #9
    Membre expert Avatar de Fench
    Homme Profil pro
    Chercheur en informatique
    Inscrit en
    Mai 2002
    Messages
    2 353
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Groenland

    Informations professionnelles :
    Activité : Chercheur en informatique
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Mai 2002
    Messages : 2 353
    Points : 3 390
    Points
    3 390
    Par défaut
    Exemple si je choisis choixsite : paris et lyon, pour qu'il me l'ajoute directement dans le champs site et en une ligne ?
    Puisque tu es en ligne : tu peux me donner un exemple ?

    Edit: pour être franc, je ne comprends pas trop l'utilité de tes foreach imbriqués .... Le formulaire de saisies est comment ? C quoi le but de la manip formulaire et remplissage ?

  10. #10
    Nouveau membre du Club
    Homme Profil pro
    Inscrit en
    Juillet 2011
    Messages
    40
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Juillet 2011
    Messages : 40
    Points : 26
    Points
    26
    Par défaut
    Bonjour,

    J'ai un problème identique. J'ai deux données qui proviennent d'un formulaire: "aanwezig" et "stamnummer".
    Tout fonctionne bien quand je code avec une seule donnée mais avec les deux, j'obtiens une erreur à la partie foreach

    J'ai essayé différentes solutions mais je n'arrive pas à transférer les deux données dans ma base de données.

    Voici le code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
                if(isset($_POST['aanwezig']) && ($_POST['stamnummer']))
                {
                foreach ($_POST['aanwezig'] as $aanwezig && $_POST['stamnummer'] as $stamnummer)
                    {
                        echo "{$aanwezig} {$stamnummer}<br />\n";
    					$uur=$_POST['uur'];
    					$publish_date =date("Y-m-d H:i:s");
    					$query = "INSERT INTO  `subranbe5`.`aanwezigheid` (`aanwid`, `stamnummer`, `pubdate`, `uur`, `aanwezig`)VALUES (NULL, '$stamnummer', '$publish_date', '$uur', '$aanwezig')";
    					$result = mysql_query($query);
                    }
                }
    Quelqu'un a une idée? J'ai tout lu sur la fonction foreach mais je ne trouve pas la solution pour plus d'une donnée sans imbriquer plusieurs foreach

    Merci d'avance,

    Sub

  11. #11
    Nouveau membre du Club
    Homme Profil pro
    Inscrit en
    Juillet 2011
    Messages
    40
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Juillet 2011
    Messages : 40
    Points : 26
    Points
    26
    Par défaut
    J'ai trouvé en modifiant la ligne foreach par le code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    foreach (array_combine($_POST["stamnummer"], $_POST["aanwezig"]) as $stamnummer => $aanwezig)
    Ce n'est possible que pour 2 données donc si vous avez la solution pour plus n'hésitez pas à la poster

    ;-)
    Sub

  12. #12
    Membre éprouvé Avatar de patrickbaras
    Homme Profil pro
    Informaticien (à sa mémère).
    Inscrit en
    Septembre 2010
    Messages
    525
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : Belgique

    Informations professionnelles :
    Activité : Informaticien (à sa mémère).
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2010
    Messages : 525
    Points : 1 103
    Points
    1 103
    Par défaut
    Citation Envoyé par subran Voir le message
    Ce n'est possible que pour 2 données donc si vous avez la solution pour plus n'hésitez pas à la poster
    http://www.php.net/manual/fr/function.array-merge.php

Discussions similaires

  1. Réponses: 6
    Dernier message: 28/09/2006, 18h58
  2. plusieurs requêtes à la suite ça ne marche pas
    Par zouhenlai dans le forum Access
    Réponses: 10
    Dernier message: 30/06/2006, 17h02
  3. [C#] Lancer plusieurs commandes à la suite
    Par hobotalker dans le forum Windows Forms
    Réponses: 1
    Dernier message: 05/06/2006, 16h02
  4. Réponses: 12
    Dernier message: 30/12/2005, 11h55
  5. [nouveau] saisir plusieurs espace de suite ou tabuler
    Par siuol dans le forum Mode d'emploi & aide aux nouveaux
    Réponses: 1
    Dernier message: 28/02/2005, 12h32

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