За последние 24 часа нас посетили 22580 программистов и 1014 роботов. Сейчас ищут 690 программистов ...

Проверка занятости логина

Тема в разделе "PHP для новичков", создана пользователем Нурсултан, 26 фев 2017.

  1. Нурсултан

    Нурсултан Новичок

    С нами с:
    26 фев 2017
    Сообщения:
    3
    Симпатии:
    0
    Доброго времени суток. Помогите пожалуйста разобраться с формой. В интернете нашел код проверки занятости логина. Вставил в свой проект. Все работает, но есть одна проблема. Хочу чтобы при проверке форма не отправлялось если логин занят. А если нет то отправлялось. У меня проверяется занят или нет. Но форма отправляется. Если указываю return false то форма вообще не отправляется, даже если логин свободен.

    Вот все коды.

    HTML:
    1. <form method="post" id="reg-form">
    2.                     <input placeholder="E-mail" style="width: 100%;" value="" type="email" name="reg-login" id="reg-login" onblur="checkLogin(this.value)" required><span id="check_login"></span>
    3.                     <input placeholder="Пароль" style="width: 100%;" value="" type="password" name="reg-password" id="reg-password" required>
    4.                     <input placeholder="Повторите пароль" style="width: 100%;" value="" type="password" name="reg-repassword" id="reg-repassword" required>
    5.                     <input type="submit" name="reg-submit" id="reg-submit" value="ЗАРЕГИСТРИРОВАТЬСЯ">
    6.                 </form>
    PHP:
    1. if (!isset($_SESSION['login']) || !isset($_SESSION['id'])) {
    2.          if (isset($_POST['reg-submit'])) {
    3.  
    4.              $dbc = mysqli_connect(DB_HOST, DB_USER, DB_PASSWORD, DB_NAME);
    5.  
    6.              if (isset($_POST['reg-login'])) {$reg_username = mysqli_real_escape_string($dbc, trim($_POST['reg-login'])); if ($reg_username == '') {unset($reg_username);}}
    7.             if (isset($_POST['reg-password'])) {$reg_password = mysqli_real_escape_string($dbc, trim($_POST['reg-password'])); if ($reg_password == '') {unset($reg_password);}}
    8.             if (isset($_POST['reg-repassword'])) {$reg_repassword = mysqli_real_escape_string($dbc, trim($_POST['reg-repassword'])); if ($reg_repassword == '') {unset($reg_repassword);}}
    9.  
    10.             if (isset($reg_username) && isset($reg_password) && isset($reg_repassword) && $reg_password == $reg_repassword) {
    11.                 $reg_password = md5($reg_password);
    12.                 $query = "INSERT INTO users (email,login,password) VALUES ('$reg_username','$reg_username','$reg_password')";
    13.                 $result = mysqli_query ($dbc, $query);
    14.                 $_SESSION['login'] = $reg_username;
    15.           setcookie('login', $reg_username, time() + (60 * 60 * 24 * 30));
    16.         }
    17.         }
    18.     }    
    Код (Javascript):
    1.   /* Функция, создающая экземпляр XMLHTTP */
    2.     function getXmlHttp() {
    3.     var xmlhttp;
    4.     try {
    5.       xmlhttp = new ActiveXObject("Msxml2.XMLHTTP");
    6.     } catch (e) {
    7.       try {
    8.         xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
    9.       } catch (E) {
    10.         xmlhttp = false;
    11.       }
    12.     }
    13.     if (!xmlhttp && typeof XMLHttpRequest!='undefined') {
    14.       xmlhttp = new XMLHttpRequest();
    15.     }
    16.     return xmlhttp;
    17.   }
    18.   function checkLogin(login) {
    19.     var xmlhttp = getXmlHttp(); // Создаём объект XMLHTTP
    20.     xmlhttp.open('POST', 'check_login.php', true); // Открываем асинхронное соединение
    21.     xmlhttp.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded'); // Отправляем тип содержимого
    22.     xmlhttp.send("login=" + encodeURIComponent(login)); // Отправляем POST-запрос
    23.     xmlhttp.onreadystatechange = function() { // Ждём ответа от сервера
    24.       if (xmlhttp.readyState == 4) { // Ответ пришёл
    25.         if(xmlhttp.status == 200) { // Сервер вернул код 200 (что хорошо)
    26.           if (xmlhttp.responseText) {document.getElementById("check_login").innerHTML = "Логин занят!"; return false;}
    27.           else document.getElementById("check_login").innerHTML = "Логин свободен!"; return true;
    28.         }
    29.       }
    30.     };
    31.   }
    PHP:
    1. <?php
    2.   $login = strtolower(htmlspecialchars($_POST["login"])); // Получаем логин, преобразуем ряд спецсимволов и приводим строку к нижнему регистру
    3.   $mysqli = new mysqli("localhost", "admin", "admin", "spdb"); // Подключаемся к базе данных
    4.   $query = "SELECT `id` FROM `users` WHERE `login`='".$mysqli->real_escape_string($login)."'"; // Формируем запрос на поиск пользователя с полученным логином
    5.   $result_set = $mysqli->query($query); // Отправляем запрос
    6.   echo $result_set->num_rows != 0; // Если ничего не найдено, то выводим false, иначе true
    7. ?>
     
  2. mahmuzar

    mahmuzar Старожил

    С нами с:
    6 апр 2012
    Сообщения:
    4.632
    Симпатии:
    425
    Адрес:
    РД, г. Махачкала.
  3. Нурсултан

    Нурсултан Новичок

    С нами с:
    26 фев 2017
    Сообщения:
    3
    Симпатии:
    0
    Поменял submit на button

    HTML:
    1. <input type="button" name="reg-submit" id="reg-submit" value="ЗАРЕГИСТРИРОВАТЬСЯ">
    Код (Javascript):
    1.     function getXmlHttp() {
    2.     var xmlhttp;
    3.     try {
    4.       xmlhttp = new ActiveXObject("Msxml2.XMLHTTP");
    5.     } catch (e) {
    6.       try {
    7.         xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
    8.       } catch (E) {
    9.         xmlhttp = false;
    10.       }
    11.     }
    12.     if (!xmlhttp && typeof XMLHttpRequest!='undefined') {
    13.       xmlhttp = new XMLHttpRequest();
    14.     }
    15.     return xmlhttp;
    16.   }
    17.   function checkLogin(login) {
    18.     var xmlhttp = getXmlHttp(); // Создаём объект XMLHTTP
    19.     xmlhttp.open('POST', 'check_login.php', true); // Открываем асинхронное соединение
    20.     xmlhttp.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded'); // Отправляем тип содержимого
    21.     xmlhttp.send("login=" + encodeURIComponent(login)); // Отправляем POST-запрос
    22.     xmlhttp.onreadystatechange = function() { // Ждём ответа от сервера
    23.       if (xmlhttp.readyState == 4) { // Ответ пришёл
    24.         if(xmlhttp.status == 200) { // Сервер вернул код 200 (что хорошо)
    25.           if (xmlhttp.responseText) {
    26.             document.getElementById("check_login").innerHTML = "Логин занят!";
    27.             $("#reg-submit").bind("click", function() {
    28.               return false;
    29.             });
    30.           }
    31.           else {
    32.             document.getElementById("check_login").innerHTML = "Логин свободен!";
    33.           }
    34.           return true;
    35.         }
    36.       }
    37.     };
    38.   }
    Но ничего не получается. Форма не отправляется. Даже если логин свободен.
     
  4. mahmuzar

    mahmuzar Старожил

    С нами с:
    6 апр 2012
    Сообщения:
    4.632
    Симпатии:
    425
    Адрес:
    РД, г. Махачкала.
    @Нурсултан, сабмити форму на стороне клиента если все ок.
     
  5. Нурсултан

    Нурсултан Новичок

    С нами с:
    26 фев 2017
    Сообщения:
    3
    Симпатии:
    0
    Не понял. Это как?
     
  6. mahmuzar

    mahmuzar Старожил

    С нами с:
    6 апр 2012
    Сообщения:
    4.632
    Симпатии:
    425
    Адрес:
    РД, г. Махачкала.