我的代码出了什么问题?当我运行它时,它告诉我:"注意:未定义的索引:访问"在正文部分的if($_COOKIE["visits"] == 1)
和$numOfVisits = $_COOKIE["visits"];
行。
<!DOCTYPE html>
<?php
if (!isset($_COOKIE["visits"]))
setcookie("visits", 1, time()+3600*24*365);
else{
$visits = $_COOKIE["visits"] + 1;
setcookie("visits",$visits, time()+3600*24*365);
}
?>
<html lang="en">
<head>
<title>numOfVisits</title>
<meta charset="utf-8"/>
</head>
<body>
<?php
if($_COOKIE["visits"] == 1)
echo("Welcome to my webpage! It is your first time that you are here.");
else{
$numOfVisits = $_COOKIE["visits"];
echo("Hello, this is the #$numOfVisits time that you are visiting my webpage.");
}
?>
</body>
</html>
答案 0 :(得分:1)
问题是您只能在将任何标头从服务器发送到客户端之前设置cookie或启动会话。 (setcookie
上的See documentation)
setcookie()定义了一个与其他HTTP头一起发送的cookie。与其他标头一样, cookie必须在脚本的任何输出之前发送(这是协议限制)。 这要求您在输出之前调用此函数,包括和标记以及任何空格。
这在实践中意味着您在输出内容后无法设置cookie。在这种情况下,您需要在设置Cookie之前输出<!doctype html>
。
解决方案是在输出任何HTML之前设置之前的。
解决方案:
<?php
if (!isset($_COOKIE["visits"]))
setcookie("visits", 1, time()+3600*24*365);
else{
$visits = $_COOKIE["visits"] + 1;
setcookie("visits",$visits, time()+3600*24*365);
}
?>
<!doctype html>
...