J'ai ce script php qui soumet un formulaire en fonction des données envoyées depuis un autre formulaire. Voici mon code:
function test($param) { // second form echo "<form action='' method='post'> <input class='btn btn-primary' type='submit' value='test' name='test$param'> </form>"; if(isset($_POST["test$param"])) { echo "true"; } } function test1() { return 4; } function test2() { for($x = 0; $x <= test1(); $x++) { test($x); } } // first form echo "<form action='' method='post'> <input type=radio class=form-check-input value=opt1 name=opt1>opt1 <input type=radio class=form-check-input value=opt2 name=opt2>opt2 <input type=submit value=Submit name=submit> </form>"; if(isset($_POST["submit"]) && isset($_POST["opt1"])) { test2(); }
Lorsque j'envoie le premier formulaire, le second s'affiche mais le problème est que l' if(isset($_POST["test$param"])
renvoie false (lorsque je soumets le second formulaire, il n'y a pas de true
imprimé). Pourquoi cela être?
3 Réponses :
PHP est probablement confus à cause du $ dans l'attribut name. Remplacez-le par un _ et le code doit s'exécuter comme prévu.
Je l'ai essayé et n'a pas fonctionné. J'ai un autre formulaire qui a une entrée avec un $ et cela fonctionne bien, le problème est juste lorsque j'essaye de soumettre un formulaire en fonction des données envoyées d'un autre formulaire
Qu'en est-il d'utiliser ($ var_name) au lieu d'utiliser la fonction isset?
vous voulez dire if($_POST["test_$param"])
?
Oui, vous pouvez également essayer quelque chose comme: if(! $_POST["test_$param"] !== false)
Parce que vous n'appelez pas la fonction test2()
après avoir soumis le deuxième formulaire. Aucun des formulaires ne peut donc être chargé.
Vous pouvez essayer de concaténer l'attribut $ _POST 'test' avec le $ param en utilisant un point ( .
) Comme ceci:
function test($param) { // second form echo "<form action='' method='post'> <input class='btn btn-primary' type='submit' value='test' name='test".$param."'> </form>"; if(isset($_POST["test".$param])) { echo "true"; } }
Assurez-vous que $ param est un type String .
$ param est de type int
, j'ai utilisé la fonction strval()
pour le transformer en str
et la forme ne fait toujours pas écho true
Il semble fonctionner en appelant la fonction test()
et en y mettant directement un paramètre. Lorsque vous soumettez l'un des cinq formulaires de test , il ne rappellera pas test2()
, je pense que c'est pourquoi il ne renvoie jamais `` vrai ''
Doit être name = 'test ”. $ Param.”'
Ou préparez une variable avant la sortie du formulaire.
$ param_name = 'test_'. $ param;
Et utilisez Name = ". $ Param_name."