我的AJAX查询没有正确验证

时间:2016-08-05 03:57:54

标签: php jquery ajax validation

这里是网页设计的新手。我有一个登录表单,在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>
&#13;
&#13;
&#13;

请帮忙!

4 个答案:

答案 0 :(得分:0)

首先使用警报(响应)来查找您获得的响应。它应该是真是假。

成功:功能(响应){

            if(response === "true") 
           {
               alert("hi");
           }
           else
           {
             alert("nope");
           }
    },

答案 1 :(得分:0)

dataType 中将 Json 设置为 ajax ,如下所示

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

试试这个......

答案 2 :(得分:0)

我认为您需要从服务器端请求纯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响应

答案 3 :(得分:0)

在jQuery / AJAX中,HTTP响应代码用于判断它是否成功。因此,如果登录失败,您应该在PHP中设置一个标头,指示此失败。

 public class SuppDocuments
 {
    public string Title { get; set; }
    public int[] documentid { get; set; }
 }

通过这样做,您甚至不必处理生成的JSON,只是为了获得更多信息。但基本结果会告诉您:如果调用if (.. login has failed .. ) { // HTTP 401 = 'Unauthorized'. http_response_code(401); } 回调,则登录成功。如果调用success,则无论出于何种原因都无法成功。

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

有关替代方案的列表,请参阅List of HTTP response codes,有关使用401的论证,请参阅this question