Форум программистов, компьютерный форум, киберфорум
PHP: базы данных
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.50/18: Рейтинг темы: голосов - 18, средняя оценка - 4.50
4 / 5 / 4
Регистрация: 31.03.2015
Сообщений: 145

Проверка формы "на лету" на наличие вводимого логина в MySQL

26.02.2016, 15:08. Показов 3819. Ответов 15
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Хочу реализовать следующее: пользователь при регистрации вводит логин, и форма сразу проверяет, существует данный логин в БД или нет, на дожидаясь, пока пользователь нажмет кнопку "Отправить".
Я реализовал обычную проверку при нажатии кнопки. А вот сделать "на лету" не могу. Кажется, это нужно делать через AJAX, но рабочий пример не могу найти.
Вот html-форма:
HTML5
1
2
3
4
5
<form method='post' action='signup.php'>$error
            <span>Login</span>
                <input type="text" name="user" placeholder="Введите логин">
                <span id="user_failed"></span>
<input type="submit" value="Отправить">
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
require_once 'header.php';
 
    $error = $user="";
 
    if (isset($_SESSION['user'])) destroySession();
 
    if (isset($_POST['user']))
        {
            $user = ($_POST['user']);
            
            if ($user == "")
                $error = "Введите данные во все поля<br><br>";
            else
            {
                $result = queryMysql("SELECT * FROM rieltors WHERE login='$user'");             
                    if ($result->num_rows)
                        $error = "Такой логин уже существует<br><br>";                   
                    else
                    {
                        queryMysql("INSERT INTO rieltors(login) VALUES('$user')");
                        die("<h4>Account created</h4>Please Log in.<br><br>");
                    }                   
            }           
        }
Буду очень признателен
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
26.02.2016, 15:08
Ответы с готовыми решениями:

Проверка логина из формы на наличие логина в базе данных
Пожалуюста подскажите что у меня неправильно работает в коде. Ошибок вродебы нет. Вообщем код должен получать данные из формы записывать их...

Проверка на наличие существующего логина
Доброе время суток, дорогие форумчане. Пишу курсовую на С#, который плохо знаю. Помогите с такой проблемой: проверки существования логина...

Проверить наличие логина в 2 таблицах
Здравствуйте. Нужно проверить наличие логина в 2 таблицах и если хоть в одной из них он существует, то логин занят. Я сделал через...

15
 Аватар для Sombrero
74 / 70 / 40
Регистрация: 31.03.2014
Сообщений: 298
26.02.2016, 16:07
Novichek_9I, Самый простой способ: cсоздаешь событие на js по нажатию клавишы в поле ввода и отправляешь текст поиска на сервер. Вот пример на jquery
PHP/HTML
1
2
3
4
5
<form method='post' action='signup.php'>$error
            <span>Login</span>
                <input type="text" name="user" id="search-input" placeholder="Введите логин">
                <span id="user_failed"></span>
<input type="submit" value="Отправить">
JavaScript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
$('#search-input').keypress(function(){
            var that = this;
            $.ajax({
                   type: 'POST',
                   data: {
                        user: $(that).val(),
                    },
                   dataType: 'html',
                   url: 'signup.php',
                   success: function(data){
                        alert('Ответ от сервера пришел, делаем с пришедшими данными что хотим');
                   },
                   error: function(){
                            console.log('error')
                   }
              })                    
                
})
На серверной части уже работаешь так же как и с обычной отправкой формы
0
4 / 5 / 4
Регистрация: 31.03.2015
Сообщений: 145
01.03.2016, 09:35  [ТС]
Sombrero, теперь не могу сравнить данные, пришедшие с сервера, с логином, введенным в поле. Что прописать в function(data) ?
0
 Аватар для Sombrero
74 / 70 / 40
Регистрация: 31.03.2014
Сообщений: 298
01.03.2016, 09:56
Novichek_9I, Сравнивать надо на сервере с помощью php а не на клиенте)
Тем более у тебя уже все сделано
PHP
1
2
3
4
5
6
7
8
$result = queryMysql("SELECT * FROM rieltors WHERE login='$user'");             
                    if ($result->num_rows)
                        $error = "Такой логин уже существует<br><br>";                  
                    else
                    {
                        queryMysql("INSERT INTO rieltors(login) VALUES('$user')");
                        die("<h4>Account created</h4>Please Log in.<br><br>");
                    }
Теперь только остается отправить ответ клиенту, а там уже с помощью js в function(data) можно сделать что угодно (вывести ошибку в браузер например)
PHP
1
2
3
4
5
6
7
8
9
10
$result = queryMysql("SELECT * FROM rieltors WHERE login='$user'");             
                    if ($result->num_rows)
                        $error = "Такой логин уже существует<br><br>"; 
                         echo json_decode(['status' => 'errorLogin']);                 
                    else
                    {
                        queryMysql("INSERT INTO rieltors(login) VALUES('$user')");
                        echo json_decode(['status' => 'completeLogin']);
                        die("<h4>Account created</h4>Please Log in.<br><br>");
                    }
JavaScript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
$.ajax({
                   type: 'POST',
                   data: {
                        user: $(that).val(),
                    },
                   dataType: 'json',
                   url: 'signup.php',
                   success: function(data){
                        if (data.status == 'errorLogin'){
                           $('#user_failed').html('Тут текст ошибки');
                        }
 
                       if (data.status == 'completeLogin'){
                           $('#user_failed').html('Авторизация прошла успешно');
                        }
                   },
                   error: function(){
                            console.log('error')
                   }
              })
0
4 / 5 / 4
Регистрация: 31.03.2015
Сообщений: 145
01.03.2016, 10:59  [ТС]
Sombrero, в echo json_decode(['status' => 'errorLogin']); на скобочки ругается "Parse error: syntax error, unexpected '[', expecting ')'"
0
Hello Kitty
 Аватар для WhiteMind
690 / 562 / 402
Регистрация: 12.02.2016
Сообщений: 1,436
Записей в блоге: 1
01.03.2016, 11:01
PHP
1
2
3
4
5
6
7
8
9
10
$result = queryMysql("SELECT * FROM rieltors WHERE login='$user'");             
                    if ($result->num_rows)
                        $error = "Такой логин уже существует<br><br>"; 
                         echo json_decode(['status' => 'errorLogin']);                 
                    else
                    {
                        queryMysql("INSERT INTO rieltors(login) VALUES('$user')");
                        echo json_decode(Array('status' => 'completeLogin'));
                        die("<h4>Account created</h4>Please Log in.<br><br>");
                    }
0
 Аватар для Sombrero
74 / 70 / 40
Регистрация: 31.03.2014
Сообщений: 298
01.03.2016, 11:07
Novichek_9I, Это сокращенный способ объявления массива, начиная с версии PHP 5.4. Значит у вас версия ниже, поэтому квадратные скобки поменяйте на array()
PHP
1
echo json_decode(array('status' => 'errorLogin'));
0
4 / 5 / 4
Регистрация: 31.03.2015
Сообщений: 145
01.03.2016, 11:08  [ТС]
я прописывал array, но не работает при этом, не проверяется поле "на лету"
0
 Аватар для Sombrero
74 / 70 / 40
Регистрация: 31.03.2014
Сообщений: 298
01.03.2016, 11:15
Novichek_9I, Надо смотреть правильно ли выполняются условия на сервере, а потом уже смотреть через браузер приходит ли ответ, либо выводить в консоль ответ сервера и смотреть, что он нам прислал
0
4 / 5 / 4
Регистрация: 31.03.2015
Сообщений: 145
01.03.2016, 11:29  [ТС]
Sombrero, в консоли пишет "error". Когда был dataType: 'html', тогда ответ приходил
0
 Аватар для Sombrero
74 / 70 / 40
Регистрация: 31.03.2014
Сообщений: 298
01.03.2016, 12:05
Novichek_9I, поменяй
PHP
1
json_decode()
на
PHP
1
json_encode()
0
4 / 5 / 4
Регистрация: 31.03.2015
Сообщений: 145
01.03.2016, 15:31  [ТС]
не работает
0
 Аватар для Sombrero
74 / 70 / 40
Регистрация: 31.03.2014
Сообщений: 298
02.03.2016, 10:01
Novichek_9I, все так же выводит в консоли error? или что?
0
4 / 5 / 4
Регистрация: 31.03.2015
Сообщений: 145
02.03.2016, 14:28  [ТС]
Sombrero, ну да. У меня в ajax написано:
JavaScript
1
2
3
4
5
6
7
8
9
10
11
12
success: function(data){
                        if (data.status == 'errorLogin'){
                           $('#user_failed').html('Тут текст ошибки');
                        }
 
                       if (data.status == 'completeLogin'){
                           $('#user_failed').html('Авторизация прошла успешно');
                        }
                   },
                   error: function(){
                            console.log('Здесь ошибка')
                   }
Вот в консоли написано "Здесь ошибка"

Я так понимаю, запрос не приходит?
0
 Аватар для Sombrero
74 / 70 / 40
Регистрация: 31.03.2014
Сообщений: 298
02.03.2016, 16:56
Novichek_9I, кажется догадываюсь в чет трабла. У вас стоит условие
PHP
1
2
if ($user == "")
                $error = "Введите данные во все поля<br><br>";
В живом поиске это условие не нужно. И надо убрать die(), либо не передавать значение в него
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
 if (isset($_POST['user']))
        {
            $user = ($_POST['user']);
           
                $result = queryMysql("SELECT * FROM rieltors WHERE login='$user'");             
                    if ($result->num_rows)
                        $error = "Такой логин уже существует<br><br>"; 
                         echo json_encode(array('status' => 'errorLogin'));                 
                    else
                    {
                        queryMysql("INSERT INTO rieltors (login) VALUES ('$user')");
                        echo json_encode(array('status' => 'completeLogin'));
                        //die();
                    }                       
        }
0
4 / 5 / 4
Регистрация: 31.03.2015
Сообщений: 145
13.03.2016, 17:13  [ТС]
Разобрался. Если кому-то будет полезно, вот рабочий код:
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
<?php
 
    require_once 'header.php';
 
    $error = $user ="";
 
    if (isset($_SESSION['user'])) destroySession();
 
    //Валидация формы регистрации
    if (isset($_POST['user']))
        {
            $user =($_POST['user']);
            
            if ($user == "")
                $error = "Введите данные во все поля";
            else
            {
                $result = queryMysql("SELECT * FROM table WHERE login='$user'");
                    if ($result->num_rows)
                        {
                            $error = "Логин занят";                           
                        }
                    else
                    {
                        queryMysql("INSERT INTO table(login) VALUES('$user')");                     
                        die("<h4>Account created</h4>Please Log in.<br><br>");
                    }                   
            }           
        }
 
    echo <<<_END
        <form method='post' action='signup.php'>$error
            <span>Login</span>
                <input type="text" name="user" placeholder="Введите логин">
                <span id="user_failed"></span>          
            <input type="submit" value="Отправить">
_END;
?>
Файл javascript:
JavaScript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
$(document).ready(function(){
  $("[name='user']").change(function(){
      params = "user=" + $("[name='user']").val();
                request = new ajaxRequest()
                request.open("POST", "checkuser.php", true)
                request.setRequestHeader("Content-type", "application/x-www-form-urlencoded")
                request.setRequestHeader("Content-length", params.length)
                request.setRequestHeader("Connection", "close")
                request.onreadystatechange = function()
                    {
                        if (this.readyState == 4)
                            if (this.status == 200)
                                if (this.responseText != null)
                                    $('#user_failed').html(this.responseText)
                    }
                request.send(params)
      })
 function ajaxRequest()
                    {
                        try {var request = new XMLHttpRequest()}
                        catch(e1){
                        try {request = new ActiveXObject("Msxml2.XMLHTTP")}
                        catch(e2){
                        try {request = new ActiveXObject("Microsoft.XMLHTTP")}
                        catch(e3){
                        request = false
                        } } }
                        return request
                    }
})
Файл checkuser.php:
PHP
1
2
3
4
5
6
7
8
9
10
11
12
<?php
require_once 'functions.php';
 
if (isset($_POST['user']))
{
    $user = ($_POST['user']);   
    $result = queryMysql("SELECT * FROM table WHERE login='$user'");
    if ($result->num_rows)
        echo "<span>Логин занят</span>";
    else echo "Ок";
}
?>
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
13.03.2016, 17:13
Помогаю со студенческими работами здесь

Не работает проверка на на наличие похожего логина у зарегистрированных пользователей
Здравствуйте! Собственно вот в чем вопрос: При регистрации есть проверка на наличие похожего логина уже у зарегистрированных...

Проверка на уникальность логина - MySql, Hibernate
У меня в базе данных есть таблица users с полями id, login, password. Поле login в таблице помечено как UNIQUE. Связь с БД идет...

Проверка на наличие полей в MySQL
Приветствую. Заказчик поставил задачу: Отображать на сайте последние просмотренные объекты. Мое решение: Каждый раз, когда...

Проверка на наличие элемента в БД mysql
Здравствуйте. Необходимо сделать проверку введенного пользователем элемента в форму на нахождение его в базе данных. К сожалению прочтение...

Проверка логина и пароля при открытии новой формы
Доброго времени суток! Есть главный JFrame, есть пункт меню при выборе которого должен открываться 2-ой JFrame, но перед его открытием...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
16
Ответ Создать тему
Новые блоги и статьи
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Access
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru