2014-03-13 106 views
1

有問題,我登錄的PHP代碼..PHP登錄腳本不會直接登錄成功頁面提交一次

我有一個提交到「checklogin.php」,這是下面的代碼一種基本形式。一旦你提交它只是停留在「checklogin.php」上的登錄憑證,並且不顯示任何內容。有沒有人有任何想法?

<?php 

$host="localhost"; // Host name 
$username="alex"; // Mysql username 
$db_name="test"; // Database name 
$tbl_name="members"; // Table name 

// Connect to server and select databse. 
mysql_connect("$host", "$username")or die("cannot connect"); 
mysql_select_db("$db_name")or die("cannot select DB"); 

// Define $myusername and $mypassword 
$myusername=$_POST['myusername']; 
$mypassword=$_POST['mypassword']; 

// To protect MySQL injection (more detail about MySQL injection) 
$myusername = stripslashes($myusername); 
$mypassword = stripslashes($mypassword); 
$myusername = mysql_real_escape_string($myusername); 
$mypassword = mysql_real_escape_string($mypassword); 
$sql="SELECT * FROM $tbl_name WHERE username='$myusername' and password='$mypassword'"; 
$result=mysql_query($sql); 

// Mysql_num_row is counting table row 
$count=mysql_num_rows($result); 

// If result matched $myusername and $mypassword, table row must be 1 row 
if($count==1){ 

// Register $myusername, $mypassword and redirect to file "login_success.php" 
session_register("myusername"); 
session_register("mypassword"); 
header("location:login_success.php"); 
} 
else { 
echo "Wrong Username or Password"; 
} 

?> 
+0

有時在代碼導致問題的空行,嘗試使用其他的方式來重定向。標題需要成爲「html」結果中的第一行 – esdebon

+0

此代碼來自與其他人['一天前發佈的帖子](http://stackoverflow.com/q/22354466/)相同的地方。我沒有碰這個;太多移動部件。 ['This'](http://www.phpeasystep.com/phptu/6.html)最有可能是它的起源。 –

+1

@ Fred-ii- Goddamnit。我們可以找出他的網站,並打他臉請他很好地打倒那個可怕的網站。 – PeeHaa

回答

0

我注意到的第一件事是「保護MySQL的注入」 ...... mysql_real_escape_string也不是100%安全的。你應該使用prepared statements

檢查您的「?>」後面是否沒有空格,並確保在執行標頭之前沒有「回顯」任何內容(「location:login_success.php」);事情。

+2

你能解釋一下「mysql_real_escape_string不是100%安全」還是提供引用? – symcbean

+0

@symcbean在StackOverflow中有一個大的線程解釋它,看看它:[參考](http://stackoverflow.com/questions/110575/do-htmlspecialchars-and-mysql-real-escape-string-注意:請注意我說這不是100%安全,並不是說它對每一種情況都是不安全的,準備好的陳述只是一個更好更優雅的選項。 –

+0

好的 - 有趣。雖然大部分錯誤。根據不同的實現,可以解析客戶端(與使用msq – symcbean

0

的,如果在最後聲明中只允許3種可能性:

  1. 代碼致命的失敗,從來沒有到「如果」語句
  2. 的密碼不匹配,你會得到一個信息這樣說
  3. 密碼被驗證,但頭()調用一個錯誤

失敗因爲你得到了一個空白頁,這意味着1或3發生了。在這兩種情況下,都會報告的某處。你的問題是你不知道如何找到PHP試圖告訴你的消息。

(順便說一句,答案是最有可能的是,腳本生成一些輸出之前的所有頭(),所以它失敗)