2015-04-20 33 views
0

我正在學習如何使用mysql,並遇到使用php進行基本登錄的問題。我使用的是mysqli的對象如我connection.php使用php和mysql進行簡單登錄

$user = "root"; 
$pass = "root"; 
$db = "mktraining"; 

$conn = new mysqli("localhost",$user,$pass,$db); 

隨着我當前的代碼,我可以順利通過的形式通過用戶名和密碼,並將它們添加到數據庫中,如果他們不是已經存在。但是,當我輸入已經在數據庫中的用戶名和密碼時,我沒有得到正確的結果。我的登錄檢查如下。

include "connection.php"; 

//get info from form and set variables 
$username = $_POST['username']; 
$password = $_POST['password']; 

//database check for login 
$query = "SELECT * FROM project6 WHERE username = '$username' AND password = '$password'"; 

$result = $conn->query($query); 
var_dump($result); 

//get the number of rows that corespond to entered usersame and password 
$count = $result->num_rows; 

//implement the apropriate action if there is a match or not 
if($count == 1){ 
login_user(); 
} else { 
    new_user(); 
} 

我的$count變量沒有返回值。當我回應$count時,我所得到的是NULL。我加入了vardump,看看我是越來越有一切都是爲了給我的是

object(mysqli_result)#2 (5) { ["current_field"]=> int(0) ["field_count"]=> int(4) ["lengths"]=> NULL ["num_rows"]=> int(1) ["type"]=> int(0) } 

我試圖尋找這是什麼意思,但一直沒能找到的東西我明白了。如果我在我的代碼中出現錯誤或者其他一些概念誤解,我可以得到一些幫助將會非常有幫助。謝謝!

議決

謝謝大家的幫助。事實證明,我所做的是正確的,這是我的login_user()函數中的一個問題,它讓事情變得糟糕。我感謝你的幫助。

+2

(http://stackoverflow.com/questions/60174/how- can-i-prevent-sql -injection-in-php) –

+0

我沒有看到'$ rows'變量? – nomistic

+0

@nomistic,不需要它,只需檢查結果編號行。 – Root125

回答

0

更改查詢:

$query = "SELECT * FROM project6 WHERE username = '$username' AND password = '$password'"; 

到:

$query = "SELECT * FROM project6 WHERE username = '$username' AND password = '$password' LIMIT 1"; 

和變更確認的行數從:

if($count == 1){ 
    login_user(); 
} else { 
    new_user(); 
} 

到:

if($count == 1){ 
    echo 'User logged in'; 
} else { 
    echo 'Username or password is wrong.'; 
} 

- 請知道這兩件事。

您必須使用會話來確定用戶已登錄。例子是這裏之前: Using sessions & session variables in a PHP Login Script

您必須使用SQL-Injecttion防止過多:[!您需要防止SQL注入]
How can I prevent SQL injection in PHP?

0

這似乎是你的問題:

$query = "SELECT * FROM project6 WHERE username = '$username' AND password = '$password'"; 

$result = $conn->query($query); 
var_dump($result); 

你所得到的陣列,而不是從查詢項目的結果。

試試這個:

foreach($result as $row) { 
    echo $row['username'] .<br /> 
    echo $row['password']; 
} 

編輯:

當你的num_rows1在你的var_dump,這似乎是處理校正,所以你的問題可能在於從login_user();