javascript - 表格未被检查

标签 javascript php jquery ajax

我希望在我的代码中进行服务器端检查。提交表单后,我应该在服务器端检查表单并且应该回显错误。但是现在,无论我做什么,总是注册一个帐户。提交按钮会跳过所有服务器端检查,只会将帐户添加到数据库中。

这是我的 Javascript

 $("#registerSubmit").click(function(e) {
            document.getElementById("registerSubmit").disabled = true; 
            document.getElementById('strongText').innerHTML = "Creating account, please wait...<br>";
            $("#strongText").fadeIn();
            e.preventDefault();
            $("input[name='username']").val($("#input-2").val());
            $("input[name='firstname']").val($("#input-1").val());
            $("input[name='password1']").val($("#input-3").val());
            $("input[name='password2']").val($("#input-4").val());
            $("input[name='email']").val($("#input-5").val());
            var username = $("input[name='username']").val();
            var firstname = $("input[name='firstname']").val();
            var password1 = $("input[name='password1']").val();
            var password2 = $("input[name='password2']").val();
            var email = $("input[name='email']").val();
            $.ajax({
                type: 'POST',
                data: {
                    username: username,
                    firstname: firstname,
                    password1: password1,
                    password2: password2,
                    email: email
                },
                url: 'checkuser.php',
                success: function(data) { //Receives the data from the php code 
                    //console.log(data);
                    if (data == "Unavailable") {
                        document.getElementById('strongText').innerHTML = "Username Unavailable<br>";
                        document.getElementById("registerSubmit").disabled = false; 
                    } else if(data == 'Email_Exists') {
                        document.getElementById('strongText').innerHTML = "Email Already Registered<br>";
                        document.getElementById("registerSubmit").disabled = false; 
                    } else {
                        $.post(
                            'registerCheck.php', 
                            $('#registerform').serialize(),
                            function(data,status){
                                document.getElementById('strongText').innerHTML = data + "<br>";
                                window.location.href = "/login.php";
                            }
                        );
                        //window.location.href = "/login.php";
                    }

                },
                error: function(xhr, err) {
                    console.log("readyState: " + xhr.readyState + "\nstatus: " + xhr.status);
                    console.log("responseText: " + xhr.responseText);
                }
            });

        });

这是我的PHP

<?php
require 'databaseinformation.php';

$firstname = $_POST["firstname"];
$password1 = $_POST["password1"];
$password2 = $_POST["password2"];
$email = $_POST["email"];
$ip = $_SERVER['REMOTE_ADDR'];
$username = $_POST["username"];

$mysqli = new mysqli(DB_SERVER, DB_USER, DB_PASSWORD, DB_DATABASE);


if(mysqli_connect_errno()) {
    echo "Connection Failed.";
    exit();
}

if (strlen($username) < 3 || strlen($username) > 15) {
    echo "Username must be between 3 and 15 characters";
} elseif (strlen($password1) < 5 || strlen($password1) > 25) {
    echo "Password must be between 5 and 25 characters";
} elseif ( $password1 !== $password2) {
    echo "Password are mismatched";
} elseif (strpos($email,'@') !== true || strpos($email,'.') !== true) {
    echo "Not a valid E-Mail";
} elseif ($stmt = $mysqli->prepare("SELECT `username` FROM `accounts` WHERE username = ?")) {
    $stmt->bind_param("s", $username);
    $stmt->execute();
    $stmt->store_result(); 
    if ($stmt->num_rows) {
        //echo json_encode("0");
        echo "Unavailable";

        //if unavailable
        // header('Location: /register.html'); 
    }
    else {
        if ($stmt = $mysqli->prepare("SELECT `email` FROM `accounts` WHERE email = ?")) {
    $stmt->bind_param("s", $email);
    $stmt->execute();
    $stmt->store_result();
    if ($stmt->num_rows) {
        //echo json_encode("2");
        echo "Email_Exists";
        //if unavailable
        // header('Location: /register.html'); 
    }
    else {
        //echo json_encode("1");
        echo "1";
    }

}
    }

}
$mysqli->close(); 

?>

最佳答案

问题出在您的电子邮件验证码中,无论您做什么,您总是以从服务器收到 Not a valid E-Mail 消息而告终。而且,由于 AJAX 成功时未处理它,因此总是执行 else block ,因此您的下一个 POST block

因此,取而代之的是用于电子邮件验证,

} elseif (strpos($email, '@') == false || strpos($email, '.') == false) {

} elseif (strpos($email, '@') == 0 || strpos($email, '.') == 0) {

为什么它不起作用?

!==     Not identical

例如。 $x !== $y 如果 $x 不等于 $y,或者它们不是同一类型,则返回 true

并且,strpos($email, '@') 返回您与 bool 值进行对比的 Integer 类型。


并且,您遗漏了不同的验证消息,例如,

  • 用户名必须介于 3 到 15 个字符之间
  • 密码必须介于 5 到 25 个字符之间
  • 密码不匹配

请处理 all in AJAX 成功。

if(data == "Unavailable") {                
}else if(data == 'Email_Exists') {          
}else if (data == 'Username must be between 3 and 15 characters'){
}else if (data == 'Password must be between 5 and 25 characters'){
}else if (data == 'Password are mismatched'){
}else if(data=='Not a valid E-Mail'){
}

关于javascript - 表格未被检查,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28146604/

相关文章:

php - 在每一页的开头重复一个表格

php - 为什么 PHP cURL 会丢弃数字键?

php - 如何根据对象的键(而不是整个对象)更新列表中的对象?

javascript - 动态更改 div 的边框半径

javascript - 防止通过 jquery.load() 加载时重定向脚本

javascript - 编译好的脚本应该放在 React 中的什么位置?

java - 无法使用 Jmeter-Webdriver 访问方法

javascript - 如何使容器 div 仅水平溢出而不对其内部 div 使用 "display:inline-block"?

javascript - 无法从数据集制作饼图

jQuery Uncaught TypeError $ 不是一个函数(仅适用于少数页面)