2011-09-07 190 views
-3

我在PHP開發的代碼,但它不工作。有時代碼可以工作,但大部分時間不行。問題是,在顯示密碼是否有效not.sorry朋友我忘了改變了,但我與它的問題只顯示無效的,甚至我輸入有效的用戶名和password..plz幫我密碼驗證

if(isset($_POST['submit'])) 
{ 
$con = mysql_connect("localhost","root",""); 
$db = mysql_select_db("billmailid", $con); 
     if (!$con) 
      { 
     die('Could not connect: ' . mysql_error()); 
      } 
$username=$_POST['usernameid']; 
$password=$_POST['passwordid']; 

$result = mysql_query("SELECT * FROM login"); 


$check = mysql_query("SELECT username FROM login WHERE username = '$username' && password= '$password'") ; 

$check2 = mysql_num_rows($check); 

if($check2==1) 
    { 
    echo "valid"; 
    } 
else 
    { 
    echo "invalid"; 
    } 
} 
?> 
+2

請將您的問題寫在正文中,而不是標題中。什麼不起作用?但是閱讀你的代碼我可以說使用OR運算符(||)實際上不是你想要的 - 用AND運算符代替。 [閱讀邏輯運算符](http://dev.mysql.com/doc/refman/5.0/en/logical-operators.html)。 –

+2

小心sql注入! http://xkcd.com/327/ – piddl0r

+0

XKCD - sql注射評論是不一樣的沒有這個漫畫:) – SimSimY

回答

3

那麼,首先,如果您重新提出問題標題和正文,添加示例,錯誤和一般情況 - 使其具有可讀性,那麼將會很好。

SQL第二位||OR&&AND。你應該從那裏開始。

第三 - 你應該真的瞭解SQL注入。我不是指XKCD漫畫。 在following link中,您可以找到幾個示例和指導原則,說明如何爲您的數據庫和用戶提供清晰和安全的查詢。您的用戶最好不要使用空的root密碼,並且不要使用「root」作爲網站用戶。

寫保存代碼有時很痛苦,但越早開始越自然。此外,「建立」應用程序的安全性要比構建安全性要困難得多。

enter image description here

+0

+1對於那絕對是天才卡通 – DaveRandom

+0

+1供參考xkcd –

0

其他易受sql注入影響的東西有幾件事。

你有一個不必要的mysql查詢,$result是一個mysql查詢,但沒有得到使用。

您的支票查詢使用||這是OR應該&&AND這意味着登錄只需符合兩個值帶回的結果之一。這會導致幾個問題。

一個請求只需要匹配兩個值中的一個,所以即使它們沒有配對,任何有效的用戶名或密碼都會導致返回行。 或 如果兩個登錄名具有相同的密碼,則會返回2行,這意味着if($check==1)語句會失敗。