【问题标题】:isset() is always returning falseisset() 总是返回 false
【发布时间】:2020-11-15 16:56:10
【问题描述】:

我有这个 php 脚本,它根据从另一个表单发送的数据提交一个表单。 这是我的代码:

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();
}

当我提交第一个表单时,会显示第二个表单,但问题是 if(isset($_POST["test$param"]) 语句返回 false(当我提交第二个表单时,没有打印 true)。 为什么会这样?

【问题讨论】:

    标签: php forms post http-post


    【解决方案1】:

    PHP 可能会因为 name 属性中的 $ 而感到困惑。将其替换为 _,代码应按预期运行。

    【讨论】:

    • 试过了,没用。我有另一个带有 $ 输入的表单,它运行良好,问题是当我尝试根据从另一个表单发送的数据提交表单时
    • 用 ($var_name) 代替 isset 函数怎么样?
    • 你的意思是if($_POST["test_$param"])
    • 是的,你也可以试试:if(! $_POST["test_$param"] !== false)
    【解决方案2】:

    它不会回显真实:

    因为您在提交第二个表单后没有调用test2() 函数。所以无法加载任何表单。

    关于 $param :

    您可以尝试使用点 (.) 将 $_POST 属性“test”与 $param 连接起来,如下所示:

    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";
        }
    }
    

    确保 $paramString 类型。

    【讨论】:

    • $param 的类型为int,我使用strval() 函数将其tarnsform 为str,但表单仍然没有回显true
    • 它似乎可以通过调用test() 函数并将参数直接放入其中来工作。当您提交五个 test 表单之一时,它不会再次回调test2(),我认为这就是它永远不会返回'true'的原因
    【解决方案3】:

    应该是 name='test”.$param.”'

    或者在表单输出之前准备一个变量。

    $param_name = ‘test_’。 $参数;

    并使用 名称=“.$param_name。”

    【讨论】:

      猜你喜欢
      • 2016-02-26
      • 2017-01-23
      • 2013-12-03
      • 1970-01-01
      • 1970-01-01
      • 2012-12-14
      • 2016-07-20
      • 2021-11-05
      • 2018-11-05
      相关资源
      最近更新 更多