注意:未定义的索引

3

我有一个复选框,可以将帖子设为密码保护-

<p><strong><label for="password">Password protect?</label></strong> <input type="checkbox" name="password" id="password" value="1" /></p>

我的 PHP 尝试发帖 -

 $password = htmlspecialchars(strip_tags($_POST['password']));

我遇到了未定义索引错误。

现在,如果我先检查密码是否设置,执行时仍然会出现相同的错误-

$sql = "INSERT INTO blog (timestamp,title,entry,password) VALUES ('$timestamp','$title','$entry','$password')";

$result = mysql_query($sql) or print("Can't insert into table blog.<br />" . $sql . "<br />" . mysql_error());

我该如何修复它?我需要为每个字段(例如标题文本框等)都这样做吗?
4个回答

5
为什么要去除标签并转义布尔值?你可以像这样做:
$password = (isset($_POST['password']) && $_POST['password'] == 1) ? 1 : 0;

或者:

$password = isset($_POST['password']) ? (bool) $_POST['password'] : 0;

1

你收到了 未定义的索引 错误,因为你正在访问一个不存在的数组索引。

在设置值之前,你应该确保该值已经被设置:

if (isset($_POST['password'])) {
   $password = $_POST['password'];
}

我觉得使用if语句而不是条件运算符有点老派。:( - Anthony Forloney

1

第二次可能会收到未定义的变量警告。您可以确保$ password已设置,而不管_POST [xyz]是否设置。

$password = isset($_POST['password']) ? $_POST['password'] : '0';

请查看http://docs.php.net/ternary


0

只有在选择复选框时才会返回复选框的值。因此,如果未选择密码复选框,则 $_POST 数组中不存在键 password

你可以这样做:

$password = array_key_exists('password', $_POST) ? '1' : '0';

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接