2010-01-31 72 views
3

我有一个复选框,可以使后密码protected-注意:未定义指数

<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'])); 

我得到未定义指数错误。

现在,如果我尝试先检查是否设置密码,我得到executing-

$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()); 

如何解决它同样的错误?我是否必须为标题文本框等所有字段执行此操作?

回答

5

为什么要剥离标签并转义布尔值?你可能只是不喜欢这样:

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

或:

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

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

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

看到http://docs.php.net/ternary

1

您会收到未定义指数因为你访问一个不存在的数组索引。

您应该确保该值设置它之前设置:如果选中该复选框只返回

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

我觉得老同学去反对有条件的经营者'if'声明路线。 :( – 2010-01-31 18:50:24

0

一个复选框值。因此,如果未选中密码复选框,则$_POST阵列中不存在密钥password

你可以这样做:

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