当前位置: 首页 > 知识库问答 >
问题:

我的AJAX查询没有正确验证

汪晟睿
2023-03-14

新网页设计在这里。我有一个登录表单,验证和工作完全在PHP,但当我尝试和验证使用ajax它不工作。当我运行页面时,它说无论输入到表单中,它都是成功的。我已经尝试了好几天,试图用许多不同的方法来验证它。如果有更好的方法请让我知道!

php和登录表单位于同一页面

if (isset($_POST['login'])) {

    $email = mysqli_real_escape_string($con, $_POST['email']);
    $password = mysqli_real_escape_string($con, $_POST['password']);
    $result = mysqli_query($con, "SELECT * FROM users WHERE email = '" . $email. "' and password = '" . md5($password) . "'");

    if ($row = mysqli_fetch_array($result)) {
        echo json_encode('true');
        $_SESSION['usr_id'] = $row['id'];
        $_SESSION['usr_name'] = $row['name'];
        $_SESSION['logged_in'] = true;


    } else {
        echo json_encode('false');
        $errormsg = "Incorrect Email or Password!!!";
    }
}


?>
$(document).ready(function() {
  $('#login_submit').click(function() {
      var form = $('#login_form').serialize();
    $.ajax({
        type: "POST",
        url: "header.php",
        data: form,
        success:function (response){
                
                alert('Hi');
        
        },
        error: function(response){
                
                alert('Nope');
            
        }
          
        
   });
 });
});
<form id="login_form" form role="form" action="<?php echo $_SERVER['PHP_SELF']; ?>" method="post" name="loginform">
                
                <label class="login_form_labels"> Email:</label>
                
                <input type="email" id="email" class="login_input" name="email"><br><br>
                
                <label class="login_form_labels"> Password:</label>
                
                <input type="password" id="password" class="login_input" name="password"><br>
                
                <div id="stay_log">
                    Stay logged in.
                    
                    <input type="checkbox" name="stayLoggedIn" value=1 id="checkbox_1">
                    
                </div>
                
                
                <input class="login_form_btn" name="login" value="Submit" type="Submit" id="login_submit">
                
                <button class="login_form_btn" type="button">Forget your Password?</button>

            </form>

请帮忙!

共有3个答案

赵英范
2023-03-14

在jQuery/AJAX中,HTTP响应代码决定它是否成功。因此,如果登录失败,您应该在PHP中设置一个指示此失败的标题。

if (.. login has failed .. ) {
  // HTTP 401 = 'Unauthorized'.
  http_response_code(401);  
}

通过这样做,您甚至不必处理生成的JSON,只需要获取额外的信息。但是基本的结果足以告诉您:如果调用了success回调,则登录成功。如果调用了error,无论出于何种原因,它都不会成功。

这将设置基本流程,然后您可以解析结果消息以查看发生的任何详细信息(内部服务器错误、用户未知、密码不匹配等)。

请参阅HTTP响应代码列表,了解备选方案列表,并通过此问题了解有关使用401的论证。

慕云
2023-03-14

我认为您需要从服务器端获得纯JSON响应,并在ajax成功方法中处理它。

在PHP代码中。

$response=array();
if (!empty($_POST)) {
    $email = mysqli_real_escape_string($con, $_POST['email']);
    $password = mysqli_real_escape_string($con, $_POST['password']);
    $result = mysqli_query($con, "SELECT * FROM users WHERE email = '" . $email. "' and password = '" . md5($password) . "'");

    if ($row = mysqli_fetch_array($result)) {
        echo json_encode('true');
        $_SESSION['usr_id'] = $row['id'];
        $_SESSION['usr_name'] = $row['name'];
        $_SESSION['logged_in'] = true;


        $response['type']="success";
        $response['message']="Login done successfully";


    } else {
        $response['type']="error";
        $response['message']="Incorrect Email or Password!!!";
    }
}
else
{
    $response['type']="error";
    $response['message']="invalid post request";
}

ob_clean();
echo json_encode($response);
die();

通过上述方式,您可以从服务器仅以json格式响应。

在你ajax调用javascript代码

$(document).ready(function() {
  $('#login_submit').click(function() {
      var form = $('#login_form').serialize();
    $.ajax({
        type: 'post',
        url: $('#login_form').attr("action"),
        data: form,
        dataType:'json'
        success:function (response){
                if(response.type=="success")
                {
                    alert(response.message);
                    // write code for handle your success login;
                }
                else
                {
                    alert(response.message);
                    // write code for handle your failure login;

                }

        },
        error: function(response){

                alert('Nope');

        }


   });
 });
});

您必须在ajax成功响应中处理来自服务器端的JSON响应

马坚
2023-03-14

在您的ajax中设置dataTypeJson,如下所示

$.ajax({
    type: "POST",
    url: "header.php",
    dataType: json,
    data: form,
    success:function (response){
            alert('Hi');
    },
    error: function(response){
            alert('Nope');
    }
});

试试这个。。。

 类似资料:
  • 有人可以解释一下这个查询有什么问题吗?我需要将此生成的查询从弹性搜索 2 转换为弹性搜索 6。在ES2中,这个工作得很好,但在ES6中,它给我一个错误:[或]查询格式不正确,查询名称后没有start_object。我迷失在其中。OR是必要的,因为可能有更多的条件比这个。 谢谢。

  • 作者(AuthorID、AuthorName、Address、TelephoneNo、PublisherCode) 写一个查询,挑出并显示去年出书的作者的所有详细信息。 这是我回答的mysql查询,我想知道它是正确的还是有更好的方法写它?

  • 我有一个表,其中的值如下所示, 现在,我有两个线程正在尝试做同样的事情。它们如下。 从表中提取未进行或未完成的记录。 将其标记为未进展。 处理记录。 将其标记为完成。 我实现了以下内容,以确保两个线程不会同时拾取相同的记录。 “从状态不在('Complete'、'InProgress')限制1的表中选择*from以更新”,从表中获取合适的记录。 在一个事务中执行了步骤1和步骤2,这样表就变成读锁定

  • 问题内容: 我有点Java EE / EJB菜鸟,但是从我收集的文档和其他文章中,您不能在实体验证期间使用相同的entitymanager /session查询数据库。 通常,便携式应用程序的生命周期方法不应调用EntityManager或Query操作,访问其他实体实例或在同一持久性上下文内修改关系。[43] 生命周期回调方法可以修改在其上调用它的实体的非关系状态。 请翻译? 这是非常抽象的……

  • 我正试图通过以下方式获取文件: 然后在活动结果上的

  • 我正在连接到mysql服务器并进行查询。我一直得到一个ER_BAD_FIELD_ERROR:'field list'中的未知列