使用php和ajax的登录表单
我不知道我的问题在哪里。。。我正在尝试使用ajax、jquery和PHP做一个简单的登录表单。。。问题是$result总是返回false 我是个新手,希望你们都能帮助我 php代码:使用php和ajax的登录表单,php,jquery,ajax,Php,Jquery,Ajax,我不知道我的问题在哪里。。。我正在尝试使用ajax、jquery和PHP做一个简单的登录表单。。。问题是$result总是返回false 我是个新手,希望你们都能帮助我 php代码: <?php if(isset($_POST['user_name']) && isset($_POST['password'])) { $user_name=mysql_real_escape_string($_POST['user_name']); $password=$_P
<?php
if(isset($_POST['user_name']) && isset($_POST['password']))
{
$user_name=mysql_real_escape_string($_POST['user_name']);
$password=$_POST['password'];
$sql = "SELECT * FROM users WHERE
userName = '$user_name' AND password = '$password'";
$result = mysql_query($sql);
if($result === true)
echo $user_name;
else
echo 'Error';
}
?>
<?php
if(isset($_POST['user_name']) && isset($_POST['password']))
{
$user_name=mysql_real_escape_string($_POST['user_name']);
$password=$_POST['password'];
$sql = "SELECT * FROM users WHERE
userName = '$user_name' AND password = '$password'";
$result = mysql_query($sql);
$result_rows = mysql_num_rows($result); // <-- this is the way to check the result
if($result_rows)
// OK
echo $user_name;
else
// Bad login
echo 'Error';
}
?>
它自身的形式:
<!DOCTYPE html>
<html>
<head>
<script src="jquery-2.1.1.js"></script>
<link rel="stylesheet" type="text/css" href="sign_in.css">
</head>
<body>
<div id="sign_in_wrapper">
<textarea id="user_name"></textarea>
<textarea id="password"></textarea>
<button id="sign_in_button">Sign In!</button>
</div>
<div id="error"></div>
<script>
$('#sign_in_button').click(function () {
var user_name = $('textarea#user_name').val();
var password = $('textarea#password').val();
signIn(user_name,password);
});
function signIn(user_name, password)
{
$.ajax({
type: "POST",
url: "sign_in.php",
data: "user_name="+user_name+"&password="+password,
success: function(result)
{
if(result = 'Error')
document.getElementById("error").innerHTML ='user name and password are not match';
else
document.getElementById("sign_in_wrapper").innerHTML ='Welcome back '+result;
}
})}
</script>
</body>
</html>
登录!
$(“#在按钮中签名”)。单击(函数(){
var user_name=$('textarea#user_name').val();
var password=$('textarea#password').val();
登录(用户名、密码);
});
功能登录(用户名、密码)
{
$.ajax({
类型:“POST”,
url:“sign_in.php”,
数据:“user_name=“+user_name+”&password=“+password,
成功:功能(结果)
{
如果(结果='Error')
document.getElementById(“错误”).innerHTML='用户名和密码不匹配';
其他的
document.getElementById(“在包装中签名”).innerHTML='Welcome back'+结果;
}
})}
我更改了我的php代码:
<?php
if(isset($_POST['user_name']) && isset($_POST['password']))
{
$user_name=mysql_real_escape_string($_POST['user_name']);
$password=$_POST['password'];
$sql = "SELECT * FROM users WHERE
userName = '$user_name' AND password = '$password'";
$result = mysql_query($sql);
$result_rows = mysql_num_rows($result); // <-- this is the way to check the result
if($result_rows)
// OK
echo $user_name;
else
// Bad login
echo 'Error';
}
?>
现在我发现了一个不同的错误:
警告:mysql\u num\u rows()希望参数1是资源,布尔值在第10行的C:\wamp\www\Project\sign\u in.php中给出
第10行是:$result\u rows=mysql\u num\u rows($result)
谢谢大家的快速回答
if($result === true)
结果永远不会是真的
。它将是FALSE
或a
使用if($result)
,然后测试(或者(最好是)一个现代等价物)返回了多少行(因为没有匹配行的成功查询将给出一个结果)。这是因为:
$result = mysql_query($sql);
将始终返回true(Resource 35;在您的情况下,如果SQL查询正常)。没有必要让这样的行带有选中的用户名/密码
你必须:
$result = mysql_query($sql);
$result_rows = mysql_num_rows($result); // <-- this is the way to check the result
if($result_rows)
// OK
echo $user_name;
else
// Bad login
echo 'Error';
$result=mysql\u查询($sql);
$result_rows=mysql_num_rows($result);// 在这里检查你的线路
data: "user_name="+user_name+"&password="+password,
正确的格式是
data: {user_name:user_name,password:password},
也在这里
if(result = 'Error')
document.getElementById("error").innerHTML ='user name and password are not match';
else
document.getElementById("sign_in_wrapper").innerHTML ='Welcome back '+result;
在if-else语句中为结果赋值
尝试更改result==“Error”
是的,改变这个
if($result === true)
echo $user_name;
else
echo 'Error';
与
为什么要转换到javaScript函数,document.getElementById(“error”)
vs$(“#error”)
$result=mysql\u query($sql);请使用mysql\u fetch\u array()或mysql\u num\u rows获取返回的行,因为如果查询成功执行,即使用户名和密码也错误,mysql\u查询将是一个资源id,您的“密码”和“用户名”字段是否真的是textarea
s而不是input
s,类型为text
和password
?即使SQL没有返回任何行并且在mysql中成功执行查询,mysql\u查询将返回资源id。因此,对于错误的凭据也是如此。@SaurabhSinha-这就是为什么我说在您的评论之前(但可能是在您开始键入之后),您还应该使用mysql\u num\u行进行测试。@SaurabhSinha。请对答案进行编辑,我无法对其进行升级:)。请做任何小的编辑。谢谢你的回答。只有一个问题:为什么我需要将-data:“user_name=”+user_name+“&password=”+password改为data:{user_name:user_name,password:password},这对旧代码来说很好,但是它更容易可读,并且是将数据传递到ajax请求中的标准方式。(:谢谢。但它仍然不起作用。我得到了下一个错误:“警告:mysql\u num\u rows()希望参数1是资源,布尔值在第10行的C:\wamp\www\Project\sign\u in.php中给出”你知道为什么吗?我想这是因为“password”是mysql函数,不适合用作列名。试试这个:$sql=“从userName
='$user\u name'和password
='$password''的用户中选择*;对不起,我写错了。必须是:$sql=“SELECT*从userName`='$user\u name'和password
='$password''的用户中选择*;`记住我使用了密码
符号(`)跨字段名-这是避免此类问题的一个好做法,但在命名列时要小心。谢谢。帮了我很多忙!