1

私が持っているものをお見せしましょう:

(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 ファイルに正しく送信されているとは思えません。echoまた、最初から機能していれば、htmlとして表示されるという意味で、jQuery関数がphp関数からの応答を適切に受信しているとは思いません。

どんな入力でも大歓迎です。

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();
});

編集:

ログイン関数では、ログイン フォームの送信イベントにハンドラーを登録しています。また、登録は 1 回だけで済みます。

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 に答える