Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
PHP. Практика создания Web-сайтов (второе издание). Авторы: Кузнецов М.В., Симдянов И.В. PHP на примерах (2 издание). Авторы: Кузнецов М.В., Симдянов И.В. Объектно-ориентированное программирование на PHP. Авторы: Кузнецов М.В., Симдянов И.В. MySQL на примерах. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель MySQL 5. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: скрипт регистрации, авторизайция / регистрация
 
 автор: Valick   (04.03.2012 в 01:16)   письмо автору
 
 

авторизация регистрация
написал скрипт одним файлом по мотивам темы
выкладываю специально текстом, для наглядности и "разбора полетов"

<?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>

можно добавить автологин по желанию
пишите замечания, может что упустил

  Ответить  
 
 автор: Sfinks   (04.03.2012 в 02:13)   письмо автору
 
   для: Valick   (04.03.2012 в 01:16)
 

Подсказка:
empty('000') === true
;-)

  Ответить  
 
 автор: Valick   (04.03.2012 в 07:31)   письмо автору
 
   для: Sfinks   (04.03.2012 в 02:13)
 

честно не могу понять на что вы намекаете
__
просьба к модераторам поправить заголовок темы
авториЗАЙция тут точно не к месту, всем нужна авторизация

  Ответить  
 
 автор: Sfinks   (04.03.2012 в 12:37)   письмо автору
 
   для: Valick   (04.03.2012 в 07:31)
 

В вашем примере я не смогу зарегистрироваться под ником 000, либо с паролем 0000. Может конечно так и задумано, но врядли.

> честно не могу понять на что вы намекаете
Сам случайно заметил такую фишку после того как лет 5 писал просто if(empty()). Но я думал после наводки догадаетесь ))

  Ответить  
 
 автор: Valick   (04.03.2012 в 13:15)   письмо автору
 
   для: Sfinks   (04.03.2012 в 12:37)
 

не регистрируется только 0 (я думаю можно и так перебиться :) )
00, 000, 000 - можно регистрировать и логин и пароль (во всяком случае у меня работает)

  Ответить  
 
 автор: Default   (04.03.2012 в 15:03)   письмо автору
 
   для: Valick   (04.03.2012 в 13:15)
 

Блин, вот все понимаю, но у тебя другой стиль написания)

  Ответить  
 
 автор: Sfinks   (04.03.2012 в 17:45)   письмо автору
 
   для: Valick   (04.03.2012 в 13:15)
 

Может я не правильно сформулировал, не помню уже..... Последние два года просто пишу так
if( !empty($var) || is_numeric($var) )
и не задумываюсь. Так все равно конкретнее )

  Ответить  
 
 автор: Киналь   (04.03.2012 в 13:24)   письмо автору
 
   для: Sfinks   (04.03.2012 в 02:13)
 

Э-э... Почему? Это же строка из трёх символов. Да даже если бы и число, то ноль — это не NULL.

  Ответить  
 
 автор: Sfinks   (04.03.2012 в 17:42)   письмо автору
 
   для: Киналь   (04.03.2012 в 13:24)
 

> Да даже если бы и число, то ноль — это не NULL
ноль это не null, а empty(ноль) - это тру.

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования