Php+;sql语句总是返回successfull吗?
这是密码Php+;sql语句总是返回successfull吗?,php,mysql,variables,echo,Php,Mysql,Variables,Echo,这是密码 <?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["c
<?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");
?>
当我故意设置了错误的值时,它会返回状态为Successfull,您可以看到,如果ether$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\
函数被折旧。你应该考虑查看/学习/使用或.
更多信息:
验证和消毒我看到您在
$\u POST
变量上使用了mysql\u real\u escape\u string
。确保在将数据传递到数据库阶段之前检查变量。
用户可以在表单中输入任何内容,当您使用易受注入攻击的
mysql\uuu
时,您应该非常小心
MD5甚至php的开发者php.net也表示: 注意:安全密码哈希
不建议使用此选项 函数来保护密码,这是由于这种哈希运算的快速性 算法 请参见此处了解原因:
if ($yesorno = "YES") {