jQuery验证远程 - 检查电子邮件是否已存在

Cyr*_*rus 2 javascript php mysql validation jquery

我有一个问题,让jQuery Validation检查mysql表中是否已存在电子邮件地址.

每次我提交表单时,它都会告诉我电子邮件已经存在,即使我知道它没有.

这是我的代码:

validation.js

$(document).ready(function () {

    $('#signup').validate({ 
        errorLabelContainer: "#cs-error-note",
        wrapper: "li",
        rules: {
            email: {
                required: true,
                email: true,
                remote: {
                    url: "check-username.php",
                    type: "post"
                }
            }
        },
        messages: {
            email: {
                required: "Please enter your email address.",
                email: "Please enter a valid email address.",
                remote: "Email already in use!"
            }
        },
        submitHandler: function(form) {
            form.submit();
        }
    });

});
Run Code Online (Sandbox Code Playgroud)

入住username.php

<?php
    require('../../private_html/db_connection/connection.php');

    $conn = new PDO("mysql:host=$servername;dbname=$dbname", $username, $password);
    $query = $conn->prepare("SELECT * FROM 'user_accounts' WHERE email = '" . $_POST['email'] . "'");
    $query->execute();

    if( $query->rowCount() > 0 ){
        echo 'true';
    }
    else{
        echo 'false';
    }
?>
Run Code Online (Sandbox Code Playgroud)

非常感谢您的帮助!

She*_*ary 7

如果查询中有/ else条件,则必须更改行计数

脚本

<script>
$(document).ready(function () {
    $('#signup').validate({ 
    errorLabelContainer: "#cs-error-note",
    wrapper: "li",
    rules: {
        email: {
            required: true,
            email: true,
                remote: {
                    url: "check-username.php",
                    type: "post"
                 }
        }
    },
    messages: {
        email: {
            required: "Please enter your email address.",
            email: "Please enter a valid email address.",
            remote: "Email already in use!"
        }
    },
    submitHandler: function(form) {
                        form.submit();
                     }
    });
});
</script>
Run Code Online (Sandbox Code Playgroud)

HTML

<form class="form-inline" role="form" id="signup">
    <div class="form-group">
    <label for="email">Email address:</label>
        <input type="email" class="form-control" name="email" id="email">
    </div>
</form>
Run Code Online (Sandbox Code Playgroud)

PHP

警告不要使用此PHP代码rowCount()可能无法正常工作,因此请跳过它并跳转到答案底部的代码.

<?php
    require('../../private_html/db_connection/connection.php');
    $conn = new PDO("mysql:host=$servername; dbname=$dbname", $username, $password);    
    if(isset($_POST['email'])) {
        $email = $_POST['email'];
        $query = $conn->prepare("SELECT email FROM user_accounts WHERE email = '$email'");
        $query->execute();
        if( $query->rowCount() > 0 ){
            echo 'false';
        } else {
            echo 'true';
        }
    }
?>
Run Code Online (Sandbox Code Playgroud)

编辑:因为@Jay Blanchard非常一致并且确定上面的代码不起作用

  • rowCount()不适用于SELECT语句.stackoverflow.com/a/31569733/1011527

  • 不,这不起作用,因为rowCount()不适用于SELECT语句.你根本没有获得行数.

  • 尝试回显$ query-> rowCount(),你会看到问题

并让我想知道上面的代码是如何在我的实时服务器上工作的时候它不应该这样我做了一些挖掘并找到了这个;

如果关联的PDOStatement执行的最后一个SQL语句是SELECT语句,则某些数据库可能会返回该语句返回的行数.但是,并不保证所有数据库都有这种行为,不应依赖于便携式应用程序.

还有这个

对于大多数数据库,PDOStatement :: rowCount()不返回受SELECT语句影响的行数.相反,使用PDO :: query()发出带有与预期SELECT语句相同的谓词的SELECT COUNT(*)语句,然后使用PDOStatement :: fetchColumn()来检索将返回的行数.然后,您的应用程序可以执行正确的操作

以上语句来源php.net手册

在上述两个语句中,一些数据库大多数数据库 rowCount() 确实可以工作,但另一方面

  • 不应该依赖于便携式应用程序
  • 使用PDOStatement :: fetchColumn()来检索将返回的行数.然后,您的应用程序可以执行正确的操作

由于OP只想要行数而不是所有行的所有数据,所以也可以这样做.归功于@Jay Blanchard

使用此代码示例

在PHP中做了一些修改,使用了isset函数.

<?php
    require('../../private_html/db_connection/connection.php');
    $conn = new PDO("mysql:host=$servername; dbname=$dbname", $username, $password);    
    if(isset($_POST['email'])) {
        $email = $_POST['email'];
        $query = $conn->prepare("SELECT email FROM user_accounts WHERE email = '$email'");
        $query->execute();
        $rows = $query->fetchAll();
        $total_rows = count($rows);
            if( $total_rows > 0 ){
                echo 'false';
            } else {
                echo 'true';
            }
    }
?>
Run Code Online (Sandbox Code Playgroud)

见行动