sql >> Databasteknik >  >> RDS >> Mysql

jQuery Validate Remote - Kontrollera om e-post redan finns

Du måste ändra radantalet om / annat villkor i frågan

Skript

<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

Varning Använd inte denna PHP-kod orsak rowCount() kanske inte fungerar så hoppa över det och hoppa till koden längst ner i svaret.

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

Redigera: Som @Jay Blanchard mycket konsekvent och helt säker på att ovanstående kod inte kommer att fungera

  • rowCount() fungerar inte för SELECT-satser. stackoverflow .com/a/31569733/1011527

  • Nej, detta kommer inte att fungera eftersom rowCount() inte fungerar för SELECT-satser. Du får inte ett antal rader alls.

  • Försök att upprepa $query->rowCount() så ser du problemet

och får mig att undra hur ovanstående kod fungerar på min liveserver när det inte borde så jag grävde lite och hittade det här;

och det här

Källa till ovanstående uttalanden php.net manualer

I båda ovanstående uttalanden, vissa databaser och För de flesta databaser rowCount() fungerar men å andra sidan

  • bör inte lita på för bärbara applikationer
  • använd PDOStatement::fetchColumn() för att hämta antalet rader som kommer att returneras. Din applikation kan sedan utföra rätt åtgärd.

Eftersom OP bara vill ha antalet rader och inte alla data för alla rader så kan det också göras så här. Kredit går till @Jay Blanchard

Använd detta kodexempel

gjort några ändringar i PHP, använd isset funktion.

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

Se i praktiken



  1. kolumnordning i SELECT *-satsen - garanterat?

  2. Varför kan jag inte använda kolumnalias i nästa SELECT-uttryck?

  3. Väljer sista raden UTAN någon form av nyckel

  4. CTE för att få alla barn (ättlingar) till en förälder