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
为空或$yesorno
是NO
那么它应该回显&actiontype=savequestdata&status=error&msg=InvalidData
。无论我设置变量,它都返回`actiontype = savequestdata &成功?
这是你的问题:
if ($yesorno = "YES") {
发现它了吗? ....?
在PHP单=
是赋值运算符,所以你要分配变量$yesorno
等于"YES"
,这在PHP(不是所有语言)也将运行IF和将等同于TRUE。
您需要用:==
的比较操作
或===
的相同比较操作。您的代码
一些无关,但重要,旁注:
折旧功能
的mysql_
功能折旧。你应该考虑研究/学习/使用Mysqli或PDO。
更多信息: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
回应查询。 – Strawberry 2014-12-02 00:42:08