2016-07-22 124 views
0

這是登錄的PHP:我試圖讓一個登錄我的網站,但不工作

<?php 

// Get user input values 
$username = $_POST['user']; 
$password = $_POST['pass']; 

// Protect againts sql injection 
$username = stripslashes($username); 
$password = stripslashes($password); 
$username = mysql_real_escape_string($username); 
$password = mysql_real_escape_string($password); 

//connect to the database and selsct database 
mysql_connect("localhost", "root", "//im hiding the password"); 
mysql_select_db("test"); 

//Query the database for user 
$result = mysql_query("SELECT * FROM users WHERE username = '" . $username . "' && password = '" . $password . "'") or die("Failed to query database " . mysql_error()); 
$row = mysql_fetch_array($result); 
if ($row['username'] == $username && $row['password'] == $password) { 
    echo "Login Successful Welcome: " . $row['username']; 
} else { 
    echo "Invalid Username or Password"; 
} 

這是HTML:

<html> 
 

 
<head> 
 
    <meta charset="UTF-8" /> 
 
    <title>Simple Login</title> 
 
</head> 
 

 
<body> 
 
    <h1 style="text-align:center;">Simple Login</h1> 
 
    <div id="wrapper"> 
 
    <form style="text-align:center;" action="process.php" method="post"> 
 
     Username: 
 
     <input type="text" name="user" /> 
 
     <br />Password: 
 
     <input type="password" name="pass" /> 
 
     <br /> 
 
     <input type="submit" name="submit" value="Login" /> 
 
    </div> 
 
    </form> 
 
</body> 
 
<html>

有人能告訴我爲什麼PHP不檢查數據庫,如果用戶名和密碼是正確的。哦,當你在用戶名和密碼框裏什麼也沒有輸入的時候,它會把你登錄進​​去!

+0

你的代碼是多餘的。你已經檢查過用戶/查詢是否在查詢本身中匹配,所以在php中這樣做實際上是零點。該查詢將返回已經與這些值匹配的行,或者根本不返回結果。並將密碼作爲純文本存儲在您的數據庫中,這是一個巨大的安全漏洞,只是爲了解決問題。 –

+0

@RamRaider:毫無意義。 '&&'和'和'在功能上是相同的。 –

+0

指出..並刪除 – RamRaider

回答

2

此:

$password = mysql_real_escape_string($password); 
//connect to the database and selsct database 
mysql_connect("localhost", "root", "//im hiding the password"); 

mysql_real_escape_string()REQUIRES到數據庫的有效連接,但你不這樣做,連接後,才。因此m_r_e_s()將返回一個布爾值FALSE以表示失敗,然後在查詢中盲目地使用它。布爾值false在字符串上下文是一個零長度字符串,所以您的查詢就會成爲名副其實的

並注意mysql_*()功能已過時,現在從PHP中刪除。你應該不是在任何地方,任何原因使用它們。

+0

一樣聲明'mysql_fetch_array',它會返回'false',所以'$ row ['username'] == $ username'與'false == false'相同,與'true'相同。同上密碼比較,所以這很好。 – Will

相關問題