PHP-setcookie无法修改标题信息
我是PHP新手,我试图研究这个问题,但也许我问得不对。。。我可以从其他帖子/说明中看出,在打印出HTML后,我无法使用user header()或setcookie() 我注释掉了标题“redirects”-有没有其他方法可以放在HTML后面? 目前失败的是setcookies: 我没有看到什么?我不断收到错误,但我的HTML在PHP之后:PHP-setcookie无法修改标题信息,php,header,setcookie,Php,Header,Setcookie,我是PHP新手,我试图研究这个问题,但也许我问得不对。。。我可以从其他帖子/说明中看出,在打印出HTML后,我无法使用user header()或setcookie() 我注释掉了标题“redirects”-有没有其他方法可以放在HTML后面? 目前失败的是setcookies: 我没有看到什么?我不断收到错误,但我的HTML在PHP之后: if (!isset($_COOKIE["user"])) { $sUserIdentity = $_POST["userIdentity"]; //us
if (!isset($_COOKIE["user"])) {
$sUserIdentity = $_POST["userIdentity"];
//username is not accepted as a get value
$sPassword = $_POST["password"];
$sEmail = $_POST["email"];
$cnn= odbc_connect("Driver={SQL Server};Server=$server;Database=$dbI", $user, $password);
//check to see if email account or username already used
$sql2 = "select id from i_user where email = '" . $sEmail . "' or username ='" . $sUserIdentity . "'";
//echo $sql2 ."<br>";
$result = odbc_exec($cnn, $sql2);
$id = odbc_result($result,"id");
if ($id == ''){
$cnnCreate = odbc_connect("Driver={SQL Server};Server=$server;Database=$dbI", $user, $password);
$sqlCreate = "insert into i_user (username,email,salt,active) values ";
$sqlCreate .= "(";
$sqlCreate .= "'" . $sUserIdentity . "',";
$sqlCreate .= "'" . $sEmail . "',";
$rsCreate = odbc_exec($cnnCreate, $sqlCreate);
$sql2 = "select * from i_user where email = '" . $sEmail . "' and username ='" . $sUserIdentity . "'";
//echo $sql2 ."<br>";
$result = odbc_exec($cnn, $sql2);
$expire=time()+60*60*24*30;
setcookie("uid", odbc_result($result,"id"), $expire);
setcookie("user", odbc_result($result,"username"), $expire);
if ($rsCreate){
$sMsg = "congratulations " . $_COOKIE["user"] . " and welcome ";
}
else {
$sMsg = "There was an error with the query";
}
}else{
$sMsg = "User " . $id . " already in DB";
//header('Location: ../fec/createuser.php?error=id');
}
}
//echo $sqlCreate;
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>User Form</title>
<script type="text/javascript" src="../js/jquery-1.9.1.js"></script>
<script type="text/javascript" src="../js/jquery-ui-1.10.2.custom.min.js"></script>
<link rel="stylesheet" href="../css/styles.css" type="text/css">
<style>
</style>
</head>
<body>
</body>
</html>
if(!isset($\u COOKIE[“用户”])){
$sUserIdentity=$\u POST[“用户身份”];
//用户名不被接受为get值
$sPassword=$\u POST[“密码”];
$sEmail=$_POST[“电子邮件”];
$cnn=odbc_connect(“驱动程序={sqlserver};服务器=$Server;数据库=$dbI”,$user,$password);
//检查是否已使用电子邮件帐户或用户名
$sql2=“选择来自i_用户的id,其中电子邮件=”“$sEmail.”或用户名=”“$sUserIdentity.””;
//echo$sql2。“
”;
$result=odbc_exec($cnn,$sql2);
$id=odbc_结果($result,“id”);
如果($id=''){
$cnnCreate=odbc_connect(“驱动程序={SQL Server};服务器=$Server;数据库=$dbI”,$user,$password);
$sqlCreate=“插入i_用户(用户名、电子邮件、salt、活动)值”;
$sqlCreate.=“(”;
$sqlCreate.=“'.$sUserIdentity.”,“;
$sqlCreate.=“'”、“$sEmail.”;
$rsCreate=odbc\u exec($cnnCreate,$sqlCreate);
$sql2=“选择*来自i_用户,其中email=”“$sEmail.”和username=”“$sUserIdentity.”;
//echo$sql2。“
”;
$result=odbc_exec($cnn,$sql2);
$expire=time()+60*60*24*30;
setcookie(“uid”、odbc_结果($result,“id”)、$expire);
setcookie(“用户”,odbc_结果($result,“username”),$expire);
如果($rsCreate){
$sMsg=“祝贺您”$\u COOKIE[“用户”]”和“欢迎您”;
}
否则{
$sMsg=“查询出错”;
}
}否则{
$sMsg=“用户”$id。“已在数据库中”;
//标题('Location:../fec/createuser.php?error=id');
}
}
//echo$sqlCreate;
用户表单
确保为什么不使用输出缓冲
<?php
ob_start();
?>
<html>
<body>
...
</body>
</html>
<?php
ob_end_flush();
?>
...
这会将任何输出放入缓冲区,只要缓冲区未刷新,就可以修改头信息。
这也可以避免在写入标头之前向输出发送PHP警告或错误消息时出现问题。如果在标头()之前出现错误,则与在标头()之前打印html具有相同的效果。我得到的唯一错误是在setcookies()上-这是第一个也是唯一的错误可能是在setcookies()之前打印了一些空格。在修改标题之前禁止任何输出,可能是在我认为你是对的之前加载的其他文件中。虽然没有可见空间。我已将文件保存为UTF-8编码-当我将其视为十六进制时,我们需要从脚本的开始处查看正在执行的操作,以提供可靠的建议关于修复。@RiggsFolly看到上面他最后的评论——我怀疑是BOM.Woops,错过了她的评论。对不起