2013-06-06 79 views
-2

工作,我有文字輸入等一個普通的HTML表單 我有正常的功能檢查對數據庫的用戶名和密碼登錄用戶。PHP功能僅適用於Chrome

我的註冊和登錄頁面一切工作完全在Chrome中,但是等。它刷新所有瀏覽器中的頁面,除了chrome。

我已將該網站上傳到免費虛擬主機中供您查看。 here

這是PHP登錄樣子:

function login() 
    { 
    if(isset($_POST["login"])) 
    { 
    connectDB(); 
    $username = mysql_real_escape_string($_POST["username"]); 
    $password = mysql_real_escape_string($_POST["password"]); 




    $result = mysql_query("SELECT username FROM users WHERE username = '$username' AND    password = '$password'"); 
    if(!$result) 
    { 
     die("query failed" . mysql_error()); 
    } 
    else 
    { 
     $count = mysql_num_rows($result); 
     if($count > 0) 
     { 
      $_SESSION['loggedIn'] = $username; 
      echo "<script>window.location='http://vuilhonde.hostzi.com/';</script>"; 
      header("Location:http://vuilhonde.hostzi.com/"); 
     } 
     else 
     { 
      return "Login failed.</br>* invalid username or password."; 
     } 
    } 
    mysql_free_result($result); 
} 
} 
+5

您是否嘗試過去除'echo「」'?另外,考慮在'header()'語句之後添加'exit;'。 –

+0

我現在試過了,還是一樣的問題。 –

+0

[**請不要在新代碼中使用'mysql_ *'函數**](http://bit.ly/phpmsql)。他們不再被維護[並被正式棄用](https://wiki.php.net/rfc/mysql_deprecation)。看到[**紅框**](http://j.mp/Te9zIL)?學習[*準備的語句*](http://j.mp/T9hLWi),並使用[PDO](http://php.net/pdo)或[MySQLi](http:// php。net/mysqli) - [這篇文章](http://j.mp/QEx8IB)將幫助你決定哪個。如果你選擇PDO,[這裏是一個很好的教程](http://j.mp/PoWehJ)。 –

回答

2

你不應該附和任何輸出前發送標題。瀏覽器如何處理這可能是你的問題的原因。

+0

好吧,我整理出來,仍然這樣做。感謝您的建議,雖然 –

+0

上面的代碼之前你有任何輸出嗎?你不能有**任何**輸出,甚至空格會使標題功能被忽略 – Ziarno

+0

它不僅僅是頭不工作,我在一個甚至沒有數據庫的新機器上運行這個代碼在Chrome中,當我說登錄時,它會迴應所有my_sql錯誤,因爲數據庫不存在。在Firefox和ie,它仍然只是點擊登錄刷新頁面。而不是回顯錯誤/例外 –

2

的幾個問題:

  1. Location:頭需要一個空間在冒號之後,所以它應該是`Location: http://whatever
  2. Location:頭僅隨後的瀏覽器時的響應具有適當的狀態碼,例如HTTP 301,302或303.現在您正在發送200,這意味着瀏覽器應該顯示文檔的內容。
  3. PHP的header函數只有在任何資源內容發送前才能正常工作。你之前使用的是echo,所以它不能正常工作。在某些PHP配置中,這會導致顯示錯誤。
  4. 但是,<script>代碼無效HTML和瀏覽器可能不會執行它(你缺少必要的<html>元素及其必要的孩子。
  5. 你應該散列你的密碼在你的數據庫,而不是將它們存儲明文,也您要執行不區分大小寫的謂詞。
+0

前兩個問題在不同程度上是無效的。 –

+1

是的。第二個問題是完全無效的,因爲PHP和/或Apache後處理標題會根據添加的位置標題添加適當的HTTP狀態。第一個問題是一個真正的問題,但可能由相同的後處理修復。但代碼中的問題清單仍然很長。 – Sven

+0

@Sven第一個也是假的。查看[RFC 2616](http://www.ietf.org/rfc/rfc2616.txt),第4.2節,第二段。 –

0

如果你在頭部分丟失的文件,例如

<script language="javascript" src="javascript/javascript.js"></script> 

如果這個文件不存在,它可能會導致一些瀏覽器s做一個頁面刷新。我會盡力重現這個錯誤(即將更新),或者您可以通過刪除該行並自行測試,並告訴我們結果如何。 (如果你這樣做,請告訴我們您的瀏覽器版本)

也如果

echo "<script>window.location='http://vuilhonde.hostzi.com/';</script>"; 

發生在<body>外,或<head>裏面WILL導致Firefox刷新。

+0

我在標題中有該代碼。該文件確實存在 –