@Militems
Самый глупый из людей

Почему не работает сравнение строк в ajax авторизации,?

Добрый день. Делаю простую авторизацию посредством ajax запроса:
Форма авторизации
<form class="login mt-3" action="" method="POST">


  <label for="login">Ваш логин:</label>
  <input type="text" name="login" id="login" class="form-control">

  <label for="pass">Введите пароль:</label>
  <input type="pass" name="pass" id="pass" class="form-control">
<div class="alert alert-danger mt-3" id="error-reg" style="display: none;"></div>

  <button type="button" id="auth_user" class="btn btn-primary mt-2">Войти</button>

  </form>

  </div>

<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js"></script>
  <script>
    $('#auth_user').click(function(){
      var login = $('#login').val();
      var pass = $('#pass').val();

      $.ajax({
        url: 'pages/register/login.php',
        type: 'POST',
        cache:  false,
        data: {'login' : login,'pass' : pass},
        dataType: 'html',
        success: function(data){
          if(data == 'Готово'){
          $('#auth_user').text(data);
          $('#error-regauth').hide();
          document.location.reload(true);
          }
          else{
          $('#error-reg').show();
          $('#error-reg').text(data)
          }
        }
      });
    });
  </script>


Который взаимодействует со страницей login.php:
<?php

  $login = trim(filter_var($_POST['login'], FILTER_SANITIZE_STRING));
  $pass = trim(filter_var($_POST['pass'], FILTER_SANITIZE_STRING));

  $error = '';
  if(mb_strlen($login) <= 3)
  $error = 'Введите логин. Минимум 3 символа.';
  else if(mb_strlen($pass) <= 3)
  $error = 'Введите пароль. Минимум 3 символа.';

  if($error != ''){
  echo "$error";
  exit();
}
$hash = "ase4hhsheshj2drjafawg";
$pass = md5($pass.$hash);

$user = 'root';
$password = '';
$db = 'название';
$host = 'название';

$dsn ='mysql:host='.$host.';dbname='.$db;
$pdo = new PDO($dsn,$user,$password);

$sql = 'SELECT `id` FROM `users` WHERE `login` =:login && `pass` =:pass';
$query = $pdo->prepare($sql);
$query->execute(['login'=>$login, 'pass'=>$pass]);

$user = $query->fetch(PDO::FETCH_OBJ);
if($user->id==0)
  echo 'Такого пользователя не существует';
else{


echo 'Готово';
}
 ?>


Итого, если пользователь успешно входит, я получаю строку "готово", которая сравнивается с условием в операторе if и выводится текст в кнопку, что авторизация прошла успешно(регистрация, к слову, работает по такому же принципу).

Но он туда не выводится, он выводится в else в #error-reg, т.е alert, куда должны выводится только результаты проверок. И обновление страницы, которые прописано в условии так же не работает.
Подключение к базе данных данных правильное, страница с регистрацией добавляет новых пользователей, кнопка там меняется и происходит обновление страницы.
Кодировка везде UTF-8, на странице с регистрацией аналогичный код и там всё работает без каких-либо проблем. И вот поэтому я не могу понять, почему в регистрации работает, а в авторизации нет?
Страница с формой регистрации
?>
<code lang="php">

<?php
require 'header.php'
 ?>
 <div class="wrappers">

   <div class="content">

<div class="container">

<div class="pages">
  <div class="row">
  <div class="col-lg-6 ">
<h5>
  Регистрация
</h5>
<form  class="register mt-3" action="" method="POST">

<label for="username">Ваше имя:</label>
<input type="text" name="username" id="username" class="form-control">

<label for="login">Придумайте логин:</label>
<input type="text" name="login" id="login" class="form-control">

<label for="email">Ваш Email:</label>
<input type="email" name="email" id="email" class="form-control">

<label for="pass">Придумайте пароль:</label>
<input type="pass" name="pass" id="pass" class="form-control">

<div class="alert alert-danger mt-3" id="error-reg" style="display: none;"></div>
<div class="alert alert-success mt-3" id="happy-reg" style="display: none;"></div>

<button type="button" id="reg_user" class="btn btn-primary mt-2">Зарегистрироваться</button>

</form>
  </div>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js"></script>

<script>
  $('#reg_user').click(function(){
    var username = $('#username').val();
    var login = $('#login').val();
    var email = $('#email').val();
    var pass = $('#pass').val();

    $.ajax({
      url: 'pages/register/register.php',
      type: 'POST',
      cache:  false,
      data: {'username' : username,'login' : login,'email' : email,'pass' : pass},
      dataType: 'html',
      success: function(data){
        if(data == 'Готово'){
        $('#reg_user').text('Вы успешно зарегистрировались');
        $('#error-reg').hide();
        document.location.reload(true);
        }
        else{
        $('#error-reg').show();
        $('#error-reg').text(data)
        
        }
      }
    });
  });
</script>

<div class="col-lg-6">

</div>
 </div>
 </div>

</div>

</div>

   </div>

 <?php

 require 'footer.php'
  ?>

</code>

Страница обработки регистрации
<?php

  $username = trim(filter_var($_POST['username'], FILTER_SANITIZE_STRING));
  $login = trim(filter_var($_POST['login'], FILTER_SANITIZE_STRING));
  $email = trim(filter_var($_POST['email'], FILTER_SANITIZE_EMAIL));
  $pass = trim(filter_var($_POST['pass'], FILTER_SANITIZE_STRING));

  $error = '';
  if(mb_strlen($username) <= 3)
  $error = 'Введите имя. Минимум 3 символа.';
  else if(mb_strlen($login) <= 3)
  $error = 'Введите логин. Минимум 3 символа.';
  else if(mb_strlen($email) <= 3)
  $error = 'Введите Email. Минимум 3 символа.';
  else if(mb_strlen($pass) <= 3)
  $error = 'Введите пароль. Минимум 3 символа.';

  if($error != ''){
  echo "$error";
  exit();
}
$hash = "ase4hhsheshj2drjafawg";
$pass = md5($pass.$hash);

$user = 'root';
$password = '';
$db = 'technodasha';
$host = 'techodasha.ru';

$dsn ='mysql:host='.$host.';dbname='.$db;
$pdo = new PDO($dsn,$user,$password);

$sql = 'INSERT INTO users(username,login,email,pass) VALUES(?,?,?,?)';
$query = $pdo->prepare($sql);
$query->execute([$username,$login,$email,$pass]);

echo 'Готово';


Огромное спасибо за внимание и заранее за помощь.
  • Вопрос задан
  • 131 просмотр
Пригласить эксперта
Ответы на вопрос 1
@Kirill-Gorelov
С ума с IT
А еще лучше проверять не на "Готово", а как нибудь так.
бекэенд
return js_encode(array('success'=>0, 'msg'=>'Введите, пожалуйста, правильный Email адрес'));


фронтенд
data = JSON.parse(resultData);
 if (data.success == 1) {
      alert(data.msg);
 }else{
     alert(data.msg);      
  }
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы