2013-12-16 238 views
-3

我知道,这是众所周知的问题,但我已经试过无济于事:(不能更改头信息 - 头已经发出已

这里所有的解决方案是我的代码:提前

<?php 
ob_start(); 
if (!empty($_POST)) { // if submit 
    $username = $_POST['username']; 
    $userpass = $_POST['userpass']; 

    mysql_connect('localhost', 'root', 'root') or die(mysql_error()); 
    mysql_select_db('ita4') or die($connection_error); 

    function login($username, $userpass) { 
     $sqlQuery = "SELECT COUNT(userid) FROM users WHERE name='$username' AND password='$userpass' AND admin='t'"; 
     $runQuery = mysql_query($sqlQuery);  
     return (mysql_result($runQuery, 0) == 1) ? TRUE : FALSE; 
    } 

    if(login($username, $userpass)) { 
     setcookie("username", $username, time()+60*60*24*30); 
     $_COOKIE['username'] = $username; 
     echo "Me:".$_COOKIE['username']; 
     //echo "<script> location.replace('done.html'); </script>"; 
    } else { 
     echo "<script> alert('Your input data is not found!'); </script>"; 
    } 

} 
?> 
<html> 

<head> 
    <title>Login</title> 
    <link rel="stylesheet" type="text/css" href="style.css"> 
    <meta http-equiv=content-type content="text/html; charset=UTF-8"/> 
</head> 

<body> 

<div id="upper"> 
<a href="index.html">Home</a> &nbsp;•&nbsp; <a href="login.html">Login</a> &nbsp;•&nbsp; <a href="about.html">About</a> 

</div> 
<div id="container"> 
    <div id="loginDiv"> 
     <form action="login.php" onsubmit="return checkEmpty()" method="post" name="loginForm"> 
      <table> 
       <tr> 
        <td style="width:100px">Name: </td> 
        <td> 
        <input name="username" id="username" type="text" style="width:250px"></td> 
       </tr> 
       <tr> 
        <td style="width:100px">Password: </td> 
        <td> 
        <input name="userpass" id="userpass" type="password" style="width:250px"></td> 
       </tr> 
       <tr> 
        <td colspan="2" style="text-align:center"><input id="loginImg" type="image" src="images/loginButton.png"></td> 
       </tr> 
      </table> 
     </form> 
    </div> 
</div> 
<div id="lower"> 
    <br><br><br><br><br> 
    <p style="text-align:center">COPYRIGHTS © 2013 &nbsp;&nbsp;•&nbsp;&nbsp; WWW.HISHAM.WS</p> 
</div> 


<script type="text/javascript"> 
function checkEmpty() { 
    var username = document.getElementById("username").value; 
    var userpass = document.getElementById("userpass").value; 

    if(username=="" || username==null) { alert("You've to enter your name!"); } 
    else if(userpass=="" || userpass==null) { alert("You've to enter a password!"); } 
    else { return true; } 
    return false; 
} 
</script> 

</body> 

</html> 

谢谢

+2

你粘贴的代码中没有头部命令,但其原因总是被回显或打印标题命令发出之前的屏幕标题命令应该始终在任何HTML或其他文本已经打印到页面之前,如果display_errors打开,PHP错误消息也可能导致此错误,因为它们显示在页面之前头文件命令.. –

+0

我知道了,但仍然有这个错误!!警告:无法修改头信息 - 头文件已经发送(输出开始在C:\ AppServ \ www \ Assignement \ login.php:1)在C:\ AppServ \ www \ Assignement \ login.php 17行 –

+1

请参阅[已由PHP发送的头文件](http://stackoverflow.com/q/8028957)为什么'setcookie'不起作用,并且'ob_start'解决方法通常会失败秒。 – mario

回答

1

头必须是文件中的第一件事。您的代码应该看起来像

<?php header("header information"); ?> 
<html> 
... Your HTML HERE ... 
</html> 

更多信息可以在PHP文档here中找到。

+0

请看看我的代码。 –

+0

@HishamRamadan:你想让标题成为那个链接?将它插入我放置“标题信息”的地方。 – Jacobm001

+0

@HishamRamadan:您的代码中没有标题命令。将我发布的内容添加到文档的最顶部,这将设置标题。 – Jacobm001

1

据我所知,如果登录发生,你想redirect用户到另一个页面。

您可以使用javascript和/或meta重定向为了做到这一点。

这个问题也可能会有所帮助:How to redirect if user already logged in

0

你没有告诉导致该通知的行号。但我认为这是因为你在做setCookie()

您已经在使用ob_start(),这样很好。

我建议您注意的是,没有字符应该在文档的开头,在ob_start()之前。在开始<?php之前,请特别注意任何字符,甚至是空格或输入(换行)。让<?php成为您文件中的第一件事。

+0

我检查过不止一次,没有空格;这就是为什么我附上代码。 –

+0

@HishamRamadan你还检查了你的HTML源代码,看看你是否没有任何其他的通知/警告。 (通知/警告本身也算作输出。) –

2

因此,针对我最初的反应并不能帮助您,我决定继续前进并构建您的数据库和表格。我创建了一个名为ita4的新数据库,并添加了一个名为users的表格,其中包含四个字段(用户标识,名称,密码和管理员)。我添加了一个名为josh的用户,密码为josh,管理员设置为't'。然后我把你的文件放到我的本地开发环境中,并命名为login.php。然后,我在浏览器中加载了页面,并输入了用户名和密码的josh,并导致页面顶部显示“Me:josh”,登录页面仍显示在其下方。我没有得到任何错误。

如果你没有那么远,那么错误信息可能是因为数据库连接细节不好或者你的表没有这些字段之一。你在数据库连接代码之后有一个“或者死亡(mysql_error()”)

相关问题