Foreach sur 2 clés
Résolu/Fermé
danielos77
Messages postés
108
Date d'inscription
samedi 18 février 2006
Statut
Membre
Dernière intervention
16 janvier 2024
-
25 juin 2021 à 16:41
danielos77 Messages postés 108 Date d'inscription samedi 18 février 2006 Statut Membre Dernière intervention 16 janvier 2024 - 26 juin 2021 à 19:05
danielos77 Messages postés 108 Date d'inscription samedi 18 février 2006 Statut Membre Dernière intervention 16 janvier 2024 - 26 juin 2021 à 19:05
A voir également:
- Foreach sur 2 clés
- 2 ecran pc - Guide
- Word numéro de page 1/2 - Guide
- Cles windows 8 - Guide
- Cles usb non reconnu - Guide
- Faire 2 colonnes sur word - Guide
5 réponses
yg_be
Messages postés
23412
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
28 décembre 2024
Ambassadeur
1 557
25 juin 2021 à 17:00
25 juin 2021 à 17:00
bonjour,
il est peut-être préférable d'enregistrer différemment les informations dans le tableau associatif.
si tu veux vraiment utiliser un for each, il faut, une fois sur deux, extraire $element2 au lieu d'$element, exemple:
il est peut-être préférable d'enregistrer différemment les informations dans le tableau associatif.
si tu veux vraiment utiliser un for each, il faut, une fois sur deux, extraire $element2 au lieu d'$element, exemple:
$impair = TRUE; foreach($_POST as $cle => $element) { echo 'la clé [' . $cle . '] contient la valeur ' . $element . '<br />'; // pour contrôler la valeur de la clé et son contenu (ce qui correspond au x de la demande) $particip="mot".$element; echo $particip.'<br>'; // pour vérifier que l'on récupère bien la clé2 //blocage ici pour récupérer la valeur de la clé 2 dans une variable if ($impair) { $element1=$element; } else { $element2=$element; //$sth appartient à la classe PDOStatement $sth = $bdd->prepare("UPDATE table SET champmachin = $element2 WHERE ID = ". $element); $sth->execute(); } $impair= ! $impair; }
danielos77
Messages postés
108
Date d'inscription
samedi 18 février 2006
Statut
Membre
Dernière intervention
16 janvier 2024
2
26 juin 2021 à 01:12
26 juin 2021 à 01:12
Bonsoir,
Hormis le fait que ta suggestion ne semble pas fonctionner (même si cela provient sûrement de l'interface entre mon clavier et mon fauteuil), j'ai 2questions.
1°) Pour $impair, ma clé pour l'ID n'est pas systématiquement impaire (mon ID peut-être pair). Est-ce que cela a un impact.
2°) Quel est la traduction et le rôle de $impair=!$impair
Merci
Daniel
Hormis le fait que ta suggestion ne semble pas fonctionner (même si cela provient sûrement de l'interface entre mon clavier et mon fauteuil), j'ai 2questions.
1°) Pour $impair, ma clé pour l'ID n'est pas systématiquement impaire (mon ID peut-être pair). Est-ce que cela a un impact.
2°) Quel est la traduction et le rôle de $impair=!$impair
Merci
Daniel
yg_be
Messages postés
23412
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
28 décembre 2024
1 557
26 juin 2021 à 10:57
26 juin 2021 à 10:57
1) la variable $impair a pour but de déterminer si on traite un clé paire ou impaire.
2) https://www.php.net/manual/fr/language.operators.logical.php
2) https://www.php.net/manual/fr/language.operators.logical.php
danielos77
Messages postés
108
Date d'inscription
samedi 18 février 2006
Statut
Membre
Dernière intervention
16 janvier 2024
2
>
yg_be
Messages postés
23412
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
28 décembre 2024
26 juin 2021 à 14:59
26 juin 2021 à 14:59
Bonjour yg_be,
Merci pour les précisions. Je pensais (à tort) que dans un tableau associatif, les clés n'avaient que les noms qui leur étaient donnés et donc que 1ère ou 2ème ou etc ... n'avait plus de sens. Mais je comprends maintenant que malgré le nom qu'elles ont, l'ordre reste un moyen de les identifier.
Merci
Daniel
Merci pour les précisions. Je pensais (à tort) que dans un tableau associatif, les clés n'avaient que les noms qui leur étaient donnés et donc que 1ère ou 2ème ou etc ... n'avait plus de sens. Mais je comprends maintenant que malgré le nom qu'elles ont, l'ordre reste un moyen de les identifier.
Merci
Daniel
jordane45
Messages postés
38358
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
28 décembre 2024
4 719
26 juin 2021 à 02:26
26 juin 2021 à 02:26
Bonjour
Comme l'a dit yg, le souci vlent avant tout de la façon dont tu as réalisé ton formulaire...
Montre le nous..
Comme l'a dit yg, le souci vlent avant tout de la façon dont tu as réalisé ton formulaire...
Montre le nous..
danielos77
Messages postés
108
Date d'inscription
samedi 18 février 2006
Statut
Membre
Dernière intervention
16 janvier 2024
2
26 juin 2021 à 07:48
26 juin 2021 à 07:48
Bonjour jordane45,
bonjour yg_be,
Voici le formulaire :
La fonctionnalité du formulaire est la gestion des participations ou pas à des stages. Il récupère les inscriptions de l'année choisie, et pour chaque inscription, le select en fin de ligne permet de mettre "OUI" ou "NON". La validation du formulaire devant faire l'upgrade de cette information dans la table pour chaque enregistrement.
Merci à vous 2 pour votre aide.
Daniel
bonjour yg_be,
Voici le formulaire :
<?php // met en "dur" la saison echo '<p> </p> Saison traitée : <font size="5" color="blue"><b>'.$Saison.'</b></font><br><br>'; echo "<FORM name='1' action='../envoi_gestion.php' method='POST'><br>"; //préparation de la requête //echo $sql; $sql =' SELECT Inscriptions_ULM.ID,Inscriptions_ULM.Nom, Inscriptions_ULM.Prenom, Inscriptions_ULM.ChoixStage, Inscriptions_ULM.Participationphys, Stages_ULM.TypeStage, Stages_ULM.LieuStage FROM Inscriptions_ULM INNER JOIN Stages_ULM ON Inscriptions_ULM.ChoixStage = Stages_ULM.NumStage WHERE Stages_ULM.Saison = ?'; //tri des datas pour les avoir dans un tableau $datas = array($Saison); //Execution de la requete try{ $req = $bdd->prepare($sql); $req->execute($datas); //on récupère les résultats $result = $req->fetchAll(); }catch(Exception $e){ // en cas d'erreur : echo " <br>Erreur ! ".$e->getMessage(); echo " <br>Les datas : " ; print_r($datas); } // Mise en forme des résultats pour les champs voulus if(!empty($result)){ // Masque du tableau séparé pour ne pas le recopier à chaque ligne echo ' <table style="border-collapse:collapse;" cellspacing="0" class="avectri" border="1"> <thead> <tr> <!-- masque du tableau --> <th style="border-width:1; border-color:black; border-style:solid;">ID</th> <th style="border-width:1; border-color:black; border-style:solid;">Nom</th> <th style="border-width:1; border-color:black; border-style:solid;">Prénom</th> <th style="border-width:1; border-color:black; border-style:solid;">Choix Stage</th> <th style="border-width:1; border-color:black; border-style:solid;">TypeStage</th> <th style="border-width:1; border-color:black; border-style:solid;">LieuStage</th> <th style="border-width:1; border-color:black; border-style:solid;">Participation Physique</th> <th style="border-width:1; border-color:black; border-style:solid;">Saisie Participation Physique</th> </tr> </thead> <tbody> '; foreach($result as $uneLigne){ // Suite du tableau avec une ligne par groupe de données //récupération de l'ID de la ligne pour le renvoyer avec un input hidden $ID=$uneLigne['ID']; //utilisation de l'ID pour créer la variable qui nommera chaque select $Participationmod="Participationmod".$ID; echo' <tr> <!-- lignes des résultats --> <td style="border-width:1; border-color:black; border-style:solid;">'.$uneLigne['ID'].'</td> <td style="border-width:1; border-color:black; border-style:solid;">'.$uneLigne['Nom'].'</td> <td style="border-width:1; border-color:black; border-style:solid;">'.$uneLigne['Prenom'].'</td> <td style="border-width:1; border-color:black; border-style:solid;">'.$uneLigne['ChoixStage'].'</td> <td style="border-width:1; border-color:black; border-style:solid;">'.$uneLigne['TypeStage'].'</td> <td style="border-width:1; border-color:black; border-style:solid;">'.$uneLigne['LieuStage'].'</td> <td style="border-width:1; border-color:black; border-style:solid;">'.$uneLigne['Participationphys'].'</td> <td style="border-width:0; border-color:black; border-style:solid;"><font size="4"><label for="Participationmod">Participation : </label> <input type="hidden" name="'.$ID.'" id="'.$ID.'" value="'.$ID.'"> <select name="'.$Participationmod.'" id="'.$Participationmod.'"> <option value="">--Choisissez une option--</option> <option value="OUI">OUI</option> <option value="NON">NON</option> </select> </font> </td> </tr> '; } echo '</tbody> </table> '; } echo "<br><Input type='submit' name='envoyer' value='Saisie des participations'>"; echo "</form>"; ?>
La fonctionnalité du formulaire est la gestion des participations ou pas à des stages. Il récupère les inscriptions de l'année choisie, et pour chaque inscription, le select en fin de ligne permet de mettre "OUI" ou "NON". La validation du formulaire devant faire l'upgrade de cette information dans la table pour chaque enregistrement.
Merci à vous 2 pour votre aide.
Daniel
yg_be
Messages postés
23412
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
28 décembre 2024
1 557
26 juin 2021 à 15:17
26 juin 2021 à 15:17
as-tu compris cette recommendation? j'ai l'impression que tu ne l'as pas appliquée.
danielos77
Messages postés
108
Date d'inscription
samedi 18 février 2006
Statut
Membre
Dernière intervention
16 janvier 2024
2
>
yg_be
Messages postés
23412
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
28 décembre 2024
26 juin 2021 à 15:33
26 juin 2021 à 15:33
Oui, j'ai compris la recommandation.
C'est vrai par contre que je ne l'ai pas appliquée tel quel car je suis passé par la création d'une variable ($Participationmod en ligne 64 avec la valeur de l'ID récupérée en ligne 62) pour nommer les select. Variable qui a bien le même nom que la recommandation. Du moins je le pense mais tu me mets un gros doute sur le fait que ce serait équivalent.
C'est vrai par contre que je ne l'ai pas appliquée tel quel car je suis passé par la création d'une variable ($Participationmod en ligne 64 avec la valeur de l'ID récupérée en ligne 62) pour nommer les select. Variable qui a bien le même nom que la recommandation. Du moins je le pense mais tu me mets un gros doute sur le fait que ce serait équivalent.
yg_be
Messages postés
23412
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
28 décembre 2024
1 557
>
danielos77
Messages postés
108
Date d'inscription
samedi 18 février 2006
Statut
Membre
Dernière intervention
16 janvier 2024
26 juin 2021 à 15:46
26 juin 2021 à 15:46
tu n'as pas du tout appliqué cette recommendation.
je pense que cela te permettra également de supprimer la ligne 77 de ton formulaire.
je pense que cela te permettra également de supprimer la ligne 77 de ton formulaire.
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
danielos77
Messages postés
108
Date d'inscription
samedi 18 février 2006
Statut
Membre
Dernière intervention
16 janvier 2024
2
26 juin 2021 à 17:37
26 juin 2021 à 17:37
effectivement, j'ai appliqué la recommandation et le résultat est différent ;-)
le dump et le print_r me donnent :
array(2) { ["Participationmod"]=> array(7) { [1]=> string(0) "" [2]=> string(3) "OUI" [3]=> string(3) "OUI" [4]=> string(3) "OUI" [5]=> string(3) "OUI" [76]=> string(3) "OUI" [77]=> string(0) "" } ["envoyer"]=> string(25) "Saisie des participations" }
Array
(
[Participationmod] => Array
(
[1] =>
[2] => OUI
[3] => OUI
[4] => OUI
[5] => OUI
[76] => OUI
[77] =>
)
[envoyer] => Saisie des participations
)
Si je comprend bien, là j'obtiens un tableau qui contient un tableau où en clé je retrouve l'ID et en valeur le choix du select.
mais comment ça se traite ça ?
ma requête ne peut fonctionner
à moins que pour l'execute je doive indiquer le tableau [Participationmod] ...
le dump et le print_r me donnent :
array(2) { ["Participationmod"]=> array(7) { [1]=> string(0) "" [2]=> string(3) "OUI" [3]=> string(3) "OUI" [4]=> string(3) "OUI" [5]=> string(3) "OUI" [76]=> string(3) "OUI" [77]=> string(0) "" } ["envoyer"]=> string(25) "Saisie des participations" }
Array
(
[Participationmod] => Array
(
[1] =>
[2] => OUI
[3] => OUI
[4] => OUI
[5] => OUI
[76] => OUI
[77] =>
)
[envoyer] => Saisie des participations
)
Si je comprend bien, là j'obtiens un tableau qui contient un tableau où en clé je retrouve l'ID et en valeur le choix du select.
mais comment ça se traite ça ?
ma requête ne peut fonctionner
foreach($_POST as $cle => $element) { echo 'La clé [' . $cle . '] contient la valeur : ' . $element . '<br />'; // pour contrôler la valeur de la clé et son contenu //$sth appartient à la classe PDOStatement $sth = $bdd->prepare("UPDATE Inscriptions_ULM SET Participationphys = $element WHERE ID = $cle"); $sth->execute(array($_POST)); }
à moins que pour l'execute je doive indiquer le tableau [Participationmod] ...
yg_be
Messages postés
23412
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
28 décembre 2024
1 557
Modifié le 26 juin 2021 à 18:00
Modifié le 26 juin 2021 à 18:00
as-tu essayé
(dans la ligne 1)
$_POST[Participationmod]?
(dans la ligne 1)
yg_be
Messages postés
23412
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
28 décembre 2024
1 557
26 juin 2021 à 18:03
26 juin 2021 à 18:03
ton utilisation du prepare/execute n'est pas correcte.
regarde comment tu fais au début du code partagé en #4.
regarde comment tu fais au début du code partagé en #4.
danielos77
Messages postés
108
Date d'inscription
samedi 18 février 2006
Statut
Membre
Dernière intervention
16 janvier 2024
2
>
yg_be
Messages postés
23412
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
28 décembre 2024
26 juin 2021 à 18:23
26 juin 2021 à 18:23
Non, j'avais pas essayé $_POST[Participationmod]... on peut pas dire que la syntaxe permette l'intuition...
Sinon, pour la requête, j'ai modifié ainsi:
Cela fonctionne mais j'ai un message de mise en garde me disant que j'utilise une constante non définie (Participationmod) et que cela posera pb avec les futures versions php "Warning: Use of undefined constant Participationmod - assumed 'Participationmod' (this will throw an Error in a future version of PHP)"
En tout cas un grand merci pour le coup de main.
Sinon, pour la requête, j'ai modifié ainsi:
foreach($_POST[Participationmod] as $cle => $element) { echo 'La clé [' . $cle . '] contient la valeur : ' . $element . '<br />'; // pour contrôler la valeur de la clé et son contenu //$sth appartient à la classe PDOStatement $sth = $bdd->prepare('UPDATE Inscriptions_ULM SET Participationphys = :element WHERE ID = :cle'); $sth->bindValue(':element', $element, PDO::PARAM_STR); $sth->bindValue(':cle', $cle, PDO::PARAM_INT); $sth->execute(); }
Cela fonctionne mais j'ai un message de mise en garde me disant que j'utilise une constante non définie (Participationmod) et que cela posera pb avec les futures versions php "Warning: Use of undefined constant Participationmod - assumed 'Participationmod' (this will throw an Error in a future version of PHP)"
En tout cas un grand merci pour le coup de main.
yg_be
Messages postés
23412
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
28 décembre 2024
1 557
>
danielos77
Messages postés
108
Date d'inscription
samedi 18 février 2006
Statut
Membre
Dernière intervention
16 janvier 2024
26 juin 2021 à 18:29
26 juin 2021 à 18:29
Fais alors comme expliqué dans l'avertissement.
https://www.deepl.com/translator#en/fr/Use%20of%20undefined%20constant%20Participationmod%20-%20assumed%20'Participationmod'
https://www.deepl.com/translator#en/fr/Use%20of%20undefined%20constant%20Participationmod%20-%20assumed%20'Participationmod'
danielos77
Messages postés
108
Date d'inscription
samedi 18 février 2006
Statut
Membre
Dernière intervention
16 janvier 2024
2
>
yg_be
Messages postés
23412
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
28 décembre 2024
26 juin 2021 à 18:46
26 juin 2021 à 18:46
Le lien m'amène juste sur une page de traduction qui traduit l'avertissement d'anglais en français mais il n'explique pas comment y remédier.