首先,不要认为它是一个多愁善感的问题。 我尝试了所有的解决方案,但没有任何帮助我。
我收到以下错误: “无法修改标题信息 - 已在第4行的/home/gogiavag/public_html/maxkapital/func.php中发送(由/home/gogiavag/public_html/maxkapital/user.php:7开始的输出)标题”
我转换为utf8的所有页面(没有BOM)。我在开始时没有领先的空间,但除了没有任何帮助。
这是我的代码:
的login.php
<?php session_start();?>
<html>
<head>
<meta charset="utf-8" />
<link rel="stylesheet" type="text/css" href="style.css"/>
</head>
<body>
<?php include "header.php"; require_once 'func.php';?>
<form method="POST" action="user.php">
<table style="margin-top: 10px;">
<tr>
<td><label for ="txtuser">name:</label></td>
<td><input type="text" style="padding:5px;" id="txtuser" name="txtuser" value="<?php if (isset($_SESSION['txtuser'])
){echo $_SESSION['txtuser'];}else{echo '';} ?>" </input></td>
</tr>
<tr>
<td><label for ="txtpassword">password:</label></td>
<td><input type="password" style="padding:5px;" id="txtpassword" name="txtpassword"> </input></td>
</tr>
<tr>
<td></td>
<td><input type="submit" value ="Enter" style="padding:5 55 5 55;background-color:#3f4194;color:#fff;" name="btnsubmit" id="btnsubmit"> </td>
</tr>
</table>
</form>
<?php
if (isset($_SESSION['err'])){
if ($_SESSION['err']===true){
echo gg_stringformat("<img src='error.png' style='margin-left:50px;'><img/> <span style='font-size:10pt; color:#ff0000'>{0}</span>", $_SESSION['errmsg']);
}
}
if(isset($_SESSION['err'])){unset ($_SESSION['err']);};
if(isset($_SESSION['errmsg'])){unset ($_SESSION['errmsg']);};
if(isset($_SESSION['txtuser'])){unset ($_SESSION['txtuser']);};
if(isset($_SESSION['txtpassword'])){unset ($_SESSION['txtpassword']);};
?>
</body>
</html>
user.php的
<?php session_start();?>
<html>
<head>
<meta charset="utf-8"/>
</head>
<body>
<?php require_once'func.php';
if (!isset($_POST['btnsubmit'])){
gg_redirect('block.php');
exit;
}
$user=$_POST['txtuser'];
$pass=$_POST['txtpassword'];
$_SESSION['txtuser'] = $user;
$_SESSION['txtpassword'] = $pass;
if (gg_trim($user)===''){
$_SESSION['err']=true;
$_SESSION['errmsg']='User name required';
gg_redirect('login.php');
exit;
}elseif(gg_trim($pass)===''){$_SESSION['err']=true;$_SESSION['errmsg']='Password required';gg_redirect('login.php');
exit;
}
echo $user, "<BR>", $pass;
?>
</body>
</HTML>
的header.php
<div id="divheader" >
<p> <img src="coins.png"></img>MAX_KAPITAL</p>
</div>
func.php 以...开头
<?php
mb_internal_encoding("UTF-8");
function gg_redirect($url){
header("location: $url");
}
...
当用户没有输入密码或用户名时,它会给我错误。
请在我的代码中找到错误。 提前谢谢。
对George Gogiava的看法
答案 0 :(得分:3)
PHP不是骗你的,你确实已经在user.php
的第2行开始输出了 - 你打印<html>
来回复那里。
然后您打印<head>
以及更多HTML,然后从gg_redirect()
调用函数func.php
!isset($_POST['btnsubmit'])
,这会导致错误,因为它不再可能发送重定向标题,因为输出已经开始。
在将任何发送回客户端(除了其他响应标头之前)之前,您需要检查输入并可能重定向。具体来说,在完成处理之前不要打印任何HTML可能的重定向:
<?php
// includes here - they must have no output!
// check if all is OK, set $redirectURL if redirect is needed to that URL
if ($redirectUrl) {
header("location: $redirectUrl");
exit(); // header() won't cause the script to stop executing
}
?>
<html>
<head>
...
重定向前包含的文件不能打印任何输出 - 甚至不是空行,因此它们必须都有<?php
作为文件的第一个字符,整个文件必须是PHP没有任何输出到响应体,并且必须以?&gt;结尾?之后没有换行符或空格(在这种情况下PHP可能会修剪一些空格但不依赖于此。)
调用session_start()
是安全的,可以在重定向之前(如果需要会话变量,则很有用),因为它不会发送任何响应正文。它可以设置一个cookie,但这没关系,因为cookie是在标题中发送的。
答案 1 :(得分:1)
虽然@Jiri已正确解释,但要更明确:
移动这个:
<?php require_once'func.php';
if (!isset($_POST['btnsubmit'])){
gg_redirect('block.php');
exit;
}
到你最好的PHP脚本,甚至可能像这样添加第一行:
<?php
if (!isset($_POST['btnsubmit'])){
gg_redirect('block.php');
exit;
}
require_once'func.php';
session_start();
?>
然后是你网页的其余部分。
修改强> func.php 正在添加标题,通过在重定向之前包含它,您会收到该错误。重定向后将inlude行移动到某个位置或检查 func.php ,查看上面编辑的代码