当它们不应该是PHP时,isset和空函数正在执行代码

时间:2014-12-05 19:17:42

标签: php session

我刚刚在isset的{​​{1}}框中遇到了emptyphp的问题。我首先测试textarea数组是否包含任何文本。如果是,则将该文本作为索引$_POST存储在$_SESSION数组中。我刚尝试用空文本区域命中提交,而不是绕过我的条件语句,执行它并在我的数据库中放入空白数据。

继承人html:

comments

这在与表单相关的脚本中执行:

<p class="center"><textarea placeholder="450 characters max!" rows="10" cols="50" name="message" maxlength="450"></textarea></p>

这是另一个脚本中函数的一部分:

if (isset($_POST['message']) || !empty($_POST['message'])) {
                $_SESSION['comments'] = $_POST['message'];
            }

理论上,当我if (isset($_SESSION['comments']) || !empty($_SESSION['comments'])) { $comment = $_SESSION['comments']; // comment_id, user_id, comments $sql = "INSERT into comments (user_id, comments) VALUES ('{$user_id}', '{$comment}')"; $db -> query($sql); } 留空时,$_POST$_SESSION中不应有任何内容,因此以后不应该写入textarea进行中。我的代码中有很多这样的语句,从外观来看,它的行为方式也不一样。当我检查db时,db字段为空,但它创建的行包含commentscomments_id

2 个答案:

答案 0 :(得分:2)

检查是否为空。这也将处理isset:

if (!empty($_POST['message'])) {
    // Process
}

来自PHP的网站:如果变量不存在,则不会生成警告。这意味着empty()基本上是!isset($ var)||的简洁等价物$ var == false。

http://php.net/manual/en/function.empty.php

谢谢,

安德鲁

答案 1 :(得分:1)

如果我理解,请替换

if (isset($_POST['message']) || !empty($_POST['message'])) {

通过

if (isset($_POST['message']) && !empty($_POST['message'])) {