2014-09-19 108 views
1

在我的登錄頁面上,如果有人用正確的detials登錄,他們將進入我的main.php,並且如果他們沒有正確的細節,他們應該會顯示一條錯誤消息,但是它會轉到黑屏!回聲沒有顯示

揣摩這一點對於年齡

<?php error_reporting(E_ALL); ini_set('display_errors', 1); 
session_start(); // Starting Session 
include("connect.php"); 
$error=''; // Variable To Store Error Message 
if (isset($_POST['login'])) { 
$username = $_POST['username']; 
if ($username == "") { 
echo "Username field is empty!"; 
header("Location: incorrectlogin.php"); 
}else{ 
// Define $username and $password 
$username=$_POST['username']; 
$password=$_POST['password']; 
// To protect MySQL injection for Security purpose 
$username = stripslashes($username); 
$password = stripslashes($password); 
$username = mysqli_real_escape_string($con,$username); 
$password = mysqli_real_escape_string($con,$password); 
// Establishing Connection with Server by passing server_name, user_id and password as a parameter 
$connection = mysqli_connect("localhost", "root", "", "game"); 
// Selecting Database 
$db = mysqli_select_db($con,"game"); 
$query = mysqli_query($con,"select * from users where password='$password' AND  username='$username'"); 
$rows = mysqli_num_rows($query) or die(mysqli_error($con)); 
if ($rows == 1) { 
$_SESSION['login_user']=$username; 
header("location: main.php"); 
} else { 
echo "That username or password is incorrect"; 
$error = "Username or Password is invalid"; 
} 
} 
} 

這可能只是我,但它看起來像它應該工作,任何想法?

+0

'if'在哪裏?和之前的代碼。你開始會議嗎? – GolezTrol 2014-09-19 20:14:00

+1

顯示空白屏幕通常意味着您在PHP中有語法錯誤。您也沒有向我們提供足夠的代碼供我們調試。向我們展示一個完整的片段。你在哪裏開始'if'?關閉'}'在哪裏? – Adam 2014-09-19 20:14:39

+1

^^^ _開發代碼時一定要確保PHP在屏幕上顯示錯誤。在腳本的頂部:'error_reporting(E_ALL); ini_set('display_errors',1);' – 2014-09-19 20:15:55

回答

2

的問題在於這裏的錯誤處理(諷刺)加入到下面的mysqli_num_rows()

$rows = mysqli_num_rows($query) or die(mysqli_error($con)); 

mysqli_num_rows()回報0(找不到行),該or die()這裏觸發。由於沒有錯誤,您從mysqli_error()沒有輸出。

但是零行返回不是錯誤狀態,因此不適合向其添加錯誤處理。您已經處理的行數與隨後返回:

if ($rows == 1) { 
    // etc... 
} 

...所以你可以安全地刪除or die(...)。在之前調用mysqli_query()時使用該錯誤處理表達式會更合適,如果SQL字符串無效,則實際可能發生錯誤。

我也將是失職,如果我沒有提到採用明文存儲用戶密碼的問題,因爲這意味着:

$password = mysqli_real_escape_string($con,$password); 

我建議,關於如何提高安全真正優秀的例子審查How do you use bcrypt for hashing passwords in PHP的密碼存儲空間。

+0

很好解釋。 – 2014-09-20 00:08:53

0

我認爲你缺少if聲明,U可以粘貼整個代碼(或)幾行字上方,上面一行的代碼爲S