这是代码
<?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
当我故意设置错误的值时,它会返回状态为成功,您会看到如果以太$username,$password,$charid,$quest
为空或$yesorno
为NO
,那么它应该回显&actiontype=savequestdata&status=error&msg=InvalidData
。无论我将变量设置为什么,它都会返回'actiontype=savequestdata&success?
这是您的问题:
if ($yesorno = "YES") {
发现了吗? ? ?
PHP 中的单个=
是一个赋值运算符,因此您将变量$yesorno
赋值为等于 "YES"
,在 PHP(并非所有语言(中,它也将运行 IF 并等于 TRUE。
您需要以下任一:
==
比较运算符
或
===
相同的比较运算符。
代码中一些不相关但重要的旁注:
折旧功能mysql_
功能已折旧。您应该考虑研究/学习/使用Mysqli或PDO。
更多信息:如何防止 PHP 中的 SQL 注入?
验证和消毒
我看到您在$_POST
变量上使用mysql_real_escape_string
。
确保在将数据传递到数据库阶段之前检查变量。
用户可以在表单中输入任何内容,并且由于您正在使用容易受到注入攻击的mysql_
,因此您应该非常小心。
什么是最好的PHP输入清理功能?
MD5
甚至 php.net,PHP的开发人员也指出:
注意:安全密码哈希
不建议使用这个 保护密码的功能,由于这种哈希的快速性质 算法。
请参阅此处了解原因:
http://php.net/manual/en/faq.passwords.php#faq.passwords.fasthash