【问题标题】:No POST data being returned when hidden input type is present存在隐藏输入类型时不返回 POST 数据
【发布时间】:2010-07-13 04:26:18
【问题描述】:

我认为我的代码有错误,或者我的 PHP 或 Apache 设置不正确。

当我提交包含隐藏字段的表单时,我的 $_POST 数组中没有任何数据...

当我注释掉代码中的隐藏字段时,正确返回 POST 数据...

HTML 表单

<form action='/utils/login.php ' method='POST'>
<table>
    <tr>
        <td colspan='2'>
            Login
        </td>
    </tr>
    <tr>
        <td>
            Username
        </td>
        <td>
            <input type='text' name='userid' value='' size='12' />
        </td>
    </tr>
    <tr>
        <td>
            Password
        </td>
        <td>
            <input type='password' name='password' size='12' />
        </td>
    </tr>
    <tr>
        <td>
            <input type='hidden' name='formtype' value='login' />
        </td>
    </tr>
    <tr>
        <td>
            <input type='submit' value='Submit' />
        </td>
    </tr>
</table></form>

这是在 PHP 中处理它的代码...

foreach ($_POST as $var => $value) {
     echo "$var = $value<br>";
} 

我在我的服务器上使用 PHP 5 和 Apache 2.2。

有什么想法吗?

编辑...

我已经把它缩小到这个......

$command = $_POST['formtype'];

当我从 $_POST 中删除 @ 符号时,我收到以下错误...

注意:未定义变量:第 17 行 C:\webroot\utils\login.php 中的 formtype

如果我注释掉该行,POST 数据将毫无问题地传递到程序中。

【问题讨论】:

  • 您是否关闭了您的&lt;form&gt;?我没有看到结束标签。
  • 隐藏字段不需要另一个表格单元格...
  • 是的。我的页面中有结束的 标记。我忘记将它粘贴到 SO 帖子中。这不是表单的问题。
  • 更新 - 我尝试关闭 E_Notice 错误,但没有奏效。当我尝试分配或访问 POST 变量时会出现问题。
  • 您可以尝试将其更改为普通字段,并更改该字段的名称,看看是否有效。可能有助于缩小范围

标签: php apache post hidden


【解决方案1】:

我建议将您用于显示$_POST 内容的代码更改为单个调用:

print_r($_POST);

当您显示数组的全部内容时,这比使用回显的循环要好,因为它将显示数组每个级别的每个值。

另外,正如评论中提到的,请确保关闭 html 中的表单。

【讨论】:

  • 谢谢。我认为这不是页面不返回任何帖子数据的原因。请记住,当我完全注释掉 元素时,会按预期返回 POST 数据。
【解决方案2】:

你从来没有关闭你的&lt;form&gt;标签。

我现在看到有人在 cmets 中以一英里的优势击败了我。不过,这是正确的答案。

【讨论】:

  • 我可以看到表单标签已关闭。这里面有没有错。我遇到了同样的问题,请阅读您的答案。
【解决方案3】:

您是否尝试过将隐藏的输入从表格中取出并将其放在打开的表单标记之后?

你也可以使用:

var_dump($_POST);

...查看帖子变量。

此外,如果任何输入是动态创建的,或者 POST 变量中可能缺少任何输入...您可以使用:

variable = 'default';
if(isset($_Post['variable'])) $variable = $_POST['variable'];

...动态设置可能存在或不存在的变量。

【讨论】:

  • 将隐藏的输入直接放在表单标签之后解决了我遇到的类似问题..谢谢!
【解决方案4】:

我更改了表单以使用 Twig。更改后的表单未通过 post 发送隐藏的输入值。 如果有人遇到同样的问题,我通过以下方法解决了。

原行是:

<input hidden name='foo[{{ loop.index }}][id]' value='{{id}}' />

我是通过设置 type='hidden' 来卖的:

<input type='hidden' name='foo[{{ loop.index }}][id]' value='{{id}}' />

【讨论】:

    【解决方案5】:

    请尝试:

    <form action="..." method="post" enctype="application/x-www-form-urlencoded">
    

    【讨论】:

      猜你喜欢
      • 2018-01-24
      • 1970-01-01
      • 1970-01-01
      • 2011-03-27
      • 1970-01-01
      • 2018-02-04
      • 2019-11-11
      • 2019-12-24
      • 2016-11-05
      相关资源
      最近更新 更多