1

无论我做什么,我总是得到“错误的用户名或密码”已经尝试了不同类型的解决方案,但没有任何帮助。

//header('Access-Control-Allow-Origin: *');

include('db.php');

// username and password sent from form
$myusername=$_POST['username'];
$mypassword=$_POST['password'];

// To protect MySQL injection 
$myusername = stripslashes($myusername);
$mypassword = stripslashes($mypassword);
$myusername = mysql_real_escape_string($myusername);
$mypassword = mysql_real_escape_string($mypassword);

$sql="SELECT * FROM users WHERE username='$myusername' and password='$mypassword'";
$result=mysql_query($sql);

// Mysql_num_row is counting table row

$count=mysql_num_rows($result);

// If result matched $myusername and $mypassword, table row must be 1 row

if($count==1){


        echo '{"type":"1",'.
            '"item": "Logged In"'.
            '}';
}
else {
echo '{"type": "0",'.
            '"item":"Wrong Username or Password"'.
            '}';
}

有人可以帮忙吗?提前谢谢你!

4

3 回答 3

3

这可能有多种原因。

  1. 您的用户名或密码不正确(值得检查此类错误)
  2. 您的数据库连接有问题!(启用错误报告和调试事物)
  3. 您发布的数据有问题。当您在不知不觉中获取而不是发布时,有时会发生这种情况。
  4. 或者,您的密码或用户名包含已转义且未正确匹配的字符串!

编辑

给你一些其他的建议!始终使用 mysql 准备好的语句以获得最大的安全性,而函数 with mysql_是不推荐使用的mysqli_替代方案。你的使用stripslashes暗示我你正在使用magic_quotes_它再次被劝阻!:)

于 2013-06-26T15:13:14.320 回答
0

stripslashes() 的一个使用示例是当 PHP 指令 magic_quotes_gpc 处于打开状态时(在 PHP 5.4 之前它默认处于打开状态),并且您没有将此数据插入需要转义的位置(例如数据库)。例如,如果您只是直接从 HTML 表单输出数据。

mysql_real_escape_string — 转义字符串中的特殊字符以用于 SQL 语句。

根据我的观点mysql_real_escape_string这个函数也会从你的密码和用户名中转义特殊字符。每次在用户名或密码中发现任何特殊字符时,都会将其删除。并且总是给出行数为零...

于 2013-06-26T15:32:28.043 回答
0

我建议您查看您使用的函数的相应手册页,并注意返回值。例如,如果您转到mysql_query()并滚动过去«This extension is deprecated as of PHP 5.5.0, and will be removed in the future»警告您会看到:

对于SELECT[...] 和其他返回结果集的语句, mysql_query()在成功或FALSE错误时返回资源。

与mysql_num_rows()类似:

FALSE成功或失败时结果集中的行数。

一切都表明其中一个正在回归FALSE

依靠结果集计数来确定是否有匹配项是一种有风险的技术(它是否可以工作取决于您的设置)。COUNT(*)运行 a或尝试获取第一行更加坚如磐石。

一些随机的结论:

  • 不要忽略错误检查。
  • 如果我是你,我不会浪费时间学习过时的扩展。
  • stripslashes()建议在您的服务器中启用magic_quotes 。如果是这种情况,请在损坏的数据涌入之前将其禁用。
于 2013-06-26T15:24:49.717 回答