无论我做什么,我总是得到“错误的用户名或密码” 已经尝试了不同类型的解决方案但没有帮助。
//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"'.
'}';
}
有人可以帮忙吗? 先谢谢你!
答案 0 :(得分:3)
这可能有多种原因。
修改强>
为您提供其他一些建议!始终使用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 ,此函数也会从您的密码和用户名中删除特殊字符。每次在用户名或密码中找到任何特殊字符时,都会将其删除。并始终给出行数零...