-1
votes

isset () renvoie toujours false

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?


0 commentaires

3 Réponses :


0
votes

PHP est probablement confus à cause du $ dans l'attribut name. Remplacez-le par un _ et le code doit s'exécuter comme prévu.


4 commentaires

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)



0
votes

Cela ne fera pas écho vrai:

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é.

Concerant $ param:

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 .


2 commentaires

$ 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 ''



0
votes

Doit être name = 'test ”. $ Param.”'

Ou préparez une variable avant la sortie du formulaire.

$ param_name = 'test_'. $ param;

Et utilisez Name = ". $ Param_name."


0 commentaires