2015-01-18 3 views
0

Я пытаюсь создать сценарий входа в систему, который использует ajaxForm и плагин проверки, но если PHP предоставляет ошибку, он не знает. Это мой JavascriptОшибка PHP при использовании ajaxForm JQuery Plugin

$(function login() { 
$("#login").validate({ // initialize the plugin 
    // any other options, 
    onkeyup: false, 
    rules: { 
     email: { 
      required: true, 
      email: true 
     }, 
     password: { 
      required: true 
     } 
    } 
}); 

$('form').ajaxForm({ 
    beforeSend: function() { 
     return $("#login").valid(); 
    }, 
    success: function() { 
     window.location="index.php"; 
    }, 
    error: function(e) { 
     alert(e); 
    } 
}); 
}); 

Имейте в виду, что я новичок в JS, и, вероятно, это лучший способ сделать это. Что мне нужно, если при отправке формы, но неправильное имя пользователя или пароль, мне нужно, чтобы она не перенаправлялась и выдавала предупреждение об ошибке, но в настоящее время это не работает. Я уже это делал в Google, и проверял здесь и до сих пор ничего не нашел.

редактировать: используя код ниже, он по-прежнему не работает:

JS

$(function login() { 
    $("#login").validate({ // initialize the plugin 
     // any other options, 
     onkeyup: false, 
     rules: { 
      email: { 
       required: true, 
       email: true 
      }, 
      password: { 
       required: true 
      } 
     } 
    }); 

    $("#login").submit(function(e) { 
     e.preventDefault(); 
      $.ajax({ 
       type : "POST", 
       dataType : "json", 
       cache : false, 
       url : "/doLogin", 
       data : $(this).serializeArray(), 
       success : function(result) { 
        if(result.result == "success"){ 
         window.location = "/index.php"; 
        }else if(result.result == "failure"){ 
         $("#alert").html("Test"); 
        } 
       }, 
       error : function() { 
        $("#failure").show(); 
        $(".btn-load").button('reset'); 
        $("#email").focus(); 
       } 
      }); 
    }); 
    }); 

HTML

<div class="shadowbar"> 
<div id="alert"></div> 
<form id="login" method="post" action="/doLogin"> 

<fieldset> 

<legend>Log In</legend> 
<div class="input-group"> 
    <span class="input-group-addon">E-Mail</span> 

    <input type="email" class="form-control" name="email" value="" /><br /> 
</div> 
<div class="input-group"> 
    <span class="input-group-addon">Password</span> 

    <input type="password" class="form-control" name="password" /> 
    </div> 

</fieldset> 

<input type="submit" class="btn btn-primary" value="Log In" name="submit" /> 

</form></div> 

PHP

public function login() { 
    global $dbc, $layout; 
    if(!isset($_SESSION['uid'])){ 
     if(isset($_POST['submit'])){ 
      $username = mysqli_real_escape_string($dbc, trim($_POST['email'])); 
      $password = mysqli_real_escape_string($dbc, trim($_POST['password'])); 
      if(!empty($username) && !empty($password)){ 
       $query = "SELECT uid, email, username, password, hash FROM users WHERE email = '$username' AND password = SHA('$password') AND activated = '1'"; 
       $data = mysqli_query($dbc, $query); 
       if((mysqli_num_rows($data) === 1)){ 
        $row = mysqli_fetch_array($data); 
        $_SESSION['uid'] = $row['uid']; 
        $_SESSION['username'] = $row['username']; 
        $_SERVER['REMOTE_ADDR'] = isset($_SERVER["HTTP_CF_CONNECTING_IP"]) ? $_SERVER["HTTP_CF_CONNECTING_IP"] : $_SERVER["REMOTE_ADDR"]; 
        $ip = $_SERVER['REMOTE_ADDR']; 
        $user = $row['uid']; 
        $query = "UPDATE users SET ip = '$ip' WHERE uid = '$user' "; 
        mysqli_query($dbc, $query); 
        setcookie("ID", $row['uid'], time()+3600*24); 
        setcookie("IP", $ip, time()+3600*24); 
        setcookie("HASH", $row['hash'], time()+3600*24); 
        header('Location: /index.php'); 
        exit(); 
       } else { 
        $error = '<div class="shadowbar">It seems we have run into a problem... Either your username or password are incorrect or you haven\'t activated your account yet.</div>' ; 
        return $error; 
        echo "{\"result\":\"failure\"}"; 
       } 
      } else { 
       $error = '<div class="shadowbar">You must enter both your username AND password.</div>'; 
       return $error; 
       $err = "{\"result\":\"failure\"}"; 
       echo json_encode($err); 
      } 
      echo "{\"result\":\"success\"}"; 
     } 
    } else { 
     echo '{"result":"success"}'; 
     exit(); 
    } 
    return $error; 
} 
+0

Вы должны получить выходные данные на своем php. 'success: function()' заключается в том, что ваш запрос успешно отправлен и ответил – absfrm

ответ

1

В вашем сценарии входа , вам нужно будет возвращать ошибки в j сына.

Для примера

В вашем сценарии входа, если запрос находит строку в базе данных для этого пользователя, эхо этого:

echo "{\"result\":\"success\"}"; 

и если это не удается:

echo "{\"result\":\"failure\"}"; 

Вы можете проанализировать их на JavaScript так:

$('form').ajaxForm({ 
    beforeSend: function() { 
     return $("#login").valid(); 
    }, 
    success: function(result) { 
    if(result.result == "success"){ 
     window.location = "index.php"; 
     }else if(result.result == "failure"){ 
      alert('Failure!'); 
      } 
    error: function(e) { 
    alert(e); 
    } 
} 
}); 

Пример примера сценария Ajax, который я использую для регистрации пользователей на моем сайте, вы можете использовать его для справки, если необходимо. Это только поможет вам получить более широкое понимание того, о чем я говорю:

Я возвращаюсь не только к успеху и неудаче по различным причинам, например, к пользовательской интуитивности, но и к сути.

$("#loginForm").bind("submit", function() { 
    $("#invalid").hide(); 
    $("#disabled").hide(); 
    $("#error").hide(); 
    $("#failure").hide(); 
    $("#blocked").hide(); 
    var email = document.getElementById("email").value; 
    var password = document.getElementById("password").value; 
    if(email != "" && password != ""){ 
     $.ajax({ 
      type : "POST", 
      dataType : "json", 
      cache : false, 
      url : "/ajax/functions/login", 
      data : $(this).serializeArray(), 
      success : function(result) { 
       if(result.result == "success"){ 
        window.location = "/account"; 
       }else if(result.result == "failure"){ 
        $("#invalid").show(); 
        $(".btn-load").button('reset'); 
        $("#email").focus(); 
       }else if(result.result == "disabled"){ 
        $("#disabled").show(); 
        $(".btn-load").button('reset'); 
        $("#email").focus(); 
       }else if(result.result == "blocked"){ 
        $("#blocked").show(); 
        $(".btn-load").button('reset'); 
        $("#email").focus(); 
       } 
      }, 
      error : function() { 
       $("#failure").show(); 
       $(".btn-load").button('reset'); 
       $("#email").focus(); 
      } 
     }); 
    }else{ 
     $("#error").show(); 
     $(".btn-load").button('reset'); 
     $("#email").focus(); 
    } 
    return false; 
}); 
+0

Ничего в работе if, IE. Если я отправлю правильные данные, он останется на одной странице, и если я отправлю неверные данные, он сделает то же самое. – Core

+0

Измените мой сценарий в соответствии с вашими потребностями. У меня нет всего кода, чтобы помочь вам устранить неполадки. @Core –

+0

Взгляните на мое редактирование – Core

Смежные вопросы