Модераторы: skyboy, MoLeX, Aliance, ksnk

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Скрипт регистрации, Косяк AKA Проблема 
:(
    Опции темы
WantedFan
Дата 21.7.2008, 10:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 45
Регистрация: 5.7.2008

Репутация: нет
Всего: нет



вот на всякий  
Код

<?php

 // Функция получения IP пользователя
 function get_ip()
  {
   if ($ip = getenv("HTTP_CLIENT_IP"))
    {  return $ip;  }

   if ($ip = getenv("HTTP_X_FORWARDED_FOR"))
    {
     if ($ip == '' || $ip == "unknown")
      {  $ip = getenv("REMOTE_ADDR");  }

     return $ip;
    }
   if ( $ip = getenv("REMOTE_ADDR") )
    {  return $ip;  }
  }

 // Вычисляе хэш безопасности
 function hashh( $user , $user_agent , $user_ip , $tm )
  {  return md5( $user ) . md5( $user_agent ) . md5( $user_ip ) . md5( $tm );  }

 // Получаем текущее время с учетом дробных частей секунды
 function getmicrotime()
  {
   $mt = explode( " ", microtime() );
   return ( (float)$mt[0] + (float)$mt[1] );
  }

 // Редирект с параметром
 function redirect( $par )
  {
   header( "Location: qwe.php?task=" . $par );
   exit;
  }

 // Продление сессии (проверка, что пользователь - авторизован)
 function check()
  {
   // Ищем пользователя с именем, указанным в куках
   $result = mysql_query( "SELECT `*` FROM `auth_members` WHERE `name` = '" . mysql_escape_string( $_COOKIE['name'] ) . "' LIMIT 1" );

   // Еслии пользователя с таким именем нет, делаем редирект
   if( mysql_num_rows( $result ) == 0 )
    {
     setcookie( "time" , "" , time() - 900 , "/" );
     setcookie( "name" , "" , time() - 900 , "/" );

     redirect( "not_auth" );
    }

   // Парсим полученную запись.
   global $user;
   $user = mysql_fetch_object( $result );

   // Количсетво минут для жизни сессии
   $minutes = 15;
   // Ищем, есть ли активная сессия
   $result = mysql_query( "SELECT `*` FROM `auth_sessions` WHERE `member` = " . $user -> id . " AND `hash` = '" . hash( $user -> name , $_SERVER['HTTP_USER_AGENT'] , get_ip() , $_COOKIE['time'] ) . "' AND `time` > " . ( time() - ( $minutes * 60 ) ) . " LIMIT 1 " );

   // Если нету активной сессии, перекидываем на фору авторизации
   if( mysql_num_rows( $result ) == 0 )
    {
     setcookie( "time" , "" , time() - 900 , "/" );
     setcookie( "name" , "" , time() - 900 , "/" );

     redirect( "not_auth" );
    }

   // Если авторизированный пользователь хочет выйти
   if( isset( $_GET['quit'] ) )
    {
     // Удаляем запись о сессии пользователя
     mysql_query( "DELETE FROM `auth_session` WHERE `id` = " . $user -> id . " AND `hash` = '" . hash( $user -> name , $_SERVER['HTTP_USER_AGENT'] , get_ip() , $_COOKIE['time'] ) . "'" );

     // чищаем куки и усианавливаем время жизни в прошлом
     setcookie( "time" , "" , time() - 900 , "/" );
     setcookie( "name" , "" , time() - 900 , "/" );

     // Возвращаем значение "Ложь"
     return FALSE;
    }
   // Иначе, т.е. если пользователь не хочет выходить
   else
    {
     // Обновляем время последней активности пользователя на текущее.
     mysql_query( "UPDATE `auth_session` SET `time` = " . time() . " WHERE `member` = " . $user -> id . " AND `hash` = '" . hash( $user -> name , $_SERVER['HTTP_USER_AGENT'] , get_ip() , $_COOKIE['time'] ) . "'" );

     // Продлеваем время жизни кук
     setcookie( "time" , $_COOKIE['time'] , time() + ( $minutes * 60 ) , "/" );
     setcookie( "name" , $_COOKIE['name'] , time() + ( $minutes * 60 ) , "/" );

     // Возвращаем значение "Истина"
     return TRUE;
    }
  }

 // Функция авторизации
 function auth()
  {
   // Ищем пользователя с именем, указанным в куках
   $result = mysql_query( "SELECT `*` FROM `auth_members` WHERE `name` = '" . mysql_escape_string( $_POST['name'] ) . "' AND `password` = '" . md5( $_POST['pass'] ) . "' LIMIT 1" );

   // Еслии пользователя с таким именем нет, делаем редирект
   if( mysql_num_rows( $result ) == 0 )
    {  redirect( "not_auth" );  }

   // Парсим полученную запись.
   $user = mysql_fetch_object( $result );

   // Получаем текущее время с учетом дробных частей секунды
   $tm = getmicrotime();
   // Вставляем запись в таблицу с сессиями.
   mysql_query( "INSERT INTO `auth_sessions` VALUES( " . $user -> id . " , " . time() . " , '" . hash( $user -> name , $_SERVER['HTTP_USER_AGENT'] , get_ip() , $tm ) . "' )" );

   // Ставим пользователю куки с его логинов и уникальным временем авторизации. Время жизни кук - 15 минут
   setcookie( "time" , $tm , time() + 900 , "/" );
   setcookie( "name" , $user -> name , time() + 900 , "/" );

   // делам редирект без параметра, т.к. никаких ошибок не было
   redirect( "" );
  }

 // Функция регистрации
 function reg()
  {
   // Ищем пользователя с именем, указанным в форме регистрации
   $result = mysql_query( "SELECT `*` FROM `auth_members` WHERE `name` = '" . mysql_escape_string( $_POST['name'] ) . "' LIMIT 1" );

   // Если пользователь найден, делаем редиркт
   if( mysql_num_rows( $result ) == 1 )
    {  redirect( "exists" );  }

   // Иначе, регистрируем пользователя
   mysql_query( "INSERT INTO `auth_members` VALUES ( '' , '" . mysql_escape_string( $_POST['name'] ) . "' , '" . md5( $_POST['pass1'] ) . "' )" );
   $_POST['pass'] = $_POST['pass1'];

   // Делаем как бы автоматическую авторизацию после регисрации.
   auth();
  }

 // ---------------
 // Соединение с MySQL не комментирую, т.к. не в тему статьи

 $host = "localhost";
 $port = "3306";
 $user = "root";
 $pass = "";
 $dbnm = "test";

 $h = ( empty( $post ) ) ? $host : $host . ":" . $port;

 $db = mysql_connect( $h , $user , $pass );

 if( !$db )   // Если соединиться не удалось:
  {
   print ("Datebase connection failed.");
   exit();
  }

 if( ! mysql_select_db( $dbnm ) )
  {
   print ("Datebase select failed.");
   exit();
  }

 // ---------------

 // Если нажата кнопка с именем blogin (Авторизация)
 if( $_SERVER['REQUEST_METHOD'] == "POST" && isset( $_POST['blogin'] ) )
  {
   // Если поле логина или пароля пустое - делаем редирект
   if( empty( $_POST['name'] ) || empty( $_POST['pass'] ) )
    {  redirect( "fields" );  }

   // В протовном случае переходим к авторизации
   auth();
  }

 // Если нажата кнопка с именем breg (Регистрация)
 if( $_SERVER['REQUEST_METHOD'] == "POST" && isset( $_POST['breg'] ) )
  {
   // Если поле логина или пароля или его подтверждения - пусты делаем редирект
   if( empty( $_POST['name'] ) || empty( $_POST['pass1'] ) || empty( $_POST['pass2'] ) )
    {  redirect( "fields" );  }

   // Если введенные пароли не совпадают - делаем редирект
   if( md5( $_POST['pass1'] ) != md5( $_POST['pass2'] ) )
    {  redirect( "nepass" );  }

   // Иначе переходим к функции регистрации
   reg();
  }

 // Если у поьзователя стоят куки и функция check() скажет что пользователь залогинен
 if( isset( $_COOKIE['time'] ) && isset( $_COOKIE['name'] ) && check() == TRUE )
  {  print "Welcome.<br><a href='?quit'>Выйти</a>";  }
 // иначе
 else
  {
   // Если была ошибка, выводим соответствующее сообщение
   if( ! empty( $_GET['task'] ) )
    {
     switch( $_GET['task'] )
      {
       case "nepass":   print "Пароли не совпадают";
            break;
       case "not_auth": print "Логин или пароль неверный.";
            break;
       case "fields":   print "Не заполнены все поля";
            break;
       case "exists":   print "Пользователь с таким именем уже существует";
            break;
      }

     print "<br><br>";
    }
   // И показываем форму

?>
Вход: <form action='' method='POST'>
Логин: <input type='text' name='name' maxlength='127' value=''><br>
Пароль: <input type='text' name='pass' maxlength='127' value=''><br>
<input type='Submit' name='blogin' value='Вход'><br>
</form>
Регистрация: <form action='' method='POST'>
Логин: <input type='text' name='name' maxlength='127' value=''><br>
Пароль: <input type='text' name='pass1' maxlength='127' value=''><br>
Повторите пароль: <input type='text' name='pass2' maxlength='127' value=''><br>
<input type='Submit' name='breg' value='Вход'>
</form>
<?php
  }

?>
<?php

 // Функция получения IP пользователя
 function get_ip()
  {
   if ($ip = getenv("HTTP_CLIENT_IP"))
    {  return $ip;  }

   if ($ip = getenv("HTTP_X_FORWARDED_FOR"))
    {
     if ($ip == '' || $ip == "unknown")
      {  $ip = getenv("REMOTE_ADDR");  }

     return $ip;
    }
   if ( $ip = getenv("REMOTE_ADDR") )
    {  return $ip;  }
  }

 // Вычисляе хэш безопасности
 function hashh( $user , $user_agent , $user_ip , $tm )
  {  return md5( $user ) . md5( $user_agent ) . md5( $user_ip ) . md5( $tm );  }

 // Получаем текущее время с учетом дробных частей секунды
 function getmicrotime()
  {
   $mt = explode( " ", microtime() );
   return ( (float)$mt[0] + (float)$mt[1] );
  }

 // Редирект с параметром
 function redirect( $par )
  {
   header( "Location: qwe.php?task=" . $par );
   exit;
  }

 // Продление сессии (проверка, что пользователь - авторизован)
 function check()
  {
   // Ищем пользователя с именем, указанным в куках
   $result = mysql_query( "SELECT `*` FROM `auth_members` WHERE `name` = '" . mysql_escape_string( $_COOKIE['name'] ) . "' LIMIT 1" );

   // Еслии пользователя с таким именем нет, делаем редирект
   if( mysql_num_rows( $result ) == 0 )
    {
     setcookie( "time" , "" , time() - 900 , "/" );
     setcookie( "name" , "" , time() - 900 , "/" );

     redirect( "not_auth" );
    }

   // Парсим полученную запись.
   global $user;
   $user = mysql_fetch_object( $result );

   // Количсетво минут для жизни сессии
   $minutes = 15;
   // Ищем, есть ли активная сессия
   $result = mysql_query( "SELECT `*` FROM `auth_sessions` WHERE `member` = " . $user -> id . " AND `hash` = '" . hash( $user -> name , $_SERVER['HTTP_USER_AGENT'] , get_ip() , $_COOKIE['time'] ) . "' AND `time` > " . ( time() - ( $minutes * 60 ) ) . " LIMIT 1 " );

   // Если нету активной сессии, перекидываем на фору авторизации
   if( mysql_num_rows( $result ) == 0 )
    {
     setcookie( "time" , "" , time() - 900 , "/" );
     setcookie( "name" , "" , time() - 900 , "/" );

     redirect( "not_auth" );
    }

   // Если авторизированный пользователь хочет выйти
   if( isset( $_GET['quit'] ) )
    {
     // Удаляем запись о сессии пользователя
     mysql_query( "DELETE FROM `auth_session` WHERE `id` = " . $user -> id . " AND `hash` = '" . hash( $user -> name , $_SERVER['HTTP_USER_AGENT'] , get_ip() , $_COOKIE['time'] ) . "'" );

     // чищаем куки и усианавливаем время жизни в прошлом
     setcookie( "time" , "" , time() - 900 , "/" );
     setcookie( "name" , "" , time() - 900 , "/" );

     // Возвращаем значение "Ложь"
     return FALSE;
    }
   // Иначе, т.е. если пользователь не хочет выходить
   else
    {
     // Обновляем время последней активности пользователя на текущее.
     mysql_query( "UPDATE `auth_session` SET `time` = " . time() . " WHERE `member` = " . $user -> id . " AND `hash` = '" . hash( $user -> name , $_SERVER['HTTP_USER_AGENT'] , get_ip() , $_COOKIE['time'] ) . "'" );

     // Продлеваем время жизни кук
     setcookie( "time" , $_COOKIE['time'] , time() + ( $minutes * 60 ) , "/" );
     setcookie( "name" , $_COOKIE['name'] , time() + ( $minutes * 60 ) , "/" );

     // Возвращаем значение "Истина"
     return TRUE;
    }
  }

 // Функция авторизации
 function auth()
  {
   // Ищем пользователя с именем, указанным в куках
   $result = mysql_query( "SELECT `*` FROM `auth_members` WHERE `name` = '" . mysql_escape_string( $_POST['name'] ) . "' AND `password` = '" . md5( $_POST['pass'] ) . "' LIMIT 1" );

   // Еслии пользователя с таким именем нет, делаем редирект
   if( mysql_num_rows( $result ) == 0 )
    {  redirect( "not_auth" );  }

   // Парсим полученную запись.
   $user = mysql_fetch_object( $result );

   // Получаем текущее время с учетом дробных частей секунды
   $tm = getmicrotime();
   // Вставляем запись в таблицу с сессиями.
   mysql_query( "INSERT INTO `auth_sessions` VALUES( " . $user -> id . " , " . time() . " , '" . hash( $user -> name , $_SERVER['HTTP_USER_AGENT'] , get_ip() , $tm ) . "' )" );

   // Ставим пользователю куки с его логинов и уникальным временем авторизации. Время жизни кук - 15 минут
   setcookie( "time" , $tm , time() + 900 , "/" );
   setcookie( "name" , $user -> name , time() + 900 , "/" );

   // делам редирект без параметра, т.к. никаких ошибок не было
   redirect( "" );
  }

 // Функция регистрации
 function reg()
  {
   // Ищем пользователя с именем, указанным в форме регистрации
   $result = mysql_query( "SELECT `*` FROM `auth_members` WHERE `name` = '" . mysql_escape_string( $_POST['name'] ) . "' LIMIT 1" );

   // Если пользователь найден, делаем редиркт
   if( mysql_num_rows( $result ) == 1 )
    {  redirect( "exists" );  }

   // Иначе, регистрируем пользователя
   mysql_query( "INSERT INTO `auth_members` VALUES ( '' , '" . mysql_escape_string( $_POST['name'] ) . "' , '" . md5( $_POST['pass1'] ) . "' )" );
   $_POST['pass'] = $_POST['pass1'];

   // Делаем как бы автоматическую авторизацию после регисрации.
   auth();
  }

 // ---------------
 // Соединение с MySQL не комментирую, т.к. не в тему статьи

 $host = "localhost";
 $port = "3306";
 $user = "root";
 $pass = "";
 $dbnm = "test";

 $h = ( empty( $post ) ) ? $host : $host . ":" . $port;

 $db = mysql_connect( $h , $user , $pass );

 if( !$db )   // Если соединиться не удалось:
  {
   print ("Datebase connection failed.");
   exit();
  }

 if( ! mysql_select_db( $dbnm ) )
  {
   print ("Datebase select failed.");
   exit();
  }

 // ---------------

 // Если нажата кнопка с именем blogin (Авторизация)
 if( $_SERVER['REQUEST_METHOD'] == "POST" && isset( $_POST['blogin'] ) )
  {
   // Если поле логина или пароля пустое - делаем редирект
   if( empty( $_POST['name'] ) || empty( $_POST['pass'] ) )
    {  redirect( "fields" );  }

   // В протовном случае переходим к авторизации
   auth();
  }

 // Если нажата кнопка с именем breg (Регистрация)
 if( $_SERVER['REQUEST_METHOD'] == "POST" && isset( $_POST['breg'] ) )
  {
   // Если поле логина или пароля или его подтверждения - пусты делаем редирект
   if( empty( $_POST['name'] ) || empty( $_POST['pass1'] ) || empty( $_POST['pass2'] ) )
    {  redirect( "fields" );  }

   // Если введенные пароли не совпадают - делаем редирект
   if( md5( $_POST['pass1'] ) != md5( $_POST['pass2'] ) )
    {  redirect( "nepass" );  }

   // Иначе переходим к функции регистрации
   reg();
  }

 // Если у поьзователя стоят куки и функция check() скажет что пользователь залогинен
 if( isset( $_COOKIE['time'] ) && isset( $_COOKIE['name'] ) && check() == TRUE )
  {  print "Welcome.<br><a href='?quit'>Выйти</a>";  }
 // иначе
 else
  {
   // Если была ошибка, выводим соответствующее сообщение
   if( ! empty( $_GET['task'] ) )
    {
     switch( $_GET['task'] )
      {
       case "nepass":   print "Пароли не совпадают";
            break;
       case "not_auth": print "Логин или пароль неверный.";
            break;
       case "fields":   print "Не заполнены все поля";
            break;
       case "exists":   print "Пользователь с таким именем уже существует";
            break;
      }

     print "<br><br>";
    }
   // И показываем форму

?>
Вход: <form action='' method='POST'>
Логин: <input type='text' name='name' maxlength='127' value=''><br>
Пароль: <input type='text' name='pass' maxlength='127' value=''><br>
<input type='Submit' name='blogin' value='Вход'><br>
</form>
Регистрация: <form action='' method='POST'>
Логин: <input type='text' name='name' maxlength='127' value=''><br>
Пароль: <input type='text' name='pass1' maxlength='127' value=''><br>
Повторите пароль: <input type='text' name='pass2' maxlength='127' value=''><br>
<input type='Submit' name='breg' value='Вход'>
</form>
<?php
  }

?>




Это сообщение отредактировал(а) skyboy - 21.7.2008, 11:13
PM MAIL   Вверх
WantedFan
Дата 21.7.2008, 11:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 45
Регистрация: 5.7.2008

Репутация: нет
Всего: нет



skyboy,ошибка пропала...но возникла теперь другая проблема 
Fatal error: Cannot redeclare get_ip() (previously declared in T:\home\localhost\qwe.php:5) in T:\home\localhost\qwe.php on line 207
как я понял где-то существует очередной повтор..



Это сообщение отредактировал(а) WantedFan - 21.7.2008, 11:55
PM MAIL   Вверх
gta4kv
Дата 21.7.2008, 12:00 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Walking around mad.
***


Профиль
Группа: Завсегдатай
Сообщений: 1868
Регистрация: 25.7.2006

Репутация: 21
Всего: 91



Цитата(WantedFan @ 21.7.2008,  11:50)
skyboy,ошибка пропала...но возникла теперь другая проблема 
Fatal error: Cannot redeclare get_ip() (previously declared in T:\home\localhost\qwe.php:5) in T:\home\localhost\qwe.php on line 207
как я понял где-то существует очередной повтор..

ага. у вас функция два раза объявлена. 
PM MAIL   Вверх
skyboy
Дата 21.7.2008, 12:05 (ссылка) |    (голосов:2) Загрузка ... Загрузка ... Быстрая цитата Цитата


неОпытный
****


Профиль
Группа: Модератор
Сообщений: 9820
Регистрация: 18.5.2006
Где: Днепропетровск

Репутация: 75
Всего: 260



Цитата(WantedFan @  21.7.2008,  10:50 Найти цитируемый пост)
Fatal error: Cannot redeclare get_ip() (previously declared in T:\home\localhost\qwe.php:5) in T:\home\localhost\qwe.php on line 207

перевожу
Цитата

Жуткая лажа: Не могу переобъявить(функцию) get_ip()(ранее уже объявленную в строке 5 файла T:\home\localhost\qwe.php ) в T:\home\localhost\qwe.php, 207 строке


PM MAIL   Вверх
falcon39
Дата 11.9.2008, 20:28 (ссылка)    | (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 103
Регистрация: 21.6.2004

Репутация: -1
Всего: 0



Здравствуйте.
Скажите в чем прикол.

Fatal error: Cannot redeclare hash() in Z:\home\localhost\www\test\qwe.php on line 22

Где она 2 раза декларируется?

Код

<?php

 // Функция получения IP пользователя
 function get_ip()
  {
   if ($ip = getenv("HTTP_CLIENT_IP"))
    {  return $ip;  }

   if ($ip = getenv("HTTP_X_FORWARDED_FOR"))
    {
     if ($ip == '' || $ip == "unknown")
      {  $ip = getenv("REMOTE_ADDR");  }

     return $ip;
    }
   if ( $ip = getenv("REMOTE_ADDR") )
    {  return $ip;  }
  }

 // Вычисляе хэш безопасности
 function hash( $user , $user_agent , $user_ip , $tm )
  {  return md5( $user ) . md5( $user_agent ) . md5( $user_ip ) . md5( $tm );  }

 // Получаем текущее время с учетом дробных частей секунды
 function getmicrotime()
  {
   $mt = explode( " ", microtime() );
   return ( (float)$mt[0] + (float)$mt[1] );
  }

 // Редирект с параметром
 function redirect( $par )
  {
   header( "Location: qwe.php?task=" . $par );
   exit;
  }

 // Продление сессии (проверка, что пользователь - авторизован)
 function check()
  {
   // Ищем пользователя с именем, указанным в куках
   $result = mysql_query( "SELECT `*` FROM `auth_members` WHERE `name` = '" . mysql_escape_string( $_COOKIE['name'] ) . "' LIMIT 1" );

   // Еслии пользователя с таким именем нет, делаем редирект
   if( mysql_num_rows( $result ) == 0 )
    {
     setcookie( "time" , "" , time() - 900 , "/" );
     setcookie( "name" , "" , time() - 900 , "/" );

     redirect( "not_auth" );
    }

   // Парсим полученную запись.
   global $user;
   $user = mysql_fetch_object( $result );

   // Количсетво минут для жизни сессии
   $minutes = 15;
   // Ищем, есть ли активная сессия
   $result = mysql_query( "SELECT `*` FROM `auth_sessions` WHERE `member` = " . $user -> id . " AND `hash` = '" . hash( $user -> name , $_SERVER['HTTP_USER_AGENT'] , get_ip() , $_COOKIE['time'] ) . "' AND `time` > " . ( time() - ( $minutes * 60 ) ) . " LIMIT 1 " );

   // Если нету активной сессии, перекидываем на фору авторизации
   if( mysql_num_rows( $result ) == 0 )
    {
     setcookie( "time" , "" , time() - 900 , "/" );
     setcookie( "name" , "" , time() - 900 , "/" );

     redirect( "not_auth" );
    }

   // Если авторизированный пользователь хочет выйти
   if( isset( $_GET['quit'] ) )
    {
     // Удаляем запись о сессии пользователя
     mysql_query( "DELETE FROM `auth_session` WHERE `id` = " . $user -> id . " AND `hash` = '" . hash( $user -> name , $_SERVER['HTTP_USER_AGENT'] , get_ip() , $_COOKIE['time'] ) . "'" );

     // чищаем куки и усианавливаем время жизни в прошлом
     setcookie( "time" , "" , time() - 900 , "/" );
     setcookie( "name" , "" , time() - 900 , "/" );

     // Возвращаем значение "Ложь"
     return FALSE;
    }
   // Иначе, т.е. если пользователь не хочет выходить
   else
    {
     // Обновляем время последней активности пользователя на текущее.
     mysql_query( "UPDATE `auth_session` SET `time` = " . time() . " WHERE `member` = " . $user -> id . " AND `hash` = '" . hash( $user -> name , $_SERVER['HTTP_USER_AGENT'] , get_ip() , $_COOKIE['time'] ) . "'" );

     // Продлеваем время жизни кук
     setcookie( "time" , $_COOKIE['time'] , time() + ( $minutes * 60 ) , "/" );
     setcookie( "name" , $_COOKIE['name'] , time() + ( $minutes * 60 ) , "/" );

     // Возвращаем значение "Истина"
     return TRUE;
    }
  }

 // Функция авторизации
 function auth()
  {
   // Ищем пользователя с именем, указанным в куках
   $result = mysql_query( "SELECT `*` FROM `auth_members` WHERE `name` = '" . mysql_escape_string( $_POST['name'] ) . "' AND `password` = '" . md5( $_POST['pass'] ) . "' LIMIT 1" );

   // Еслии пользователя с таким именем нет, делаем редирект
   if( mysql_num_rows( $result ) == 0 )
    {  redirect( "not_auth" );  }

   // Парсим полученную запись.
   $user = mysql_fetch_object( $result );

   // Получаем текущее время с учетом дробных частей секунды
   $tm = getmicrotime();
   // Вставляем запись в таблицу с сессиями.
   mysql_query( "INSERT INTO `auth_sessions` VALUES( " . $user -> id . " , " . time() . " , '" . hash( $user -> name , $_SERVER['HTTP_USER_AGENT'] , get_ip() , $tm ) . "' )" );

   // Ставим пользователю куки с его логинов и уникальным временем авторизации. Время жизни кук - 15 минут
   setcookie( "time" , $tm , time() + 900 , "/" );
   setcookie( "name" , $user -> name , time() + 900 , "/" );

   // делам редирект без параметра, т.к. никаких ошибок не было
   redirect( "" );
  }

 // Функция регистрации
 function reg()
  {
   // Ищем пользователя с именем, указанным в форме регистрации
   $result = mysql_query( "SELECT `*` FROM `auth_members` WHERE `name` = '" . mysql_escape_string( $_POST['name'] ) . "' LIMIT 1" );

   // Если пользователь найден, делаем редиркт
   if( mysql_num_rows( $result ) == 1 )
    {  redirect( "exists" );  }

   // Иначе, регистрируем пользователя
   mysql_query( "INSERT INTO `auth_members` VALUES ( '' , '" . mysql_escape_string( $_POST['name'] ) . "' , '" . md5( $_POST['pass1'] ) . "' )" );
   $_POST['pass'] = $_POST['pass1'];

   // Делаем как бы автоматическую авторизацию после регисрации.
   auth();
  }

 // ---------------
 // Соединение с MySQL не комментирую, т.к. не в тему статьи

 $host = "localhost";
 $port = "3306";
 $user = "root";
 $pass = "";
 $dbnm = "test";

 $h = ( empty( $post ) ) ? $host : $host . ":" . $port;

 $db = mysql_connect( $h , $user , $pass );

 if( !$db )   // Если соединиться не удалось:
  {
   print ("Datebase connection failed.");
   exit();
  }

 if( ! mysql_select_db( $dbnm ) )
  {
   print ("Datebase select failed.");
   exit();
  }

 // ---------------

 // Если нажата кнопка с именем blogin (Авторизация)
 if( $_SERVER['REQUEST_METHOD'] == "POST" && isset( $_POST['blogin'] ) )
  {
   // Если поле логина или пароля пустое - делаем редирект
   if( empty( $_POST['name'] ) || empty( $_POST['pass'] ) )
    {  redirect( "fields" );  }

   // В протовном случае переходим к авторизации
   auth();
  }

 // Если нажата кнопка с именем breg (Регистрация)
 if( $_SERVER['REQUEST_METHOD'] == "POST" && isset( $_POST['breg'] ) )
  {
   // Если поле логина или пароля или его подтверждения - пусты делаем редирект
   if( empty( $_POST['name'] ) || empty( $_POST['pass1'] ) || empty( $_POST['pass2'] ) )
    {  redirect( "fields" );  }

   // Если введенные пароли не совпадают - делаем редирект
   if( md5( $_POST['pass1'] ) != md5( $_POST['pass2'] ) )
    {  redirect( "nepass" );  }

   // Иначе переходим к функции регистрации
   reg();
  }

 // Если у поьзователя стоят куки и функция check() скажет что пользователь залогинен
 if( isset( $_COOKIE['time'] ) && isset( $_COOKIE['name'] ) && check() == TRUE )
  {  print "Welcome.<br><a href='?quit'>Выйти</a>";  }
 // иначе
 else
  {
   // Если была ошибка, выводим соответствующее сообщение
   if( ! empty( $_GET['task'] ) )
    {
     switch( $_GET['task'] )
      {
       case "nepass":   print "Пароли не совпадают";
            break;
       case "not_auth": print "Логин или пароль неверный.";
            break;
       case "fields":   print "Не заполнены все поля";
            break;
       case "exists":   print "Пользователь с таким именем уже существует";
            break;
      }

     print "<br><br>";
    }
   // И показываем форму

?>
Вход: <form action='' method='POST'>
Логин: <input type='text' name='name' maxlength='127' value=''><br>
Пароль: <input type='text' name='pass' maxlength='127' value=''><br>
<input type='Submit' name='blogin' value='Вход'><br>
</form>
Регистрация: <form action='' method='POST'>
Логин: <input type='text' name='name' maxlength='127' value=''><br>
Пароль: <input type='text' name='pass1' maxlength='127' value=''><br>
Повторите пароль: <input type='text' name='pass2' maxlength='127' value=''><br>
<input type='Submit' name='breg' value='Вход'>
</form>
<?php
  }

?>



Спасибо.
--------------------
PM MAIL   Вверх
skyboy
Дата 11.9.2008, 22:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


неОпытный
****


Профиль
Группа: Модератор
Сообщений: 9820
Регистрация: 18.5.2006
Где: Днепропетровск

Репутация: 75
Всего: 260



Цитата(falcon39 @  11.9.2008,  19:28 Найти цитируемый пост)
Где она 2 раза декларируется?

    первій раз, видимо, в коде ядра.
ты тему-то вообще читал?
в первом соощбении такой же вопрс, в 5 - вполне конкретный ответ.
или 
Цитата

чукча не читатель, чукчу - писатель
?

PM MAIL   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "PHP"
Aliance
IZ@TOP
skyboy
SamDark
MoLeX

Новичкам:

  • PHP редакторы собираются и обсуждаются здесь
  • Электронные книги по PHP, документацию можно найти здесь
  • Интерпретатор PHP, полную документацию можно скачать на PHP.NET

Важно:

  • Не брезгуйте пользоваться тегами [code=php]КОД[/code] для повышения читабельности текста/кода.
  • Перед созданием новой темы воспользуйтесь поиском и загляните в FAQ
  • Действия модераторов можно обсудить здесь

Внимание:

  • Темы "ищу скрипт", "подскажите скрипт" и т.п. будут переноситься в форум "Web-технологии"
  • Темы с именами: "Срочно", "помогите", "не знаю как делать" будут УДАЛЯТЬСЯ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, IZ@TOP, skyboy, SamDark, MoLeX, awers.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | PHP: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.1430 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.