2013-12-16 233 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()」)

相關問題