Нужн совет. Как сделать пойск по БД, одному из критериев?

BadBoy
На сайте с 31.01.2005
Offline
291
701

Суть проблемы.

Пишу скрипт авторизации с регистрацией.

Не знаю как сделать так, что бы при регистрации, если человек вводит уже существующей логин, то скрипт бы отвечал, что "такой логин уже занят"

<?

Error_Reporting(E_ALL & ~E_NOTICE);
require_once("conf.php");
if (mysql_connect($hostname, $user, $password, $dbname))
{
if ($log == admin)
{
echo "Такое имя уже занято!";
}
else {

@mysql_select_db($dbname) or die('!db');
$r = mysql_query("INSERT INTO table_test_auth VALUES ('$i++','$log','$pass')");


echo "Новый аккаунт <b>".$log."</b> добавлен";
echo '<pre>';
$result = mysql_query("SELECT DISTINCT URL, NAME FROM table_test_auth");
}

}
echo '</pre>';
?>

Как Вы видите, что при попытке зарегить логин admin, скрипт будет выдавать ошибку.

Как вместо админа вставить переменную, которая бы уже заменяла все зарегистрированные логины?

Надо какой-то массив сделать, вот только не знаю как. Тупая книга по php ничего не понятно.

Буду благодарен за ответы.

Спасибо.

Shtogrin
На сайте с 02.11.2006
Offline
95
#1

Сначала сделать SELECT * FROM table_test_auth WHERE поле=$log. Если что-то есть, то такой логин используется, если результат пустой - значит свободный и можно вставлять новую запись.

www.shtogrin.com (http://www.shtogrin.com/). Канцтовары (http://www.invit.com.ua/). 1С Бухгалтерия (http://account.kiev.ua/).
BadBoy
На сайте с 31.01.2005
Offline
291
#2
Shtogrin:
поле=$log

этого немного не понял.

что значит поле, у меня поле куда вводится логин и называется "name=log"

<h1>Регистрация</h1>

<form action=rega2.php method=post>
Лог: <input type=text name="log">
<br>
Пас: <input type=text name="pass">
<input type=hidden value=1><br>
<input style="border: 1px solid;" type=submit value="Сохранить">
Larden
На сайте с 09.03.2007
Offline
32
#3
BadBoy:
этого немного не понял.
что значит поле, у меня поле куда вводится логин и называется "name=log"
<h1>Регистрация</h1>

<form action=rega2.php method=post>
Лог: <input type=text name="log">
<br>
Пас: <input type=text name="pass">
<input type=hidden value=1><br>
<input style="border: 1px solid;" type=submit value="Сохранить">

Если я правильно понял:


$login = $_POST['log'];

$query = "SELECT * FROM `table_test_auth` WHERE `user_login`=$login LIMIT 1;";
$result = mysql_query($query);
$number = mysql_num_rows($result);

if($number != 1){echo'Пользователя нет в бд';}
else{echo'Пользователь есть в бд';}
Shtogrin
На сайте с 02.11.2006
Offline
95
#4
BadBoy:
этого немного не понял.
что значит поле, у меня поле куда вводится логин и называется "name=log"

Может у вас есть какой нибудь движок с авторизацией, возьмите код оттуда. Мне кажется вы не сможете правильно ее написать (есть много важных деталей). Возможно я ошибаюсь, но вы путаете поля формы с полем в базе.

вот немного теории

http://phpclub.ru/detail/article/page_password2

http://www.php.com.ua/ru/articles/security/safe_auth.htm

Larden
На сайте с 09.03.2007
Offline
32
#5

Полный код простенькой регистрации:

if(array_key_exists('log', $_POST) &&

array_key_exists('pass', $_POST)){

$login = $_POST['log'];
$pass = $_POST['pass'];

$error = '';
$error_isset = 0;

if($login == '' or $pass == ''){
$error = $error.'Введите логин и пароль';
$error_isset = 1;
}else{
// Проверяем логин в базе данных:
mysql_connect($hostname, $user, $password);
@mysql_select_db($dbname) or die('!db');
$query = "SELECT * FROM `table_test_auth` WHERE `user_login`=$login LIMIT 1;";
$result = mysql_query($query);
$number = mysql_num_rows($result);
mysql_close();

if($number != 1){
$error = $error.'Пользователь уже зарегистрирован.';
$error_isset = 1;
}
}

if($error_isset != 0){
echo $error;
}else{
mysql_connect($hostname, $user, $password);
@mysql_select_db($dbname) or die('!db');
$query = "INSERT INTO `table_test_auth` (`user_id`,`user_login`,`user_pass`) VALUES ('', '".$login."', '".md5($pass)."')";
mysql_close();

echo 'Спасибо за регистрацию!';
}

}

P.S. Скрипт сразу писал здесь, на выполение не проверял, но должно все работать.

BadBoy
На сайте с 31.01.2005
Offline
291
#6

Да, видимо рано сел за такое.

Ок, начну с чего нибудь попроще :)

Спасибо за ответы.

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий