1

让我告诉你我有什么:

(一)形式:

 <form name="login-form" class="login-form" method="post" onSubmit="login()">

  <div class="header">
    <h1>Sign In</h1>
  </div>

  <div class="content">
    <input type="hidden" name="siteToken" value="$token" />
    <input id="username" name="username" type="text" class="input username"  placeholder="Username" required="required" />

  <div class="user-icon"></div>
    <input id="password" name="password" type="password" class="input password" placeholder="Password" required="required" />

  <div class="pass-icon"></div>

  </div>

  <div class="footer">
    <input type="submit" name="submit" value="Login" class="button" />
  </div>
</form>

(2) jQuery函数:

$(document).ready(function login() {
  $('.login-form').submit(function() {
      var formData = $(this).serialize();
      $("input").prop("disabled", true);
      $.post('VRC_LoginProcess.php', formData, loginMessage);

      function loginMessage(data) {
        $('.header').append(data);
      };    
  });
});

(3) PHP函数:

<?php

require_once('VRC_Header.php');
require_once('../Classes/VRC_MasterOO.php');
require_once('../Classes/VRC_Secure_Login.php');


//*******************************//
//Declerations

$signIn = "";
$username = "";
$password = "";
$success = "";
$error = "";

//******************************//

//****************************************************************************************//
//Script Header

$signIn = new UserService($dbuser, $dbpass, $dbhost, $dbname); //Create new class instance 
$signIn->sec_session_start(); //Begin session

//***************************************************************************************//

//***************************************************************************************//
//Begin Login Functions

if(isset($_POST['username'], $_POST['password'])) {

    //Assign POST submissions to passable php variables
    $username = $_POST['username'];
    $password = $_POST['password'];
    $passedToken = $_POST['siteToken'];

    /*//Check Token Values (prevent CSRF attacks)
    if($passedToken != $_SESSION['token']) {
        $error = "CSRF attack detected. Please close your browser and try again."; 
        $signIn->csrfAttackLog($username);
        echo $error;
        exit();     
    }*/


    //Test if both fields are not null
    if($username == "" || $password == "")
    {
        $error = "Not all fields were entered<br />";
        echo $error;
        exit();
    }

    //Start login process
    else
    {
        $success = $signIn->login($username, $password);
        if ($success === true)
        { //Login Successful
            echo "Success!"; //Direct to main page.
            exit();
        }
        //Specific login failure determination
        else 
        {
            switch ($success){
                case 1:
                    $error = "Your account has been locked.";
                    echo $error;
                    break;
                case 2: 
                    $error = "Invalid Username/Password (2)";
                    echo $error;
                    break;
                case 3:
                    $error = "Invalid Username/Password";
                    echo $error;
                    break;  
                case 4: 
                    $error = "Invalid Username/Password (3)";
                    echo $error;
                    break;
            }
        }           
    }
}

?>

拳头,我怀疑问题出在PHP函数上。在实现 jQuery 调用之前我已经对其进行了测试(我直接在 htmlaction属性中使用了它)。我怀疑问题出在 jQuery 函数中(我刚开始使用 jQuery 并不太熟悉它)。

请注意,我暂时在 php 文件中删除了令牌输入。我只是想在处理它之前让它工作(那部分还有另一个问题)。

我不相信 post 变量被正确发送到 php 文件。另外,我也不相信我的 jQuery 函数可以正确接收echo来自我的 php 函数的响应,因为它会将其显示为 html - 只要它开始工作。

任何输入表示赞赏。

4

2 回答 2

4
$(document).ready(function login() {

那条线就是问题所在。

页面的其余部分可能无法使用登录功能。它只是一个匿名函数的名称,它是函数的参数$(document).ready

你有一个范围问题。

将登录功能单独移出:

function loginMessage(data) {
    $('.header').append(data);
};
function login() {
    $('.login-form').submit(function () {
        var formData = $(this).serialize();
        $("input").prop("disabled", true);
        $.post('VRC_LoginProcess.php', formData, loginMessage);
    });
}
$(document).ready(function () {
    login();
});

编辑:

在您的登录功能中,您正在为登录表单的提交事件注册一个处理程序。而且只需要注册一次。

So, remove `onsubmit=login()` from your form's attributes, and you are good.
于 2013-06-27T06:27:59.063 回答
3

将您的 HTML 稍微更改为此

<form name="login-form" class="login-form" method="post">
    <div class="header">
         <h1>Sign In</h1>

    </div>
    <div class="content">
        <input type="hidden" name="siteToken" value="$token" />
        <input id="username" name="username" type="text" class="input username" placeholder="Username" required="required" />
        <div class="user-icon"></div>
        <input id="password" name="password" type="password" class="input password" placeholder="Password" required="required" />
        <div class="pass-icon"></div>
    </div>
    <div class="footer">
        <input type="submit" name="submit" value="Login" class="button" />
    </div>
</form>

和 Javascript

$(document).ready(function () {
    $('.login-form').submit(function (e) {
        e.preventDefault();
        var formData = $(this).serialize();
        $("input").prop("disabled", true);
        $.post('VRC_LoginProcess.php', formData, loginMessage);

        function loginMessage(data) {
            $('.header').append(data);
        }
    });
});
于 2013-06-27T06:40:22.303 回答