[RESOLU] bouble for qui ne fonctionne pas

Eléphanteau du PHP | 10 Messages

16 nov. 2018, 10:44

Bonjour à tous,
voici mon problème : le code suivant n'est pas très joli mais fonctionne parfaitement

Code : Tout sélectionner

if (isset($_POST['prenom2'])){ $prenom2 = $_POST['prenom2']; } else{ $prenom2 = ""; } if (isset($_POST['prenom3'])){ $prenom3 = $_POST['prenom3']; } else{ $prenom3 = ""; } if (isset($_POST['prenom4'])){ $prenom4 = $_POST['prenom4']; } else{ $prenom4 = ""; } if (isset($_POST['prenom5'])){ $prenom5 = $_POST['prenom5']; } else{ $prenom5 = ""; } if (isset($_POST['prenom6'])){ $prenom6 = $_POST['prenom6']; } else{ $prenom6 = ""; } if (isset($_POST['prenom7'])){ $prenom7 = $_POST['prenom7']; } else{ $prenom7 = ""; } if (isset($_POST['prenom8'])){ $prenom8 = $_POST['prenom8']; } else{ $prenom8 = ""; } if (isset($_POST['prenom9'])){ $prenom9 = $_POST['prenom9']; } else{ $prenom9 = ""; }
et quand je veux le mettre dans une boucle, plus rien ne fonctionne ^^
voici le code qui remplace celui juste au dessus:

Code : Tout sélectionner

for($cptr=2,$cptr=9,$cptr++){ $nom="nom".$cptr; if (isset($_POST[$nom])){ $nom = $_POST[$nom]; } else{ $nom = ""; } }
j'ai trouvé plein de solutions dans des forums mais rien n'y fait, ça ne fonctionne toujours pas.

Merci d'avance pour vos réponses. :)

Avatar du membre
Mammouth du PHP | 1609 Messages

16 nov. 2018, 11:04

Salut quand tu dis que ça ne fonctionne pas, qu'entends tu par la ? Ca ne passe qu'une fois dans la boucle ? pas du tout ?

En tout cas la deuxième expression du for est généralement une condition qui doit être validée pour rentrer dans la boucle, or en l’occurrence tu as mis une affectation $cptr = 9. La comme ça, je ne me suis jamais amusé à le faire et donc je ne sais pas comment c'est sensé réagir.

Si tu veux faire une boucle de 2 à 9 tu devrais avoir un for ($i = 2; $i <=9; $i++)
Si tu veux faire une boucle pour 2 et 9 tu devrais avoir un for ($i = 2; $i <= 9; $i += 7)

PS : en relisant d'ailleurs tu as utilisé des , et non des ; dans le for.
Je t'invite à lire la documentation ici :
http://php.net/manual/fr/control-structures.for.php

La première expression est évaluée 1 fois au début de la boucle, la deuxième expression est évaluée au début de chaque itération, si elle est true la boucle continue sinon elle s'arrête et l'expression 3 est évaluée après chaque itération.
Les 3 expressions sont séparées par des ; mais chacune des 3 expressions peut en contenir plusieurs séparées par des ,

Donc dans ton code tu n'as que la première expression qui en contient 3 et concrètement je ne sais pas vraiment quel comportement c'est sensé provoquer mais à priori pas celui que tu désires. ^^

Je suis même étonné que ça ne pète pas une erreur car il manque les expressions 2 et 3 du for... bref
Développeur web depuis + de 20 ans

Eléphanteau du PHP | 10 Messages

16 nov. 2018, 12:30

Super! Merci ça fonctionne :D :D

Maintenant j'ai un autre problème,

Le but de mon for (qui maintenant est fonctionnel :wink: ) c'est d'affecter les valeurs de mes variables (qui sont saisies dans un formulaire) $nom2, $nom3, $nom4, ... jusque 9 qui sont utilisées plus loin pour les envoyer dans un mail et dans un fichier et maintenant quand j’exécute mon script il se passe ça;

il exécute tout mais me dit : undefined variable $nom2 : line 149.........
et ainsi de suite pour toutes les variables traitées par le for, ce qui est logique puisque dans le for il affecte les valeurs à
"nom".$cptr="blabla" au lieu de $nom.$cptr="blabla"

donc j'ai essayé de faire comme ceci mais évidemment ça ne marche pas :cry:

Code : Tout sélectionner

for($cptr=2;$cptr<=9;$cptr++){ $nom="nom".$cptr; if (isset($_POST[$nom])){ "$".$nom = $_POST[$nom]; } else{ "$".$nom = ""; } }
j’espère que ce que je veux faire est possible

Merci d'avance pour vos réponses

Avatar du membre
Mammouth du PHP | 1609 Messages

16 nov. 2018, 12:33

Il faut utiliser $$nom ce qui sera bien interprété en $nom2, $nom3, etc ;)
Développeur web depuis + de 20 ans

Eléphanteau du PHP | 10 Messages

16 nov. 2018, 12:50

Merci pour ta réponse mais ça ne fonctionne pas, maintenant il me met juste une page blanche :cry:

voici la version actuelle de ma boucle:

Code : Tout sélectionner

for($cptr=2;$cptr<=9;$cptr++){ $nom="nom".$cptr; if (isset($_POST[$nom])){ $$nom = $_POST[$nom]; } else{ $$nom = ""; } }
nb: le premier $ de $$nom apparait en noir et pas en rouge ^^??

Avatar du membre
Mammouth du PHP | 1609 Messages

16 nov. 2018, 13:23

C'est pourtant bien comme ça que fonctionnent les variables dynamiques.
http://php.net/manual/fr/language.varia ... riable.php

Si la page est blanche c'est probablement que tu as une erreur fatale qui ne s'affiche pas.
Tu peux soit regarder le log d'erreurs, soit ajouter un error_reporting(E_ALL) au début du script.
Développeur web depuis + de 20 ans

Eléphanteau du PHP | 10 Messages

16 nov. 2018, 14:20

Super, ça fonctionne!!
Il y avait un */ qui trainait dans le code #-o je l'ai supprimé et tout fonctionne nickel :D

Un tout grand merci pour ton aide :love1:

Je ne connaissais pas les variables dynamiques, ça va me simplifier la vie pour beaucoup de choses :D

Passe une bonne journée et un excellent weekend !!

Avatar du membre
Mammouth du PHP | 1609 Messages

16 nov. 2018, 14:26

Merci, bonne journée et bon weekend à toi également.
Développeur web depuis + de 20 ans

Eléphanteau du PHP | 10 Messages

19 nov. 2018, 12:32

Bonjour Saian, je sais que le sujet est résolu mais je tenais à te dire que grâce à toi, j'ai une page php qui faisait 268 lignes de code et qui maintenant n'en fait plus que 110 !!!
Et il y a encore bien d'autres pages dans lesquelles j'ai pu nettement alléger le code.

Encore un tout grand merci :-D :wink: