“未定义的索引”错误

时间:2012-04-13 01:03:12

标签: php

我这样做是为了让用户可以在登录表单上查看“记住我”并设置Cookie。现在,如果他们退出,它会将他们指向logout.php并删除co​​okie。这一切都有效,除了我收到这些错误消息。

  

注意:未定义的索引:第6行的C:\ xammp \ htdocs \ mine \ logout.php中的用户名

     

注意:未定义的索引:第7行的C:\ xammp \ htdocs \ mine \ logout.php中的密码

我的logout.php代码是

<?php

session_start();

if (isset($_SESSION['username'])) {
    setcookie('username', $_POST['username'], false, '/');
    setcookie('password', $_POST['password'], false, '/');
    session_destroy();
    echo "You've benn logged out. <a href='index.php'>Click here</a> to return.";
} else {
    die ('You are not logged in!');
}

3 个答案:

答案 0 :(得分:0)

只需使用isset($_POST['username'])?$_POST['username']:''代替$_POST['username']

isset($_POST['password'])?$_POST['password']:''代替$_POST['password']

<小时/> 请参阅:Ternary Operator

答案 1 :(得分:0)

如果您的用户想要注销,他们也不太可能将他们的用户名或密码提交到注销页面,因此$_POST['username']$_POST['password']将为空,因此您会收到错误。< / p>

但是,您不需要知道值(实际用户名或密码)以取消设置cookie,您只需要知道密钥(字面意思是“用户名”和“密码”)。

<?php
session_start();
setcookie('username', '', time()-3600, '/');
setcookie('password', '', time()-3600, '/');
session_write_close();
header("Location: /");
?>

这会将它们注销并将它们重定向到您的首页。

答案 2 :(得分:-1)

这是因为$_POST超全球尚未获得usernamepassword个变量。

我猜测当你从index.php链接到logout.php时你没有POST到logout.php(因此这个调用不会有POST变量)。

您需要做的是在会话中保存用户名和密码(或其他形式的持久存储):

在session_start();

之后

index.php

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

然后在logout.php中,您可以使用$_SESSION超全局而不是$_POST来清除这些值。

顺便说一句,我真的不知道你为什么要将用户名和密码设置为cookie,但这不仅仅是你的问题。