有人能解释一下为什么PHP不能让一个表单包含在另一个表单处理逻辑中吗?

wfsdck30  于 2023-03-07  发布在  PHP
关注(0)|答案(1)|浏览(115)

我注意到当为WordPress构建一个自定义插件时-我不能将一个表单嵌套在另一个表单中。
例如,

?>
    <form method="POST">
    <input type="text" name="username" id="username" placeholder="Username" value="">
    <input type="submit" name="get_new_user" value="Submit">
    </form>

<?php

if (isset($_POST['get_new_user'])) {
    var_dump("Submit Successful");}

这样就可以工作了--当表单"get_new_user"提交时,会输出消息"Submit Successful"。
但是当我在一个窗体中嵌套一个窗体时-它就不工作了。
例如:

?>
    <form method="POST">
    <input type="text" name="username" id="username" placeholder="Username" value="">
    <input type="submit" name="get_new_user" value="Submit">
    </form>

    <?php

if (isset($_POST['get_new_user'])) {
    var_dump("Submit Successful");
    ?>

    <form method="POST">
        <input type="number" name="user_id" id="user_id" value="1"/>
        <input type="submit" name="submit_sensitive_data" value="Save Info" />
    </form>
    <?php

    if (isset($_POST['submit_sensitive_data'])) {
        var_dump("Second Submit Successful");}}

此嵌套形式submit-不起作用-第二条var_dump消息"Second Submit Successful"从未触发,我在debug.log中收到以下错误消息:

rtrim(): Passing null to parameter #1 ($string) of type string is deprecated..

现在,当我把第二个形式移到if语句之外时,如下所示:

?>
    <form method="POST">
    <input type="text" name="username" id="username" placeholder="Username" value="">
    <input type="submit" name="get_new_user" value="Submit">
    </form>

    <?php

   if (isset($_POST['get_new_user'])) {
       var_dump("Submit Successful");}

    ?>

    <form method="POST">
        <input type="number" name="user_id" id="user_id" value="1"/>
        <input type="submit" name="submit_sensitive_data" value="Save Info" />
    </form>
    <?php

    if (isset($_POST['submit_sensitive_data'])) {
        var_dump("Second Submit Successful");}

因为它在if语句之外-第二条消息输出,我没有收到错误消息。
有人能解释一下为什么像这样的东西在现代编程中不起作用吗?

r7xajy2e

r7xajy2e1#

所以当get_new_user存在时,你的逻辑呈现/处理二级表单,如果它不存在,它就不会进入你的IF语句。也许你需要if (isset($_POST['get_new_user']) or isset($_POST['submit_sensitive_data'])),但实际上,你的设计需要改进,没有必要在第一个条件中嵌套二级处理逻辑。你的二级表单POST没有get_new_user值,因此代码没有到达。
由于您要“深入”表单流,因此在主表单提交之前检测辅助表单提交...

<?php

if (isset($_POST['submit_sensitive_data'])) {

    var_dump("Second Submit Successful");}

elseif (isset($_POST['get_new_user'])) {

    var_dump("First Submit Successful");}

?>

<form method="POST">
    <input type="number" name="user_id" id="user_id" value="1"/>
    <input type="submit" name="submit_sensitive_data" value="Save Info" />
</form>

<?php } else { ?>

First Form / Default State

<form method="POST">
    <input type="text" name="username" id="username" placeholder="Username" value="">
    <input type="submit" name="get_new_user" value="Submit">
</form>

<?php }

相关问题