POST虽然但没有回应

时间:2012-11-30 17:01:24

标签: php javascript forms post if-statement

我有一个表单发布到页面,我有一个奇怪的问题从POST数据获取值。正如您所看到的,我可以在运行条件之前检查image_idvotefb_id_form是否都已设置。

javascript警报运行,所以我知道设置了三个变量。但我得到的是令人困惑的。我得到了第一个“工作”的警报窗口。然后我得到两个空白警报窗口。如果我尝试提醒他们,fb_id_form如何'设置'(通过条件)却没有价值?

if(isset($_POST['image_id']) && isset($_POST['vote']) && isset($_POST['fb_id_form'])){
    $image_id = $mysqli->real_escape_string($_POST['image_id']);
    $vote = $mysqli->real_escape_string($_POST['vote']);
    $fb_id_form = $mysqli->real_escape_string($_POST['fb_id_form']);
    echo "<script>alert('worked');</script>";
    echo "<script>alert('".$fb_id_form."');</script>";
    echo "<script>alert('".$_POST['fb_id_form']."');</script>";
}

这是表单数据(在同一页面上):

echo "<form method=\"post\" action=\"\">
<input type=\"hidden\" name=\"image_id\" value=\"".$id."\" />
<input type=\"hidden\" name=\"vote\" value=\"1\" />
<input type=\"hidden\" name=\"fb_id_form\" value\"".$fb_id."\" />
<input type=\"submit\" name=\"submitvote\" value=\"Vote\" />
</form>";

这是问题所在。我已经在表单前回显了$ fb_id RIGHT的警告,它给了我正确的值。当我提交它时,我认为价值会丢失。

5 个答案:

答案 0 :(得分:3)

如果isset包含空字符串,$_POST['fb_id_form']仍然为真。您想使用empty()

isset vs empty link

  

空与isset有点不同。首先,最明显的是它以与isset相反的方式工作,但除此之外还有更多。对于一切,isset将为PLUS返回false,它将返回true,对于空字符串,空数组,字符串“0”,数字0或false,它也将返回true。

答案 1 :(得分:2)

在分配变量时,设置变量(isset()为真),而不是NULL。这意味着包含空字符串(“”)的变量实际上是。请参阅documentation

要检查变量是否为空,请使用empty(),或使用$mystr === ""进行检查。

答案 2 :(得分:1)

您正在获得这些结果,因为即使存储在变量中的唯一内容是空字符串,isset()也会返回true。您的结果可能未被存储。这可能是因为您的表单可能有一个恢复页面的操作,该页面清空了使用空字符串保留变量的字段?我们必须看到你的HTML代码,以便给出更全面的答案......

答案 3 :(得分:1)

From the manual

  

isset - 确定变量是否已设置且不是NULL

否如果变量为""0false等,它会返回false。在您的示例中,很容易绕过完整性检查< / em>发布此数据:

image_id=&vote=&fb_id_form=

您需要额外的数据验证,您可以使用PHP filter functions。检查$_POST是否包含三个参数的示例代码,它们是整数:

$params = filter_input_array(INPUT_POST, array(
'image_id'   => array('filter' => FILTER_VALIDATE_INT, 'options' => array('default' => NULL)),
'vote'       => array('filter' => FILTER_VALIDATE_INT, 'options' => array('default' => NULL)),
'fb_id_form' => array('filter' => FILTER_VALIDATE_INT, 'options' => array('default' => NULL))
));

例如,有人将此数据发布到您的网页:

image_id=&vote=hello+world&fb_id_form=12345

然后上面的代码将返回:

array(3) {
  ["image_id"]=>
  NULL
  ["vote"]=>
  NULL
  ["fb_id_form"]=>
  int(12345)
}

PS:mysqli->real_escape_string无法验证您的数据。

答案 4 :(得分:0)

我认为这与分离前后的单引号有关。

echo "<script>alert(".$fb_id_form.");</script>";

echo "<script>alert(".$_POST['fb_id_form'].");</script>";