这个php登录代码有什么问题?

时间:2013-06-26 15:03:35

标签: php mysql database login phpmyadmin

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

//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"'.
            '}';
}

有人可以帮忙吗? 先谢谢你!

3 个答案:

答案 0 :(得分:3)

这可能有多种原因。

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

    为您提供其他一些建议!始终使用mysql预处理语句以获得最大安全性,而mysql_的函数不建议使用mysqli_替代。您对stripslashes的使用表明您使用的是magic_quotes_,这再次被劝阻! :)

答案 1 :(得分:0)

我建议您查看所用功能的相应手册页,并注意返回值。例如,如果你转到mysql_query()并滚动浏览«从PHP 5.5.0开始不推荐使用此扩展程序,将来会删除»警告你会看到:

  

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

mysql_num_rows()类似:

  

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

一切都表明其中一人正在返回FALSE

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

一些随机的结论:

  • 不要忽略错误检查。
  • 如果我是你,我不会浪费时间学习过时的扩展。
  • stripslashes()表示您的服务器已启用magic_quotes。如果是这种情况,请在损坏的数据涌入之前禁用它。

答案 2 :(得分:0)

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

mysql_real_escape_string - 转义字符串中的特殊字符,以便在SQL语句中使用。

根据我的视图 mysql_real_escape_string ,此函数也会从您的密码和用户名中删除特殊字符。每次在用户名或密码中找到任何特殊字符时,都会将其删除。并始终给出行数零...