Форум программистов, компьютерный форум, киберфорум
PHP: базы данных
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.51/43: Рейтинг темы: голосов - 43, средняя оценка - 4.51
0 / 0 / 0
Регистрация: 07.12.2013
Сообщений: 12

Проверка логина на уникальность

18.12.2013, 16:23. Показов 7976. Ответов 13
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Есть два файла :

user.php
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<?php
 
require_once 'DB.php';
 
function create_user($user) {
    $connection = db_connect();
    $s = $connection->prepare(<<<SQL
INSERT INTO table.users
(
    login,
)
VALUES (?)
SQL
    );
    
    $s->execute(array(
        $user['login']));           
}
И файл обработки формы:

PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
require_once 'user.php';
 
$messages = array();
 
if ('POST' === $_SERVER['REQUEST_METHOD']) {
    if (empty($_POST['login'])) {
        $messages[] = 'Вы должны ввести логин';
    }
  
    $connection = db_connect();
    $statement = $connection->prepare('SELECT COUNT(*) FROM table.users WHERE login=?');
    $statement->execute($login);
    $loginCount = $statement->fetch();
    if ($loginCount > 0) {
        $messages[] = 'Такой пользователь уже есть';
    }
Выдает ошибку на строчку $statement->execute($login); с текстом Undefined variable: login . Как это исправить??
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
18.12.2013, 16:23
Ответы с готовыми решениями:

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

Ошибка проверки логина на уникальность в Mysql через jquery-ajax
Здравсвуйте ув. программисты! Я начинающий не бейте больно :) Есть страница регистрации с полем логина &quot; index.php &quot;. ...

Проверка на уникальность
Кто-нить подскажет как сделать проверку на уникальность, то есть есть одно поле, и значения там должны быть уникальными, не должно быть...

13
Иллюзионист
 Аватар для philin
154 / 153 / 27
Регистрация: 02.10.2013
Сообщений: 330
18.12.2013, 16:31
Для начала прочитать ошибку и посмотреть в код. "Undefined variable: $login" - "необъявленная переменная $login". $login нигде не присваивается значение, переменная попросту не существует — из нее нельзя ничего прочитать.
0
0 / 0 / 0
Регистрация: 07.12.2013
Сообщений: 12
18.12.2013, 17:37  [ТС]
Цитата Сообщение от philin Посмотреть сообщение
Для начала прочитать ошибку и посмотреть в код. "Undefined variable: $login" - "необъявленная переменная $login". $login нигде не присваивается значение, переменная попросту не существует — из нее нельзя ничего прочитать.
ну а если сделать так $login = $user['login']

Добавлено через 59 минут
Ну хоть кто-нибудь скажите как решить эту ошибку
0
10 / 10 / 2
Регистрация: 18.05.2013
Сообщений: 21
18.12.2013, 19:47
Ирина, не могли бы вы выложить норм код и сказать что вы хотите сделать? такое впечатление что у вас тут не одна ошибка, а их много.
Выложите целиком свой скрипт и форму, чтоб можно было запустить и посмотреть, db.php только не надо
1
0 / 0 / 0
Регистрация: 07.12.2013
Сообщений: 12
18.12.2013, 19:58  [ТС]
Цитата Сообщение от TerMih Посмотреть сообщение
Ирина, не могли бы вы выложить норм код и сказать что вы хотите сделать? такое впечатление что у вас тут не одна ошибка, а их много.
Выложите целиком свой скрипт и форму, чтоб можно было запустить и посмотреть, db.php только не надо
Файл user.php
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
function create_user($user) {
    $connection = db_connect();
    $s = $connection->prepare(<<<SQL
INSERT INTO table.users
(
    login,
)
VALUES (?)
SQL
    );
    
    $s->execute(array(
        $user['login']));
        
}
Файл обработки

PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
require_once 'user.php';
 
$messages = array();
 
if ('POST' === $_SERVER['REQUEST_METHOD']) {
    if (empty($_POST['login'])) {
        $messages[] = 'Вы должны ввести логин';
    }
    
    $connection = db_connect();
    $statement = $connection->prepare('SELECT COUNT(*) FROM table.users WHERE login=?');
    $statement->execute([$login]);
    $loginCount = $statement->fetch()[0];
    if ($loginCount > 0) {
        $messages[] = 'Такой пользователь уже есть';
    }
    if (!$messages) {
        create_user($_POST);        
        die;
    }
}
Ошибку выдает на строке : $statement->execute([$login]); Undefined variable: login , я не знаю как ее правильно объявить
0
Иллюзионист
 Аватар для philin
154 / 153 / 27
Регистрация: 02.10.2013
Сообщений: 330
18.12.2013, 20:06
Зачем лезть в сложные структуры, если основы непонятны...
Чтобы взять данные из $login, нужно их туда сначала положить. Где это действие?
11 строка составляет SQL-запрос, 12 подставляет в него логин. А логин лежит в $_POST['login'], он пришел из формы. Хотите читать именно из $login - запишите в него данные сначала.
PHP
1
$login = $_POST['login'];
1
10 / 10 / 2
Регистрация: 18.05.2013
Сообщений: 21
18.12.2013, 20:12
Я так понимаю вы работаете с cms drupal? я с нею к сожалению не знаком, но
PHP
1
$statement = $connection->prepare('SELECT COUNT(*) FROM table.users WHERE login=?');
Похоже на параметризованные запросы, тут вы подготавливаете запрос.

PHP
1
$statement->execute([$login]);
Тут вы выполняете запрос, но скорей всего вам надо было сделать так

[PHP]$statement = $connection->prepare('SELECT COUNT(*) FROM table.users WHERE login=?');
(функция примерно такого содержания)bind_param ($login)
$statement->execute();

Наверно так, суть bind_param в том что вы подставляете значение в запрос за место '?', а execute уже выполняет запрос, и проверьте чтоб $login имела значение, к примеру var_dump($login);

philin, а я совсем не прав?
1
10 / 10 / 2
Регистрация: 18.05.2013
Сообщений: 21
18.12.2013, 21:43
Сделал, напишу сюда, во первых у шаблона формы я не увидел action, в ваш скрипт обработки, во вторых
PHP
1
2
3
4
5
6
7
8
 $statement = $connection->prepare('SELECT COUNT(*) as count FROM users WHERE login=?');
    $login = $_POST['login'];
    $statement->execute(array($login));
    $loginCount = $statement->fetch(PDO::FETCH_ASSOC);
    print_r($loginCount);
    if ($loginCount['count'] > 0) {
        echo  'Идите лесом! Такой пользователь у нас уже есть!';
    }
В третьих у вас не правильные регулярные выражения) как минимум это к телефону, остальное не смотрел)
1
52 / 14 / 7
Регистрация: 29.09.2012
Сообщений: 90
18.12.2013, 22:37
А у меня как- то так)) Думаю тоже не плохо, да и работает отлично!
PHP
1
2
3
4
5
6
7
$result = mysql_query("SELECT * FROM users ORDER BY id");
    $kol = mysql_num_rows($result);
            while ( $postrow[] = mysql_fetch_array($result))
            for($i = 0; $i < $koll; $i++)
                if($_POST['login'] == $postrow[$i]['login'])
                    echo "Пользователь с таким логином уже существует";
    }
1
10 / 10 / 2
Регистрация: 18.05.2013
Сообщений: 21
18.12.2013, 22:51
Ваш вариант не очень хорош, в php версии > 5.3 mysql нет, поэтому надо использовать mysqli или pdo api, да и доведите до ума параметризованные запросы чтобы обезопасить себя от sql инъекций.
PHP
1
2
3
4
5
6
7
$result = mysql_query("SELECT * FROM users ORDER BY id");
    $kol = mysql_num_rows($result);
            while ( $postrow[] = mysql_fetch_array($result))
            for($i = 0; $i < $koll; $i++)
                if($_POST['login'] == $postrow[$i]['login'])
                    echo "Пользователь с таким логином уже существует";
    }
И вообще у вас лишние действия, код может и работает, но ваш for тут ни к чему. И у вас не работает код)
PHP
1
2
$kol = mysql_num_rows($result);
for($i = 0; $i < $koll; $i++)
$koll или $kol?
P.s а спасибо не будет?)
2
52 / 14 / 7
Регистрация: 29.09.2012
Сообщений: 90
18.12.2013, 22:59
Цитата Сообщение от TerMih Посмотреть сообщение
Ваш вариант не очень хорош, в php версии > 5.3 mysql нет, поэтому надо использовать mysqli или pdo api, да и доведите до ума параметризованные запросы чтобы обезопасить себя от sql инъекций.
PHP
1
2
3
4
5
6
7
$result = mysql_query("SELECT * FROM users ORDER BY id");
    $kol = mysql_num_rows($result);
            while ( $postrow[] = mysql_fetch_array($result))
            for($i = 0; $i < $koll; $i++)
                if($_POST['login'] == $postrow[$i]['login'])
                    echo "Пользователь с таким логином уже существует";
    }
И вообще у вас лишние действия, код может и работает, но ваш for тут ни к чему. И у вас не работает код)
PHP
1
2
$kol = mysql_num_rows($result);
for($i = 0; $i < $koll; $i++)
$koll или $kol?
P.s а спасибо не будет?)
Ну и немного подумав сделал вывод что так будет ещё проще)
PHP
1
2
3
4
$row = mysql_num_rows($query);
if($row > 0){
echo"Такой пользователь уже существует!";
}
1
Иллюзионист
 Аватар для philin
154 / 153 / 27
Регистрация: 02.10.2013
Сообщений: 330
18.12.2013, 23:05
Еще сократим?)
PHP
1
2
if (mysql_num_rows($query) > 0)
    echo "Такой пользователь уже существует!";
1
10 / 10 / 2
Регистрация: 18.05.2013
Сообщений: 21
18.12.2013, 23:05
У вас какой то странный вывод, вы выполнили какой-то запрос и посмотрели сколько строк он вам вернул, но вы уже не используете pdo как использовали раньше, у вас же уже почти все было написано и все работало, делайте как считаете нужным и еще регулярка для телефона не правильна, она в любом случае на норм телефон будет записывать ошибку.
1
52 / 14 / 7
Регистрация: 29.09.2012
Сообщений: 90
18.12.2013, 23:27
Цитата Сообщение от TerMih Посмотреть сообщение
У вас какой то странный вывод, вы выполнили какой-то запрос и посмотрели сколько строк он вам вернул, но вы уже не используете pdo как использовали раньше, у вас же уже почти все было написано и все работало, делайте как считаете нужным и еще регулярка для телефона не правильна, она в любом случае на норм телефон будет записывать ошибку.
PHP
1
$query = mysql_query("SELECT * FROM `users`  WHERE `login`='".$_POST['login']."'");
Вот и весь запрос)
А прошлый там переделывать надо еще много. он выводить та будет сообщение об ошибке столько сколько пользователей) тоесть в зыкли ещё одну проверочку и break)
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
18.12.2013, 23:27
Помогаю со студенческими работами здесь

Проверка на занятость логина
Пожалуйста подскажите что у меня неправильно работает в коде.Если я указываю логин который есть в базе то ошибок нету ...

Проверка на существование логина
if (!mysql_query(&quot;SELECT `login` FROM `r_users` WHERE `login` = '&quot;.$login.&quot;'&quot;)) { mysql_query(&quot;INSERT INTO `r_users` SET...

Проверка на существование логина в БД
Хочу при регистрации проверить, есть ли пользователь с таким логином. $sql = mysql_query(&quot;SELECT * FROM users WHERE login=$login LIMIT...

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

PHP 7 Проверка Логина
Всем привет! У меня возникла проблема.Я создал форму для регистрации,она работает,но я не могу нормально реализовать проверку логина...


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

Или воспользуйтесь поиском по форуму:
14
Ответ Создать тему
Новые блоги и статьи
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка. Рецензия / Мнение/ Перевод Сайт называется reddit: The Thinkpad X220 Tablet is the best budget school laptop period. Это. . .
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
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru