9

只是在通过 ajax 提交登录表单时遇到了一些问题,我主要是一名 PHP 开发人员,我不经常在 PHP 中使用 Jquery + Ajax。

目前,如果我在提交表单后检查 firebug POST 数据,它似乎确实获得了已添加到表单中的用户名和密码,但是无论是否添加了错误的用户名和密码,或者是否添加了错误的用户名和密码,页面都会重新加载它们是正确的,并且没有创建会话。

这是表格:

    <form id="loginform" method="post">
    Username: <input type="text" name="username" id="username" value="">

    Password: <input type="password" name="password" id="password" value="">

    <input type="submit" name="loginsub" id="loginsub" value="Login">
    </form>

这是 Ajax/Jquery:

    <script type="text/javascript">
    $(document).ready(function() {

    $('#loginform').submit(function() {

    $.ajax({
        type: "POST",
        url: '/class/login.php',
        data: {
            username: $("#username").val(),
            password: $("#password").val()
        },
        success: function(data)
        {
            if (data === 'Login') {
                window.location.replace('/user-page.php');
            }
            else {
                alert('Invalid Credentials');
            }
        }
    });

});

});
</script>

这是PHP:

    class Users {
 public $username = null;
 public $password = null;

 public function __construct( $data = array() ) {
     if( isset( $data['username'] ) ) $this->username = stripslashes(        strip_tags( $data['username'] ) );
     if( isset( $data['password'] ) ) $this->password = stripslashes( strip_tags( $data['password'] ) );
 }

 public function storeFormValues( $params ) {
    $this->__construct( $params ); 
 }

 public function Login() {
     $success = false;
     try{
        $con = new PDO( DB_DSN, DB_USERNAME, DB_PASSWORD ); 
        $con->setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION );
        $sql = "SELECT * FROM users WHERE username = :username AND password = :password LIMIT 1";
                    $user = username;

        $stmt = $con->prepare( $sql );
        $stmt->bindValue( "username", $this->username, PDO::PARAM_STR );
        $stmt->bindValue( "password", md5($this->password), PDO::PARAM_STR );
        $stmt->execute();

        $valid = $stmt->fetchColumn();

        if( $valid ) {
        $success = true;
                    session_start();


        session_regenerate_id();
        $_SESSION['user'] = $user['user'];
        session_write_close();
        echo ('Login');
        exit();

        }

        $con = null;
        return $success;
        }catch (PDOException $e) {
        echo $e->getMessage();
        return $success;
     }

 }

我想它不起作用,因为我没有调用类和函数,但我不确定如何成功地这样做。我尝试在两者之间创建一个控制器页面,该页面将启动 php 类和函数,但无济于事。

只是为了编辑,如果我删除 ajax 并通过登录表单操作调用 php 页面,登录确实可以正常工作。

有任何想法吗?

4

3 回答 3

15

整个问题在 jquery 中使用这个代替

$(document).ready(function() {
  $('#loginform').submit(function(e) {
    e.preventDefault();
    $.ajax({
       type: "POST",
       url: '/class/login.php',
       data: $(this).serialize(),
       success: function(data)
       {
          if (data === 'Login') {
            window.location = '/user-page.php';
          }
          else {
            alert('Invalid Credentials');
          }
       }
   });
 });
});
于 2013-01-21T23:45:32.060 回答
3
 $user = new User(array("username" => $_POST['username'], "password" => $_POST['password']));
 $user->Login();

将上面的代码放入 login.php 控制器文件(包括您的用户类)。或者编写一个处理请求的通用控制器。

于 2013-01-21T23:40:35.380 回答
1
$(document).ready(function(){

 $("#submit").click(function(){
    var email = $("#email").val();
    var password = $("#password").val();

 if(email.length == "" || password.length == ""){
    $("#message").html("please fill out this field first").fadeIn();
    $("#message").addClass("error");
     return false;
}else{
    $.ajax({
      type : 'POST',
      url  : 'redirect.php',
      data : {email:email,password:password},
      success : function(feedback){
         $("#text").html(feedback);
       }
      });
   }
});

$(".email_error_text").hide();
$(".password_error_text").hide();

var error_email = false;
var error_password = false;


$("#email").focusout(function(){
  check_email();
});
$("#password").focusout(function(){
  check_password();
});


function check_email(){
    $("#message").hide();
var pattern = new RegExp(/^([a-zA-Z0-9_\.\-])+\@(([a-zA-Z0-9\-])+\.)+([a-zA-Z0-9]{2,4})+$/);
if(pattern.test($("#email").val())){
     $(".email_error_text").hide();
  }else{
     $(".email_error_text").html("Invalid email address");
     $(".email_error_text").show().addClass("error");
     error_email = true;
  }
}

function check_password(){
    $("#message").hide();
var password_length = $("#password").val().length;
if(password_length < 8 ){
     $(".password_error_text").html("Should be at least 8 characters");
     $(".password_error_text").show().addClass("error");
     error_password = true;
  }else{
     $(".password_error_text").hide();
  }
}

});

我会推荐你​​去这里阅读这篇文章使用 ajax 和 php 登录

于 2019-01-23T16:42:07.483 回答