Проверка Bootstrap 5.0 с помощью php, где пользователь уже существует в базе данных

моя регистрационная форма имеет базовую проверку для атрибутов html, например. type = 'email' и т. д. Они отображаются в красивом стиле благодаря новой функции в Bootstrap Validation.

Проблема возникает, когда я отправляю форму на PHP. Сначала данные проходят через AJAX в PHP для отображения ошибок без обновления страницы, но при проверке, например. если введенный адрес электронной почты уже зарегистрирован с отрицательным результатом, мой ввод все еще помечен как действительный (зеленая подсветка). Что я должен делать

register.php

$success = false;
$error = false;
$mssg = "Error";

if(!isset($_POST['email']) && !isset($_POST['pass'])){
    $mssg = "Inputs are empty";
}else{

    //example result for database
    $used_email = "[email protected]";

    // example validation
    if($_POST['email'] == $used_email){
        $error = 'email';
        $mssg = "Email is already taken!";
    }else $success=true;
    
        
}

header('Content-Type: application/json');
echo json_encode(array('success' => $success, 'error'=> $error, 'mssg' => $mssg));
exit;

(function (){
      $("#formregister").on('submit', function(ev){

        const form = $(this);
  
        ev.preventDefault();
        ev.stopPropagation();
  
        var obj= new Object;
        Object.keys(form[0].getElementsByTagName('input')).filter(function(key) {
          obj[form[0][key].id] = form[0][key].value;
        });
  
        if (this.checkValidity()) {
            $.ajax({
            type: "POST",
            url: "register.php",
            data: obj,
            cache: false,
            success: function(data) {
              if(!data.success) {
                if(data.error){
                  $("#"+data.error).addClass("is-invalid").focus();
                  $("#"+data.error).next().html(data.mssg);
                }else 
                  $("#result").attr("class", "alert alert-danger").html(data.mssg);
              }else{
                $("#result").html("Success");
                $("#result").attr("class", "alert alert-success");
              }
            }
            });
        }else form.find(":invalid").first().focus();

        form.addClass("was-validated");
      });

})();
<link href="https://cdn.jsdelivr.net/npm/[email protected]/dist/css/bootstrap.min.css" rel="stylesheet"/>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>

<div class="container">
<form class="needs-validation" id="formregister" novalidate>
        <div id="result"></div>
        <div class="mt-2">
          <label for="email" class="form-label">E-mail</label>
          <input type="email" class="form-control" id="email" required>
          <div class="invalid-feedback">123</div>
        </div>

        <div class="mt-2">
          <label for="pass" class="form-label">Password</label>
          <input type="password" class="form-control" id="pass" required>
          <div class="invalid-feedback"></div>
        </div>

        <div class="col-12 justify-content-end d-flex mt-4 mb-2">
          <button type="submit" class="btn btn-primary">Register</button>
        </div>
</form>
</div>

Если я добавлю класс .is-invalid во время проверки, цвет ввода не изменится на красный.

Ошибка img


person foo    schedule 12.01.2021    source источник
comment
Ну, для начала, вы должны поделиться кодом PHP, который выполняет проверку.   -  person El_Vanja    schedule 12.01.2021


Ответы (2)


ПО ВЫПУСКУ STAYS GREEN:

После проверки сервера вам необходимо изменить класс ввода с помощью AJAX или PHP на .is-invalid, чтобы получить НЕПРАВИЛЬНЫЙ красный стиль - или .is-valid для правильное значение.

Вы можете дать пользователю дополнительные подсказки с помощью .invalid-feedback, также поддерживаемого этими классами.

Exampled можно найти здесь: https://getbootstrap.com/docs/5.0/forms/validation/#server-side

Еще справка, нам нужен ваш PHP-код

Обновление: вы используете BS5 BETA.

Выпущена версия V5.0.

Получите это сейчас, и, надеюсь, они исправили ошибку. https://getbootstrap.com/docs/5.0/getting-started/download/ < / а>

person Alexander Dobernig    schedule 12.01.2021

Я нашел решение! Атрибуты : invalid и : valid имеют преимущества по стилю по сравнению с классами, поэтому класс .is-invalid должен иметь атрибуты границы с ! важно в конце.

Для людей, у которых в будущем возникнет подобная проблема.

Необходимо добавить в boostrap.css .is-invalid и .is-valid - ›! Important

person foo    schedule 14.01.2021
comment
Не могли бы вы поделиться рабочим кодом, так как я не уверен, где вы хотите добавить! Important в файл .css или в код JS ... было бы неплохо, если бы вы могли поделиться кодом, так как потратили значительное время, чтобы заставить форму работать с BS 5 с проверкой .. - person Learning; 14.06.2021