sql >> Database >  >> RDS >> Mysql

jQuery Validate Remote - Controleer of e-mail al bestaat

U moet het aantal rijen wijzigen als / else-voorwaarde in query

Script

<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>

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>

PHP

Waarschuwing Gebruik deze PHP-code niet, reden rowCount() werkt mogelijk niet, dus sla het over en ga naar de code onderaan het antwoord.

<?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';
        }
    }
?>

Bewerken: Als @Jay Blanchard zeer consistent en dood zeker dat bovenstaande code niet zal werken

  • rowCount() werkt niet voor SELECT-instructies. stackoverflow .com/a/31569733/1011527

  • Nee, dit werkt niet omdat rowCount() niet werkt voor SELECT-instructies. Je krijgt helemaal geen rijentelling.

  • Probeer $query->rowCount() te herhalen en je zult het probleem zien

en ik vraag me af hoe de bovenstaande code werkt op mijn live server wanneer het niet zou moeten, dus ik heb wat gegraven en vond dit;

en dit

Bron van bovenstaande verklaringen php.net-handleidingen

In beide bovenstaande verklaringen, sommige databases en Voor de meeste databases rowCount() werkt wel maar aan de andere kant

  • er mag niet op worden vertrouwd voor draagbare toepassingen
  • gebruik PDOStatement::fetchColumn() om het aantal rijen op te halen dat zal worden geretourneerd. Uw applicatie kan dan de juiste actie uitvoeren.

Omdat OP alleen het aantal rijen wil en niet alle gegevens van alle rijen, kan het ook op deze manier worden gedaan. Krediet gaat naar @Jay Blanchard

Gebruik dit codevoorbeeld

enkele wijzigingen aangebracht in PHP, gebruik isset functie.

<?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';
            }
    }
?>

Zie in actie



  1. Hoe JSON-gegevens op te slaan in MySQL

  2. Upgrade PostgreSQL van 9.6 naar 10.0 op Ubuntu 16.10

  3. Hoe te repareren Bericht:SQLSTATE [08004] [1040] Te veel verbindingen

  4. Is het legaal om MySQL in een commerciële omgeving te gebruiken?