php + sql语句总是返回成功吗?

时间:2014-12-02 00:39:57

标签: 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["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");
?>

然而,它总是回归说staus是成功的?当我进入浏览器并输入网址时,它会返回此

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为空或$yesornoNO那么它应该回显{ {1}}。无论我将变量设置为什么,它都会返回`actiontype = savequestdata&amp; sucess?

1 个答案:

答案 0 :(得分: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.net,PHP的开发人员,陈述:

  

注意:安全密码哈希
  不建议使用它   由于此散列的快速性,保护密码的功能   算法。

请参阅此处了解原因:
http://php.net/manual/en/faq.passwords.php#faq.passwords.fasthash