2014-12-02 80 views
0

這是代碼Php + sql語句總是返回成功?

<?php 
include("global.php"); 

$username = mysql_real_escape_string(stripslashes($_POST["strUserName"])); 
$password = md5(mysql_real_escape_string(stripslashes($_POST["strPassword"]))); 
$charid = mysql_real_escape_string(stripslashes($_POST["charid"])); 
$quest = mysql_real_escape_string(stripslashes($_POST["strQuest"])); 


$query = "SELECT * FROM wherei_users, wherei_characters WHERE wherei_users.username = '{$username}' AND wherei_users.password = '{$password}' AND wherei_characters.username =  '{$username}' AND wherei_characters.Id = '{$charid}'"; 
$result = mysql_query($query); 
$yesorno = (mysql_num_rows($result) == 0) ? 'NO' : 'YES'; 


if(empty($username) || empty($password) || empty($charid) || empty($quest) || $yesorno == "NO") { 
$status="error"; 
$msg="InvalidData"; 
$actiontype="&actiontype=savequestdata"; 
$out=("$actiontype&status=$status&msg=$msg"); 
} 

if ($yesorno = "YES") { 
mysql_query("UPDATE wherei_characters SET strQuest = '{$quest}' WHERE username = '{$username}' AND id = '{$charid}'") or die(mysql_error()); 
$actiontype="&actiontype=savequestdata"; 
$status="success"; 
$out=("$actiontype&$status"); 
} 

echo("$out"); 
?> 

然而,它總是返回該居留制是成功?當我去我的瀏覽器,只需鍵入的URL,它返回

You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '' at line 1 

當我設置的值錯誤的目的,它返回一個狀態是succesfull,你看,如果醚$username,$password,$charid,$quest爲空或$yesornoNO那麼它應該回顯&actiontype=savequestdata&status=error&msg=InvalidData。無論我設置變量,它都返回`actiontype = savequestdata &成功?

+0

迴應查詢。 – Strawberry 2014-12-02 00:42:08

回答

2

這是你的問題:

if ($yesorno = "YES") { 

發現它了嗎? ....?

在PHP單=賦值運算符,所以你要分配變量$yesorno等於"YES",這在PHP(不是所有語言)也將運行IF和將等同於TRUE。

您需要用:
==比較操作

===相同比較操作。您的代碼



一些無關,但重要,旁註:

折舊功能
mysql_功能折舊。你應該考慮研究/學習/使用MysqliPDO

更多信息:How can I prevent SQL injection in PHP?

驗證和消毒
我看你用mysql_real_escape_string$_POST變量。
確保在將數據傳遞到數據庫階段之前檢查變量。
用戶可以在窗體中輸入任何內容,並且由於您使用的是容易發生注入攻擊的mysql_,因此應該非常小心。

What are the best PHP input sanitizing functions?

MD5
即使PHP。

注:淨,PHP的,國家開發安全的密碼哈希
不推薦使用此 功能安全的密碼,由於該散列算法 的快速的本質。

看到這裏的原因:
http://php.net/manual/en/faq.passwords.php#faq.passwords.fasthash