【问题标题】:onsubmit not working with ajax mysql validationonsubmit 不能使用 ajax mysql 验证
【发布时间】:2014-07-24 23:22:22
【问题描述】:

我知道有很多类似的问题,但我一直找不到能解决我问题的问题。

问题是我想检查我的表单中的用户/密码是否存在于 mysql 数据库中,我通过在表单的 onsubmit 属性处调用 javascript 函数来执行此操作,该函数通过 AJAX 将输入发布到检查它的 php 和将结果回显给 javascript 函数,该函数会提醒用户并返回 false 或返回 true 以便表单提交。

HTML

<span id="error_message" style="color:#CC3300;font-size:15px" ></span><br/>
<form method="post" action="./includes/process_login.php" onsubmit="return validateForm()" name="login_form">
    <div>
        <label for="email">Email</label><br/>
        <input placeholder="Introduce tu email" type="text" id="email" name="email" maxlength="50" />
    </div>
    <div>
        <label for="password">Password</label><br/>
        <input placeholder="Introduce tu password" type="password" name="password" id="password" maxlength="16" />
    </div>
    <div>
        <a class="passwordReset" href="./admin/passwordRecovery.php">He olvidado mi contraseña...</a>
    </div>
    <input type="submit" id="submit_button" value="ENTRAR" />
</form>

JAVASCRIPT/AJAX

function validateForm() {
    var pattern = new RegExp(/* Email validation pattern */);
    var isValid;

    if (pattern.test($("#email").val())) {  
        $.ajax({
            url: "../includes/process_login.php",
            cache: false,
            type: "POST",
            data: "email=" + $("#email").val() + "&password=" + $("#password").val(),
            success: function(data){
                if (data == '1') {
                    isValid = true;
                } else {
                    $("#error_message").text('Email/Password incorrectos!CCC');
                    isValid = false;
                }
            },

            error: function(){
                $("#error_message").text('Email/Password incorrectos!');
                isValid = false;
            }
        });
} else {
    $("#error_message").text('El email debe tener un formato válido');
    isValid = false;

}

return isValid;
}

PHP 验证和表单操作:

<?php
include_once 'db_connect.php';
include_once 'functions.php';

sec_session_start();

if (isset($_POST['email'], $_POST['password'])) {
    $email = $_POST['email'];
    $password = $_POST['password'];

    if (login($email, $password, $mysqli) == true) {
        // Login success 
    header("Location: ../graficas.php");
        echo '1';
    } else {
        // Login failed 
    echo '0';
    }
} else {
    // The correct POST variables were not sent to this page.
    echo '0';
}

exit;

当电子邮件输入强制使用电子邮件正则表达式时,表单总是提交,因此问题必须在 ajax 函数内部。但我不知道那是什么,几个小时后,我比以往任何时候都更接近庇护所。

提前致谢!

【问题讨论】:

  • 在}else{之前使用return false;
  • 那么它根本不提交
  • 是的,如果您使用 ajax 发布,则不应提交。否则,您当前的 ajax 请求将被停止,并将直接提交表单。
  • 那么你建议我如何检查数据库?
  • 我的意思是我需要提交表单,因为我想从另一个站点登录

标签: javascript php mysql ajax onsubmit


【解决方案1】:

我终于可以通过将表单和所有逻辑放在一个 PHP 文件中来完成它:

    <!-- The HTML login form -->
    <form method="post" action="<?=$_SERVER['PHP_SELF']?>">
        <div>
            <label for="username">Login</label><br/>
            <input placeholder="Introduce tu login" type="text" id="user" name="username" maxlength="50" />
        </div>
        <div>
            <label for="password">Password</label><br/>
            <input placeholder="Introduce tu password" type="password" name="password" id="password" maxlength="16" />
        </div>
        <div><a class="passwordReset" href="./admin/passwordRecovery.php">He olvidado mi contraseña...</a></div>
        <input type="submit" id="submit_button" name="submit" value="ENTRAR" />
    </form>

    <?php
    if (isset($_POST['submit'])){
        include_once 'includes/db_connect.php';
        include_once 'includes/functions.php'; 
        sec_session_start();

        $username = $_POST['username'];
        $password = $_POST['password'];     

            if (login($username, $password, $mysqli) == true) {
                // Login success
                echo '<script type="text/javascript">window.location.replace("graficas.php");</script>';

            } else {
                // Login failed
                echo '<script type="text/javascript">document.getElementById(\'error_message\').innerHTML = "Login/Password incorrectos!";</script>';
            }
    }
    ?>

在需要修改元素并避免 AJAX 问题时通过“echo”生成 JS 脚本。

这里的关键元素是

isset($_POST['submit'])

检查表单之前是否已提交。

我从这个不错的教程中获得了这个想法:http://w3epic.com/php-mysql-login-system-a-super-simple-tutorial/

【讨论】:

    【解决方案2】:

    在您的 validateForm() 中添加此内容以防止提交表单

    e.preventDefault();
    

    这样

    function validateForm(e){
      var pattern = new RegExp(/* Email validation pattern */);
      var isValid;
      if (pattern.test($("#email").val())) {  
       e.preventDefault();
       //Do rest of your code
    

    【讨论】:

    猜你喜欢
    • 2012-04-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-07-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多