注意:未定义的索引

时间:2010-01-31 18:42:04

标签: php mysql

我有一个可以设置密码保护的复选框 -

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

My 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 个答案:

答案 0 :(得分:5)

为什么要剥离标记并转义布尔值?你可以这样做:

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

或:

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

答案 1 :(得分:1)

您可能第二次收到未定义的变量警告。无论是否设置了_POST [xyz],您都可以确保设置了$ password。

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

请参阅http://docs.php.net/ternary

答案 2 :(得分:1)

您收到未定义索引,因为您访问的是不存在的数组索引。

在设置之前,您应该确保设置了值:

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

答案 3 :(得分:0)

如果选中该复选框,则仅返回复选框值。因此,如果未选中密码复选框,则password数组中不存在密钥$_POST

你可以这样做:

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