Проверка на наличие дублирующих данных MySQL с помощью загрузчика валидатора - PullRequest
0 голосов
/ 10 декабря 2018

Я создал форму регистрации с валидатором начальной загрузки и подключил ее к базе данных MySQL.Я хочу предотвратить повторяющиеся записи, проверяя существующие данные электронной почты и возвращая сообщение через скрипт проверки загрузчика.Я использую удаленный метод, но проблема в том, что как только я начинаю печатать в поле электронной почты, я получаю сообщение «Электронная почта уже получена».сообщение, хотя электронная почта, возможно, еще не существует в базе данных, или если она набрана только одним алфавитом.Я также получаю записи данных, даже если я не отправил форму.Я искал в Интернете и понял, что большинство решений существует для плагина проверки jquery, но нет загрузчика валидатора.Мне нужна помощь, пожалуйста.Вот мой код:

signup.php

 <div class="signup-form">
 <h1>Sign up for free!</h1><br>

 <form id="form1" action="registration.php" class="loading-form" method="POST">

<div class="form-group">
  <label for="name-input">Username</label>
  <input required type="text" name="username" class="form-control" id="username" maxlength="100">
</div>    

  <label for="email-input">Email</label>
  <input required name="email" type="email" class="form-control" id="email" title="An email is required">
</div>

<p>You accept our <a href="pages/terms.php" style="color: #337ab7;">Terms &amp; Conditions</a> by creating your account.</p>

<div class="form-group">
<!-- Do NOT use name="submit" or id="submit" for the Submit button -->
<button type="submit" class="btn btn-success">Sign up</button>
</div>

  <script>
  $(document).ready(function() {
  $('#form1').bootstrapValidator({
    // To use feedback icons, ensure that you use Bootstrap v3.1.0 or later
    feedbackIcons: {
        valid: 'glyphicon glyphicon-ok',
        invalid: 'glyphicon glyphicon-remove',
        validating: 'glyphicon glyphicon-refresh'
    },
    fields: {
        username: {
            message: 'The username is not valid',
            validators: {
                notEmpty: {
                    message: 'The username is required'
                },
                stringLength: {
                    min: 6,
                    max: 30,
                    message: 'The username must be more than 6 and less than 30 
        characters long'
                },
                regexp: {
                    regexp: /^[a-zA-Z-' ]+$/,
                    message: 'The username can only consist of alphabetical and number'
                },
                different: {
                    field: 'password',
                    message: 'The username and password cannot be the same as each other'
                }
            }
        },
        email: {
            validators: {
                notEmpty: {
                    message: 'The email address is required'
                },
                emailAddress: {
                    message: 'The email address is not a valid'
                },
                remote: {
                    message: 'The email address is already taken.',
                    url: "registration.php"
                }
            }
        },
    }
});
});

registration.php

<?php   
include ("connect.php");
session_start();

$username = $_POST['username'];
$email = $_POST['email'];

$username = mysqli_real_escape_string($con, $_POST['username']);
$email = mysqli_real_escape_string($con, $_POST['email']);

$query1 = "SELECT * FROM registration where (email='$email')";
$check = mysqli_query($con, $query1);
$checkrows=mysqli_num_rows($check);

if($checkrows>0) {
echo json_encode(FALSE);
}
else
{
echo json_encode(TRUE);
}

//insert results from the form input
$query = "INSERT INTO registration (username, email) VALUES('$username', '$email')";
$result = mysqli_query($con, $query);
$num1=mysqli_num_rows($result);
$row = mysqli_fetch_assoc($result);

?>

Ответы [ 3 ]

0 голосов
/ 11 декабря 2018

Во-первых, ваш php-файл никогда не останавливает скрипт, если в таблице есть адрес электронной почты.Потому что ваше заявление if является проблемой.

<?php
header('Content-type: application/json');

$valid = true;
$message = '';

include ("connect.php");
session_start();

$username = $_POST['username'];
$email = $_POST['email'];

$username = mysqli_real_escape_string($con, $_POST['username']);
$email = mysqli_real_escape_string($con, $_POST['email']);

$query1 = "SELECT * FROM registration where (email='$email')";
$check = mysqli_query($con, $query1);
$checkrows = mysqli_num_rows($check);

if($checkrows > 0) {
   // If the email address exists in the table, the ``$valid`` variable define as false.
   $valid = false;
   $message = 'The email address exists.';
}
else
{
   // If the email address has not exists in the table, adds new record to database and $valid variable returns as true.
   //insert results from the form input
   $query = "INSERT INTO registration (username, email) VALUES('$username', '$email')";
   $result = mysqli_query($con, $query);
   $num1=mysqli_num_rows($result);
   $row = mysqli_fetch_assoc($result);
}

echo json_encode(
$valid ? array('valid' => $valid) : array('valid' => $valid, 'message' =>     $message)
);

?>

Пожалуйста, проверьте демонстрационный файл remote.php из официального репо.https://github.com/nghuuphuoc/bootstrapvalidator/blob/master/demo/remote.php

0 голосов
/ 10 января 2019

Вот код, который работал для меня:

регистрация

header('Content-type: application/json');

$valid = true;
$message = '';

ob_start();
error_reporting(E_ALL & ~E_WARNING & ~E_NOTICE);

include ("connect.php");
session_start();

//get the name and comment entered by user
$fullName = $_POST['fullName'];
$userName = $_POST['userName'];
$birthday = $_POST['birthday'];
$gender = $_POST['gender'];
$email = $_POST['email'];
$password = $_POST['password'];


$fullName = mysqli_real_escape_string($con, $_POST['fullName']);
$userName = mysqli_real_escape_string($con, $_POST['userName']);
$birthday = mysqli_real_escape_string($con, $_POST['birthday']);
$email = mysqli_real_escape_string($con, $_POST['email']);
$password = mysqli_real_escape_string($con, $_POST['password']);

//insert results from the form input
$query1 = "SELECT * FROM registration where (email='$email')";
$check = mysqli_query($con, $query1);
$checkrows=mysqli_num_rows($check);

if($checkrows > 0) {
   // If the email address exists in the table, the ``$valid`` variable define as false.
   $valid = false;
   $message = 'The email address exists.';
}
else
{

}

echo json_encode(
$valid ? array('valid' => $valid) : array('valid' => $valid, 'message' =>     $message)
);

?>
0 голосов
/ 10 декабря 2018

В конце вашего файла "registration.php" вы вставляете полученную информацию в базу данных.

Это означает, что вы вставляете дубликаты или даже искаженные адреса электронной почты.Кроме того, если ваш JavaScript пытается проверить при каждом нажатии клавиши, вы вставляете каждую букву.Например, если вы регистрируетесь на test@example.com, у вас есть регистр с адресом электронной почты «t», другой с «te» и т. Д. До полного сообщения.

Возможно, в этом проблема.

Вам необходимо внести некоторые изменения: Прежде всего: выполнить некоторые проверки полученных значений.Например, если checkrows> 0, никогда не выполняйте запрос вставки.Также проверьте, что электронная почта хорошо отформатирована, на стороне PHP.

Кроме того, попробуйте писать в таблицу только тогда, когда пользователь нажимает на кнопку отправки.

Вы можете использовать два файла: один для проверки,и еще один для проверки и записи результата в таблицу.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...