[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Регистрация пользователей
Dmivlagus
Всем привет. Нужна ваша помошь я написал свой скрипт небольшой регистрации пользователей. Вся суть в проверке существует ли такое имя в БД или нет. Нужен ваш совет правильно ли выполнена проверка? Если нет, то помогите избавится от индийского кода.

<?php
//Подключаем файл установки соединение с MySQL
require_once('includes/mysql.php');

//Из глобальных массивов создаем переменные
if (isset($_POST['name'])) {$name=$_POST['name'];}
if (isset($_POST['pass'])) {$pass=$_POST['pass'];}
if (isset($_POST['email'])) {$email=$_POST['email'];}

//Преврашаем пароль в MD5
$pass=md5($pass);
//Преобразуем имя в нижний регистр
$name=strtolower($name);

//Формируем SQL запрос
$sql="SELECT name from `users`";
//Выполняем запрос. Если ошибка, то выводим код ошибки
$result=mysql_query($sql) or die(mysql_error().'<br>'.$sql);


//Подключаем верхнюю часть сайта
require_once 'html/header.html';


if (mysql_num_rows($result)>0)
{
//Формируем цикл, который выполняет сравнение имен пользователя и их проверку на занятость
while ($row=mysql_fetch_assoc($result))
{

//Преобразуем все в нижний регистр
$name_str=strtolower($row['name']);

//Делаем сравнение
if ($name==$name_str)
{
echo "Выбранное Вами имя $name - занято!";
break; //Выходим из цикла
}
else
{
//Вставляем данные
$result_insert=mysql_query("INSERT INTO `users` (name,pass,email) VALUES ('$name','$pass','$email')");
//Проверяем успешно ли данные занеслись в БД
if ($result_insert) {echo 'Регистрация успешна';}
}

}
}

else
{
//Вставляем данные
$result_insert=mysql_query("INSERT INTO `users` (name,pass,email) VALUES ('$name','$pass','$email')");
//Проверяем успешно ли данные занеслись в БД
if ($result_insert) {echo 'Регистрация успешна';}
}



//Подключаем нижнюю часть сайта
require_once 'html/footer.html';
?>







Спустя 11 минут, 18 секунд (6.08.2010 - 21:52) twin написал(а):
Совсем не верно... А если их много? Придется вытаскивать всех и фильтровать в цикле. 10000 юзеров - 10000 интераций плюс память на всю таблицу.
Нужно спросить у мускула - сколько имеется строк в таблице с условием
name = $name
и если есть хоть одна - лесом.

Спустя 3 минуты, 13 секунд (6.08.2010 - 21:55) Dmivlagus написал(а):
twin, хм, наверное, where name=$name, но ведь если он не найдет там ничего запрос вернет ложь? как мне тогда узнать из-за чего сфейлился запрос? из-за отсуствия там нужного поля или других ошибок? на каких основаниях выводить "такое имя уже занято"?

Спустя 2 минуты, 26 секунд (6.08.2010 - 21:58) twin написал(а):
Запрос (вернее функция mysql_query()) вернет false только в случае неудачного запроса. А отсутствие результата - это тоже результат. Запрос вернет не ложь, а 0 строк.

Спустя 1 минута, 17 секунд (6.08.2010 - 21:59) Dmivlagus написал(а):
А проверить функцией empty? Или как узнать что запрос вернул 0 строк?

Спустя 32 минуты, 4 секунды (6.08.2010 - 22:31) Ice написал(а):
@ twin Поддержу с твоего позволения? smile.gif

Проверить функцией mysql_num_rows

if( mysql_num_rows( $query ) == 0 ) {
// Что-то делаем.
} else {
error('Такой пользователь уже существует');
}

Спустя 12 минут, 4 секунды (6.08.2010 - 22:43) twin написал(а):
Не совсем верно. Хотя вполне приемлимо. Идеально это выглядет так:
$sql="SELECT COUNT(*)  AS `cnt` FROM `users` WHERE `name` ='".mysql_real_escape_string($name)."'"; 
//Выполняем запрос. Если ошибка, то выводим код ошибки
$result=mysql_query($sql) or die(mysql_error().'<br>'.$sql);
if(mysql_result($result, 0) > 0)
{
// лесом
}
else
{
// пошла массовка
ну если не учитывать лишнюю перезапись.

Спустя 1 минута, 45 секунд (6.08.2010 - 22:45) Ice написал(а):
Если каунт, то конечно резалт, естественно. Из-за жары туплю оч.

Спустя 11 часов, 28 минут, 23 секунды (7.08.2010 - 10:13) Dmivlagus написал(а):
Спасибо большое))) Буду пробовать))) И надеюсь что построение правильных алгоритмов программы придет с опытом smile.gif
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2025 Invision Power Services, Inc.