Трябва да промените броя на редовете if / 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>
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
Предупреждение Не използвайте този 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';
}
}
?>
Редактиране: Тъй като @Jay Blanchard е много последователен и съм сигурен, че горният код няма да работи
-
rowCount() не работи за изрази SELECT. stack .com/a/31569733/1011527
-
Не, това няма да работи, защото rowCount() не работи за изрази SELECT. Изобщо не получавате броя на редовете.
-
Опитайте да повторите $query->rowCount() и ще видите проблема
и ме кара да се чудя как горният код работи на моя сървър на живо когато не трябва, така че поразрових и открих това;
и това
Източник на горните твърдения наръчници за 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';
}
}
?>