Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/249.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php &引用;未定义索引“;错误_Php - Fatal编程技术网

Php &引用;未定义索引“;错误

Php &引用;未定义索引“;错误,php,Php,我这样做是为了让用户可以在登录表单上检查“记住我”,并设置cookies。现在,如果他们注销,它会将他们引导到logout.php,cookies应该被删除。除了我收到这些错误消息之外,一切都正常 注意:未定义索引:第6行C:\xammp\htdocs\mine\logout.php中的用户名 注意:未定义索引:第7行C:\xammp\htdocs\mine\logout.php中的密码 我的logout.php代码是 <?php session_start(); if (isset(

我这样做是为了让用户可以在登录表单上检查“记住我”,并设置cookies。现在,如果他们注销,它会将他们引导到logout.php,cookies应该被删除。除了我收到这些错误消息之外,一切都正常

注意:未定义索引:第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!');
}
只需使用
isset($\u POST['username'])?$\u POST['username']:''
而不是
$\u POST['username']

isset($\u POST['password'])?$\u POST['password']:''
而不是
$\u POST['password']


请参阅:

如果您的用户想要注销,他们不太可能同时将用户名或密码提交到注销页面,因此
$\u POST['username']
$\u POST['password']
将为空,因此会出现错误

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



这将使它们注销并重定向到您的frontpage。

这是因为
$\u POST
superglobal没有
用户名和
密码变量

我猜,当您从index.php链接到logout.php时,您并没有发布到logout.php(因此此调用将不包含POST变量)

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

session_start()之后的index.php

然后在logout.php中,您可以使用
$\u会话
超全局而不是
$\u POST
清除这些值


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

这不会清除他的cookies,这是他提到的验证登录用户的方法,使用
false
作为第三个参数不会清除cookie,它将被注册为
0
,从而使cookie在会话结束前保持活动状态。使用过去的时间,例如
time()-3600
<?php
session_start();
setcookie('username', '', time()-3600, '/');
setcookie('password', '', time()-3600, '/');
session_write_close();
header("Location: /");
?>
if (isset($_POST['username']) && isset($_POST['password'])) {
    $_SESSION['username'] = $_POST['username'];
    $_SESSION['password'] = $_POST['password'];
}