【问题标题】:$_POST behavior strange - it works opposite as expected?$_POST 行为奇怪 - 它按预期工作?
【发布时间】:2015-03-14 22:07:49
【问题描述】:

我有下面的 html 表单并将其提交到 php 文件 (workcard_done.php)。我的问题是当我提交代码时它会回显 else echo "nothing here"; 如果我在 isset 上设置 not (!) 运算符,我会得到想要的结果吗?它应该适用于if(isset($_POST['submit']) && !empty($_POST['submit']))

谁能告诉我下面的代码有什么问题让我发疯。

<!DOCTYPE html>
<HTML>
<head>
<title>yoyo</title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
</head>
<body>
<form action="workcard_done.php" name="workCard_open" method="POST">
<br>
<table>
<tr>
<th>title 1</th>
<th>title 2</th>
</tr>
<tr>
<td><input type="text" name="name[]" value="" ></td>
<td><input type="text" name="price[]" value="" class="matr_price"/></td>
</tr>
<tr>
<td><input type="text" name="name[]" value="" ></td>
<td><input type="text" name="price[]" value="" class="matr_price"/></td>
</tr>
<tr>
<td>Total incl. VAT:</td>
<td><span type="text" name"sum[]" id="sum">0</span></td>
</tr>
</table>
<input type="submit" name"submit" class="submit" value="Done"/>
</form>
</body>
</html>

workcard_done.php

<!DOCTYPE html>
<html>
<head>
<title>title...</title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<link rel="stylesheet" type="text/css" href="style.css">
</head>
<body>
<pre>
<?php
error_reporting(E_ALL);
if(isset($_POST['submit']) && !empty($_POST['submit'])) {
  $name = $_POST['name'];
  $price = $_POST['price'];
  $user = $_POST['user'];

  print_r($name);
  echo "<br>";  
  print_r($price);
  echo "<br>";
  print_r($user);
  echo "<br>";
}
else {
  echo "nothing here";
}
?>
</pre>
</body>
</html>

如果在 isset 上设置 not (!) 运算符,我会得到以下想要的结果。

Array
(
    [0] => slange
    [1] => rfd
)
Array
(
    [0] => 123
    [1] => 200
)
Array
(
    [user] => 2
)

【问题讨论】:

  • ! isset($_POST['submit']) &amp;&amp; ! empty($_POST['submit']) 始终计算为FALSE。如果$_POST['submit'] 未设置,则它为空,! empty() 计算结果为FALSE。如果已设置,则 ! isset() 评估为 FALSE。每种方式的完整表达式都是FALSE

标签: php arrays forms post isset


【解决方案1】:

您忘记了 = 作为其他答案状态,但您也在尝试访问 $_POST['user'],而您的输入字段都没有名称 user

【讨论】:

    【解决方案2】:

    检查 $_POST,而不是 $_POST['submit']。

    如果用户按下回车键怎么办?提交按钮永远不会触发,并且该值将不存在。

    顺便说一句,不要忘记 CRSF 令牌。

    【讨论】:

    • 检查$_POST总是正确的,因为空字段仍然会返回一个长度为0的字符串
    • isset($_POST) => 是的,总是正确的!empty($_POST) => 不,只有当它被填满时。因此,这种方式优于检查提交按钮。
    • 如果用户在文本或密码字段上按下Enter,则提交表单并发送submit 按钮的值(如果未禁用)。如果表单包含多个submit 按钮,则发送未禁用的第一个按钮。
    【解决方案3】:

    检查这行 HTML:

    <input type="submit" name"submit" class="submit" value="Done"/>
    

    提交按钮没有名称,这就是isset($_POST['submit']) == FALSE 的原因。在它所属的地方添加等号 (=),你的问题就会突然消失。

    【讨论】:

    • 使用print_r($_POST); 查看您的脚本从浏览器收到的内容。
    • ...对不起@axiac 我的错,你是对的。现在一切正常。谢谢。
    【解决方案4】:

    您在&lt;input type="submit" name"submit" 上错过了=

    【讨论】:

    • ...对不起@JimboSlice 我的错,你是对的。现在一切正常。谢谢。
    猜你喜欢
    • 1970-01-01
    • 2019-08-25
    • 2018-08-20
    • 2021-05-31
    • 2021-10-15
    • 1970-01-01
    • 2016-10-04
    • 2022-10-03
    • 1970-01-01
    相关资源
    最近更新 更多