2014-10-12 118 views
-2

我一直在爲我的網站編寫登錄頁面,但即使我已經在鏈接的MySQL數據庫的表格中創建了一個測試用戶,該代碼仍會返回'用戶未找到'。 請幫忙!
P.S.在此版本的代碼中,我用佔位符替換了主機名,數據庫,數據庫用戶和數據庫密碼。PHP - 編程登錄頁面時出現問題

<?php 

if (isset($_POST['submit'])){ 
if(empty($_POST['username'])){ 
echo "Username is required<br/>";} 
if(empty($_POST['password'])){ 
     echo "Password is required<br/>";}; 

$user = $_POST['user']; 
$password = $_POST["password"]; 



$accounts = mysql_connect("hostname", "database user", "database password") 
or die (mysql_error()); 


mysql_select_db("database", $accounts); 


$field = "username"; 
$password = md5(md5("98g£h14cGsd".$password."98ghsdht614cGsd")); 
$result = mysql_query("SELECT * FROM Users WHERE $field = $user LIMIT 1"); 
if ($result){ 

$count=mysqli_num_rows($result); 
} 
if ($count==1){ 
$row = mysql_fetch_array($query); 
$dbid = $row['id']; 
$dbuser = $row['username']; 
$dbpass = $row['password']; 
$dbactive = $row['emailactivated']; 


if ($password == $dbpass) { 
    if ($dbactive == '1'){ 
    //set session info 
     $_SESSION['userid'] = $dbid; 
     $_SESSION['username'] = $dbuser; 

     echo "You have been logged in as <b> $dbuser </b>. <a href ='./member.php'> Click here </a> to go to member page"; 


    } 
    else 
     echo "You must activate your account before logging in. $form"; 


} 
else 
echo "You did not enter the correct password. $form"; 
} 
else 
echo "The username you entered was not found. $form"; 



mysql_close(); 

} 
?> 
+2

首先,'mysql_'功能已被棄用。你需要切換到'mysqli_'。其次,你有大量的[SQL注入漏洞](http://www.bobby-tables.com/)。第三,你有沒有拋棄你的實際SQL,並返回結果? – Machavity 2014-10-12 14:04:32

+0

在你的代碼中聲明你所有的變量,看看他們都說了些什麼。更可能的情況是,您輸入的用戶名與數據庫中的用戶名不符 - 您的var排列有些問題,或者使用了'md5()'。 Probs你檢查一個散列傳遞對非散列,反之亦然。其他說明:md5不安全,你應該看看從表單腳本中分離出你的數據庫內容,等等。 – James 2014-10-12 14:33:36

回答

0

我在代碼中發現了很多問題。

問題數量1: - 你在這裏檢查用戶名 「如果(空($ _ POST [ '用戶名']))」

,你必須採取 「$ USER = $ _ POST [ '用戶'];」後來..一個原因可能是你重新分配數據庫用戶從輸入形式..

問題2: - $是聲明的位置?

+0

謝謝你發現這些錯誤,雖然它仍然不能解決問題 – Dude3004a 2014-10-12 14:25:49

0

您的查詢失敗:

$result = mysql_query("SELECT * FROM Users WHERE $field = $user LIMIT 1"); 

在您的例子,這將在查詢結束:

$result = mysql_query("SELECT * FROM Users WHERE username = myusername LIMIT 1"); 

名爲myUsername需要一個特林這是行不通的。

嘗試

$result = mysql_query("SELECT * FROM Users WHERE $field = '$user' LIMIT 1"); 

代替。

並順便提一下:MIND SQL注入!,你的代碼很容易被注入。

+0

返回錯誤警告:mysqli_num_rows()期望參數1爲mysqli_result,資源在/home/u835781211/public_html/login.php在線43 您輸入的用戶名未找到。 – Dude3004a 2014-10-12 14:08:38

+0

查看下面的答案,我沒有檢查其他錯誤:-) – Philipp 2014-10-12 14:10:26

0

你需要把引號中的字符串。在你的情況$用戶已經被放入報價

+0

謝謝,但它不能解決它 – Dude3004a 2014-10-12 14:27:12