|
|
|
| авторизация регистрация
написал скрипт одним файлом по мотивам темы
выкладываю специально текстом, для наглядности и "разбора полетов"
<?php
// функция обработки текстовых переменных
function clearText($test){
$test=trim($test);
return mysql_escape_string($test);
}
// функция шифрования пароля
function solt_md5($test){
return md5($test);
// return $test;
}
session_start();
// проверяем есть ли запрос на удаление сессии
if(isset($_GET[destroy])){
unset($_SESSION[user_id]);
unset($_SESSION[login]);
session_destroy();
}
// подключаемся к БД
include_once('connect.php');
// обнуляем переменные
$error=$login=$pass=$clear_pass=$name=$surname=$pol="";
// устанавливаем максимальную длинну переменных
$max=30;
// Обработка регистрационных данных переданных из формы методом POST
if(isset($_POST[reg])){
if(!empty($_POST[login]) && strlen($_POST[login])<= $max)
$login = clearText($_POST[login]);
else $error .="Логин введен неправильно или отсутсвует<br />";
if(!empty($_POST[pass]) && strlen($_POST[pass])<= 255)
$pass = $_POST[pass];
else $error .="Пароль введен неправильно или отсутсвует<br />";
if(!empty($_POST[clear_pass]) && strlen($_POST[clear_pass])<= 255)
$clear_pass = $_POST[clear_pass];
else $error .="Повторный пароль введен неправильно или отсутсвует<br />";
if($pass != $clear_pass) $error .="Пароли не совпадают<br />";
else $pass=solt_md5($_POST[pass]);
if(!empty($_POST[name]) && strlen($_POST[name])<= $max)
$name = clearText($_POST[name]);
if(!empty($_POST[surname]) && strlen($_POST[surname])<= $max)
$surname = clearText($_POST[surname]);
if(!empty($_POST[pol]) && strlen($_POST[pol])<= $max)
$pol = clearText($_POST['pol']);
if(!isset($_POST[check]) && strlen($_POST[check])<= $max)
$error .="Для продолжения регистрации необходимо согласиться
с <a href='#'>правилами</a><br />";
// если буфер ошибок пуст, то проверяем наличие логина в базе данных
if(empty($error)){
$query="SELECT user_id
FROM users
WHERE login='$login'";
$res=mysql_query($query);
if($res){
if(mysql_num_rows($res)>0) $error .="Логин $login уже занят<br />";
}else{
$error .="Ошибка запроса к базе данных: ".mysql_error()."<br />";
}
}
// если буфер ошибок пуст, то заносим данные регистрации в БД
if(empty($error)){
$query="INSERT INTO users (login, password, date_reg, name, surname, pol)
VALUES ('$login', '$pass', NOW(), '$name', '$surname', '$pol')";
$res=mysql_query($query);
if($res){
$reg="Регистрация успешно завершена";
unset($_REQUEST[reg]);
}else{
$error .="Ошибка запроса к базе данных: ".mysql_error()."<br />";
}
}
}
// Обработка данных авторизации переданных из формы методом POST
if(isset($_POST[avt])){
if(!empty($_POST[login]) && strlen($_POST[login])<= $max)
$login = clearText($_POST[login]);
else $error .="Логин введен неправильно или отсутсвует<br />";
if(!empty($_POST[pass]) && strlen($_POST[pass])<= 255)
$pass = solt_md5($_POST[pass]);
else $error .="Пароль введен неправильно или отсутсвует<br />";
if(empty($error)){
$query="SELECT user_id, login
FROM users
WHERE login='$login'
AND password='$pass'";
$res=mysql_query($query);
if($res){
if(mysql_num_rows($res)==1){
$u=mysql_fetch_assoc($res);
$_SESSION[user_id]=$u[user_id];
$_SESSION[login]=$u[login];
}else{
$error .="Ошибка авторизации";
}
}else{
$error .="Ошибка запроса к базе данных: ".mysql_error()."<br />";
}
}
}
if(isset($_SESSION[user_id]) && isset($_SESSION[login])){
echo htmlspecialchars($_SESSION[login]).", добро пожаловать<br />";
echo "<a href='{$_SERVER['PHP_SELF']}?destroy=1'>Выход</a><br />";
}else{
// Выбор формы регистрации или авторизации
if(isset($_REQUEST[reg])){
?>
<html>
<body>
<h1>Регистрация</h1>
<?php echo $error; ?>
<h3>Обязательные поля</h3>
<form action = '<?php echo $_SERVER['PHP_SELF']; ?>' method = 'POST'>
<p>
<font color='red'>*</font>Введите логин:<br />
<input type = 'text' name = 'login'
value = '<?php echo htmlspecialchars($login); ?>'><br />
<font color='red'>*</font>Введите пароль:<br />
<input type = 'password' name = 'pass'
value = '<?php echo htmlspecialchars($pass); ?>'><br />
<font color='red'>*</font>Повторите пароль:<br />
<input type = 'password' name = 'clear_pass' value = ''><br />
</p>
<h3>Личные данные</h3>
<p>
Ваше имя:<br />
<input type = 'text' name = 'name'
value = '<?php echo htmlspecialchars($name); ?>'><br />
Ваша фамилия:<br />
<input type = 'text' name = 'surname'
value = '<?php echo htmlspecialchars($surname); ?>'><br />
Ваш пол:<br />
<select name = 'pol'>
<option value='------'
<?php if($pol=="") echo "selected='selected'";?>>------</option>
<option value='m'
<?php if($pol=="m") echo "selected='selected'";?>>Мужской</option>
<option value='w'
<?php if($pol=="w") echo "selected='selected'";?>>Женский</option>
</select><br />
<input type = 'checkbox' name = 'check'>
Соглашение с пользовательскими <a href='#'>правилами</a>.<br />
<input type = 'submit' name='reg' value = 'Зарегистрироваться' class='button'>
</p>
</form>
<?php }else{ ?>
<h1>Авторизация</h1>
<?php echo $error; ?>
<form action = '<?php echo $_SERVER['PHP_SELF']; ?>' method = 'POST'>
<p>
Введите логин:<br />
<input type = 'text' name = 'login'
value = '<?php echo htmlspecialchars($login); ?>'><br />
Введите пароль:<br />
<input type = 'password' name = 'pass' value = ''><br />
<input type = 'submit' name='avt' value = 'Войти' class='button'>
</p>
</form>
<a href='<?php echo $_SERVER['PHP_SELF']; ?>?reg=1'>Регистрация</a><br />
<?php }} ?>
<a href='#'>Назад</a><br />
<div id='footer'><a href='index.php'>На главную</a></div>
</body>
</html>
|
можно добавить автологин по желанию
пишите замечания, может что упустил | |
|
|
|
|
|
|
|
для: Valick
(04.03.2012 в 01:16)
| | Подсказка: ;-) | |
|
|
|
|
|
|
|
для: Sfinks
(04.03.2012 в 02:13)
| | честно не могу понять на что вы намекаете
__
просьба к модераторам поправить заголовок темы
авториЗАЙция тут точно не к месту, всем нужна авторизация | |
|
|
|
|
|
|
|
для: Valick
(04.03.2012 в 07:31)
| | В вашем примере я не смогу зарегистрироваться под ником 000, либо с паролем 0000. Может конечно так и задумано, но врядли.
> честно не могу понять на что вы намекаете
Сам случайно заметил такую фишку после того как лет 5 писал просто if(empty()). Но я думал после наводки догадаетесь )) | |
|
|
|
|
|
|
|
для: Sfinks
(04.03.2012 в 12:37)
| | не регистрируется только 0 (я думаю можно и так перебиться :) )
00, 000, 000 - можно регистрировать и логин и пароль (во всяком случае у меня работает) | |
|
|
|
|
|
|
|
для: Valick
(04.03.2012 в 13:15)
| | Блин, вот все понимаю, но у тебя другой стиль написания) | |
|
|
|
|
|
|
|
для: Valick
(04.03.2012 в 13:15)
| | Может я не правильно сформулировал, не помню уже..... Последние два года просто пишу так
if( !empty($var) || is_numeric($var) )
| и не задумываюсь. Так все равно конкретнее ) | |
|
|
|
|
|
|
|
для: Sfinks
(04.03.2012 в 02:13)
| | Э-э... Почему? Это же строка из трёх символов. Да даже если бы и число, то ноль — это не NULL. | |
|
|
|
|
|
|
|
для: Киналь
(04.03.2012 в 13:24)
| | > Да даже если бы и число, то ноль — это не NULL
ноль это не null, а empty(ноль) - это тру. | |
|
|
|