无论我做什么,我总是得到“错误的用户名或密码”已经尝试了不同类型的解决方案,但都没有帮助。
//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"'.
'}';
}有谁能帮帮忙吗?非常感谢您的支持!
发布于 2013-06-26 23:13:14
这可能有各种各样的原因。
编辑
给你几个其他的建议!为了获得最大的安全性,请始终使用mysql prepared语句,并且不建议使用mysqli_替代函数与mysql_一起使用。您使用stripslashes提示我您正在使用magic_quotes_,这仍然是不受欢迎的!:)
发布于 2013-06-26 23:24:50
我建议您查看您使用的函数的相应手册页面,并注意返回值。例如,如果您转到mysql_query()并滚动到«此扩展已从PHP5.5.0开始弃用,并将在未来删除»警告,您将看到以下警告:
用于SELECT的
...和其他返回结果集的语句,如果成功则返回资源,如果出错则返回
FALSE。
成功时为
结果集中的行数,失败时为
FALSE。
一切都表明其中一个返回的是FALSE。
依靠结果集计数来确定是否有匹配是一种有风险的技术(它是否有效取决于您的设置)。运行COUNT(*)或仅尝试获取第一行更可靠。
一些随机的结论:
发布于 2013-06-26 23:32:28
使用stripslashes()的一个示例是,当PHP指令magic_quotes_gpc为on时(PHP5.4之前的默认设置为on ),并且您不会将此数据插入到需要转义的地方(例如数据库)。例如,如果您只是简单地从HTML表单直接输出数据。
SQL -在mysql_real_escape_string语句中使用的字符串中的特殊字符。
根据我的观点,mysql_real_escape_string,这个函数也可以从你的密码和用户名中转义特殊字符。每次在用户名或密码中发现任何特殊字符时,都会将其删除。并且总是给出行数为零..。
https://stackoverflow.com/questions/17323742
复制相似问题