2013-10-08 50 views
-1

好了,我試圖讓一個登錄腳本,但是當我執行它得到這兩個錯誤:頭錯誤PHP

警告:session_regenerate_id()[function.session-再生-ID]:不能再生會話ID - 已在/home/henrirkm/public_html/login/login.php在線29發送的頭文件

警告:無法修改頭信息 - 頭文件已經發送(輸出開始於/ home/henrirkm/public_html/res/mysql.php:2)in /home/henrirkm/public_html/login/login.php on line 47

我的代碼如下:

<?php 

session_start(); 

// MYSQL database connection 

include "../res/mysql.php"; 

$username = mysql_real_escape_string($_POST['username']); 

$password = mysql_real_escape_string($_POST['password']); 



//select from login table 

$qry = "SELECT * FROM users WHERE username = '$username' AND password = '$password'"; 

$result=mysql_query($qry); 



//Check whether the query was successful or not 

    if($result) { 

     if(mysql_num_rows($result) == 1) { 

      //Login Successful 

      session_regenerate_id(); 

      $member = mysql_fetch_assoc($result); 

      $_SESSION['id'] = $member['id']; 

      $_SESSION['username'] = $member['username']; 

      $_SESSION['email'] = $member['email']; 

      session_write_close(); 







      header("location: ../home/index.php"); 

      exit(); 

     }else { 

      //Login failed 

      header("location: index.php?info=loginerror"); 

      exit(); 

     } 

    }else { 

     die("Query failed"); 

    } 

?> 

請幫幫我!感謝:-)

+0

我覺得找你調用兩次'session_regenerate_id()'如果你是在任何包含文件執行它看起來和會話必須是您的腳本文件中的第一件事是沒有空格 –

+1

你有沒有試過谷歌'頭已經發送'? –

+0

你可以嘗試移動'header(「location:../ home/index.php」);''session_write_close();'之前' – Joseph

回答

0

按照PHP文檔指出在:http://php.net/manual/en/function.header.php

請記住,標題()必須被調用時 發送的任何實際輸出之前,無論是普通的HTML標籤,在一個文件中的空行,或從PHP。 使用include或require, 函數或其他文件訪問函數讀取代碼,並在調用header()之前輸出空格或空行 是非常常見的錯誤。使用單個PHP/HTML文件時存在相同的問題 。

只需在腳本開頭傳遞您的標題,這將確保標題正確傳遞並且可以下載文件。

+0

OP的'location:'頭依賴於PHP邏輯,不能簡單地移動到腳本的開頭。你能確定上面代碼中的哪一行會發送會影響'header'調用的輸出嗎? – Joseph

+0

@Joseph:我同意這個頭文件依賴於PHP邏輯,但是通過將它放在最開始的位置可以避免輸出任何會輸出頭文件的輸出。在這裏,'include'文件也可以有一個輸出發送,然後再渲染頭部聲明,否則在腳本中無用。因此,我個人認爲,我會始終使用邏輯記住標題不應該被修改。 – aaron

+0

我明白,但該解決方案不適用於此問題,正如AbraCadaver所述,可以通過其他方式解決。有時,重新定位'header'調用是不可行的。 – Joseph

3

它是輸出這裏:RES/mysql.php線2

+0

這個。該錯誤明確告訴你輸出開始的位置。 –

1

如果回聲的任何內容(除非使用的是輸出緩衝)時,報頭也將被髮送。

在您發佈的代碼中,我沒有看到任何回顯的內容,但您還包括../res/mysql.php。如果回聲內容,您的標題將通過僅包含該文件發送。

請注意,您實際上並不需要回應任何內容。打開<?之前或關閉?>之後的任何空格都可能導致此問題。因此,通常建議完全取消關閉?>

-1

這個錯誤清楚地告訴ü所述OP已經開始

output started at /home/henrirkm/public_html/res/mysql.php:2