Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/296.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用php和ajax的登录表单_Php_Jquery_Ajax - Fatal编程技术网

使用php和ajax的登录表单

使用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

我不知道我的问题在哪里。。。我正在尝试使用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=$_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''的用户中选择*;`记住我使用了
密码
符号(`)跨字段名-这是避免此类问题的一个好做法,但在命名列时要小心。谢谢。帮了我很多忙!