Форма входа и регистрации

Discussion in 'PHP' started by selevit, 21 Aug 2009.

  1. selevit

    selevit Banned

    Joined:
    19 Aug 2009
    Messages:
    95
    Likes Received:
    9
    Reputations:
    -3
    Всем доброго времени суток, на мой сайт нужен php скрипт формы входа и регистрации пользователей - поделитесь, плиз у кого есть. :)
     
  2. Rebz

    Rebz Super Moderator
    Staff Member

    Joined:
    8 Nov 2004
    Messages:
    4,055
    Likes Received:
    1,532
    Reputations:
    1,128
    молодец. а то всё в болталку постил..
    Для начала совет: сначала сам поищи, а потом, если ничего не найдешь, спрашивай. Я думаю ты не первый, кто задаётся этим вопросом.

    Второе: скачивай CMS-ки и изучай их форму авторизации.
     
    1 person likes this.
  3. selevit

    selevit Banned

    Joined:
    19 Aug 2009
    Messages:
    95
    Likes Received:
    9
    Reputations:
    -3
    я искал, но ничего путного так и не нашел)
     
  4. acdel

    acdel Elder - Старейшина

    Joined:
    7 Jan 2008
    Messages:
    132
    Likes Received:
    57
    Reputations:
    3
    вот тут смотри, заюзал поиск по твоему вопросу нашлось туева туча кодов авторизаций php.ru/forum
     
    1 person likes this.
  5. mailbrush

    mailbrush Well-Known Member

    Joined:
    24 Jun 2008
    Messages:
    1,997
    Likes Received:
    996
    Reputations:
    155
    На файлах
    PHP:
     <?php
     
    /*
     (C) Mr.M.I.T.
     http://mit-home.nov.ru
     */
     
    session_start();
     
    $do=$_GET['do'];
     
    $error=false;
     
    $_SESSION['user']=!$_SESSION['user']?array('group'=>"guest"):$_SESSION['user']; // если не существует сессия user то создаем её и ставим по умолчанию
     
    function get_serial($name,$dir='') { // фун-я для получения из файла серилизованного массива, $name - имя файла без расширения $dir путь к папке с файлом
         
    $res=array();
         
    $fp=@file_get_contents(($dir?"$dir/{$name}.php":"{$name}.php"));
         if (
    $fp) {
             
    $fp=str_replace("<?die();?>","",$fp);
             
    $res=unserialize($fp);
         }
      return 
    $res;
     }
     function 
    set_serial($arr,$name,$dir='') { // фун-я для серилизации массива и записи в файл, $arr - массив, $name - название файла без расширения $dir путь к папке с файлом 
         
    $arr="<?die();?>".serialize($arr);
         
    $fp=fopen(($dir?"$dir/{$name}.php":"{$name}.php"),"w");
             
    fputs($fp,$arr);
             
    fclose($fp);
     }
     switch(
    $do) {
       case
    "out"// если do=out то выходим
         
    unset($_SESSION['user']);
         
    session_destroy();
         if (!
    headers_sent()) {
               
    setcookie("save",'',time()+999999,'/');
         }
         
    header("Location:".($_SERVER['HTTP_REFERER']?$_SERVER['HTTP_REFERER']:$_SERVER['PHP_SELF']));
       break;
       case
    "register"// если do=register, выводим регистрацию
         
    $login=$_POST['login'];
         
    $pass1=$_POST['pass1'];
         
    $pass2=$_POST['pass2'];
         if (isset(
    $login) && isset($pass1) && isset($pass2)) {
           if (!empty(
    $login) && !empty($pass1) && !empty($pass2)) {
               
    $users=get_serial('users');
               
    $reallogin=$login;
               
    $login=md5(strtolower($login));
               if (!
    $users[$login]) {
                   if (
    strlen($pass1)>=4) {
                       
    $pass1=md5($pass1);
                       
    $pass2=md5($pass2);
                       if (
    $pass1==$pass2) {
                           
    $users[$login]=array();
                           
    $users[$login]['login']=htmlspecialchars($reallogin);
                           
    $users[$login]['pass']=$pass1;
                             
    set_serial($users,'users');
                             
    $error="Вы успешно зарегистрированны";
                             
    header("Refresh:3;url=".$_SERVER['PHP_SELF']);
                       }else {
                           
    $error="Ошибка: Пароли не совпадают";
                       }
                   }else {
                       
    $error="Ошибка: Минимальная длина пароля 4 символа";
                   }
               } else {
                   
    $error="Ошибка: Такой пользователь уже существует";
               }
           }else {
             
    $error="Ошибка: Обязательные поля нужно заполнить";
           }
         }
         print 
    "
           "
    .($error?"<div align=center width=60% style='border:1px solid red'>$error</div><br>":"")."
           <form method=POST>
           <table width=30% align=center border=1>
           <tr>
           <td>Login</td><td><input type='text' name='login'></td>
           <tr>
           <td>Pass 1</td><td><input type='password' name='pass1'></td>
           <tr>
           <td>Pass 2</td><td><input type='password' name='pass2'></td>
           <tr>
           <td colspan=2 align=center><input type=submit value='Регистрация'></td>
           </table>
           </form>
           "
    ;
       break;
       default: 
    // по умолчанию, если do не существует или не равна register и out, выводим авторизацию
       
    if ($_SESSION['user']['group']=='guest') {
       
    $_COOKIE['save']=$_COOKIE['save']?unserialize($_COOKIE['save']):"";
       
    $login=!$_COOKIE['save']['login'] || isset($_POST['login'])?$_POST['login']:$_COOKIE['save']['login'];
       
    $pass=!$_COOKIE['save']['pass'] || isset($_POST['pass'])?$_POST['pass']:$_COOKIE['save']['pass'];
       if (isset(
    $login) && isset($pass)) {
           if (!empty(
    $login) && !empty($pass)) {
               if (!
    $_COOKIE['save']['pass'] || isset($_POST['pass'])) $pass=md5($pass);
               
    $users=get_serial('users');
               
    $login=md5(strtolower($login));
               if (
    $users[$login]) {
                   if (
    $users[$login]['pass']==$pass) {
                       
    $_SESSION['user']['group']='user';
                       
    $_SESSION['user']['login']=$users[$login]['login'];
                       if (!
    headers_sent() && $_POST['save']) {
                           
    $cook=array();
                           
    $cook['pass']=$pass;
                           
    $cook['login']=$users[$login]['login'];
                           
    setcookie("save",serialize($cook),time()+999999,'/');
                       }
                   }else {
                     
    $error="Ошибка: Неверный Пароль";
                   }
               }else {
                 
    $error="Ошибка: Такого Пользователя не существует";
               }
           }else {
             
    $error="Ошибка: Обязательные поля нужно заполнить";
         }
         }
       }
       if (
    $_SESSION['user']['group']=='guest') {
       print 
    "
       "
    .($error?"<div align=center width=60% style='border:1px solid red'>$error</div><br>":"")."
       <form method=POST>
       <table width=30% align=center border=1>
       <tr>
       <td>Login</td><td><input type='text' name='login'></td>
       <tr>
       <td>Pass</td><td><input type='password' name='pass'></td>
       <tr>
       <td>Запомнить?</td><td><input type='checkbox' name='save' value='1'></td>
       <tr>
       <td colspan=2><a href='?do=register'>Регистрация</a></td>
       <tr>
       <td colspan=2 align=center><input type=submit value='Войти'></td>
       </table>
       </form>
       "
    ;
       }else {
       print 
    "
       <table width=30% align=center border=1>
       <tr>
       <td>Вы вошли как</td><td>
    {$_SESSION['user']['login']} <a href='?do=out'>Выйти</a></td>
       </table>
       "
    ;
       }
     }
     
    ?>
    На БД:
    PHP:
     <?php
     
    /*
      (c) Mr.M.I.T.
       http://mit-home.nov.ru
     */
     ############################
     # Set Defaults
     ############################
     
    set_magic_quotes_runtime(0);
     
    session_start();
     
    $do=$_GET['do'];
     
    $error=false;
     
    $_SESSION['user']=!$_SESSION['user']?array('group'=>"guest"):$_SESSION['user'];
     
    $GLOBALS['cnf']=get_serial('db_cnf');
     
    ############################
     # Support Functions
     ############################
     
    function get_serial($name,$dir='') {
         
    $res=array();
         
    $fp=@file_get_contents(($dir?"$dir/{$name}.php":"{$name}.php"));
         if (
    $fp) {
             
    $fp=str_replace("<?die();?>","",$fp);
             
    $res=unserialize($fp);
         }
      return 
    $res;
     }
     function 
    set_serial($arr,$name,$dir='') {
         
    $arr="<?die();?>".serialize($arr);
         
    $fp=fopen(($dir?"$dir/{$name}.php":"{$name}.php"),"w");
             
    fputs($fp,$arr);
             
    fclose($fp);
     }
     function 
    givepost($keys,$msql=false) {
         
    $arr=array();
         if (
    $_POST) {
             
    $keys=explode(',',$keys);
             for(
    $i=0,$c=count($keys);$i<$c;$i++) {
                   
    $arr[$keys[$i]]=$msql?mysql_real_escape_string($_POST[$keys[$i]]):$_POST[$keys[$i]];
             }
         }
       return 
    $arr;
     }
     function 
    emptypost($keys) {
         if (
    $_POST) {
             
    $keys=explode(',',$keys);
             for(
    $i=0,$c=count($keys);$i<$c;$i++) {
                   if (empty(
    $_POST[$keys[$i]])) {
                       return 
    true;
                   }
             }
             return 
    false;
         }
       return 
    true;
     }
      
     function 
    db_connect() {
         if (!
    $GLOBALS['db_connid']) {
             
    $GLOBALS['db_connid']= mysql_connect($GLOBALS['cnf']['db_host'],$GLOBALS['cnf']['db_user'],$GLOBALS['cnf']['db_pass']) or die(mysql_error());
             
    mysql_query('SET NAMES '.$GLOBALS['cnf']['db_encoding']);
             
    mysql_select_db($GLOBALS['cnf']['db_name'],$GLOBALS['db_connid']);
             
    $GLOBALS['cnf']['db_pref']=mysql_real_escape_string($GLOBALS['cnf']['db_pref']);
         }
         return  
    $GLOBALS['db_connid'];
     }
      
     
    ################################
     # Install
     ################################
     
    if (empty($GLOBALS['cnf'])) {
       if (isset(
    $_POST['done'])) {
         if (!
    emptypost("db_name,db_host,db_user,db_encoding,db_pref")) {
             
    $GLOBALS['cnf']=givepost("db_name,db_pass,db_host,db_user,db_encoding,db_pref");
             if (
    db_connect()) {
                 
    set_serial($GLOBALS['cnf'],'db_cnf');
                 
    mysql_query("
                   CREATE TABLE `
    {$GLOBALS['cnf']['db_pref']}_auth` (
                     `id_user` int(11) NOT NULL auto_increment,
                     `login` varchar(300) NOT NULL,
                     `pass` varchar(32) NOT NULL,
                     PRIMARY KEY  (`id_user`),
                     KEY `login` (`login`)
                   ) ENGINE=MyISAM DEFAULT CHARSET=cp1251 AUTO_INCREMENT=1
                 "
    ) or die(mysql_error());
                 
    $error='Установка...';
                 
    header("Refresh: 2");
             }
         }else {
             
    $error="Ошибка: Обязательные поля нужно заполнить";
         }
       }
         print 
    "
           "
    .($error?"<div align=center width=60% style='border:1px solid red'>$error</div><br>":"")."
           <form method=POST>
           <table width=30% align=center border=1>
           <tr>
           <td colspan=2 align=center>Установка...</td>
           <tr>
           <td>db_name</td><td><input type='text' name='db_name'></td>
           <tr>
           <td>db_pass</td><td><input type='text' name='db_pass'></td>
           <tr>
           <td>db_user</td><td><input type='text' name='db_user'></td>
           <tr>
           <td>db_host</td><td><input type='text' name='db_host'></td>
           <tr>
           <td>db_prefix</td><td><input type='text' name='db_pref' value='pref'></td>
           <tr>
           <td>db_encoding</td><td><input type='text' name='db_encoding' value='cp1251'></td>
           <tr>
           <td colspan=2 align=center><input type=submit name='done' value='Установить'></td>
           </table>
           </form>
           "
    ;
           die();
     }
      
     
    ##############################
     # Auth/Out/Register
     ##############################
      
      
     
    $db=db_connect();
     switch(
    $do) {
       case
    "out":
         unset(
    $_SESSION['user']);
         
    session_destroy();
         if (!
    headers_sent()) {
               
    setcookie("save",'',time()+99999,'/');
         }
         
    header("Location:".($_SERVER['HTTP_REFERER']?$_SERVER['HTTP_REFERER']:$_SERVER['PHP_SELF']));
       break;
       case
    "register":
         
    $login=$_POST['login'];
         
    $pass1=$_POST['pass1'];
         
    $pass2=$_POST['pass2'];
         if (isset(
    $login) && isset($pass1) && isset($pass2)) {
           if (!empty(
    $login) && !empty($pass1) && !empty($pass2)) {
               
    $login=mysql_real_escape_string(htmlspecialchars($login));
               
    $sql=mysql_query("SELECT * FROM {$GLOBALS['cnf']['db_pref']}_auth WHERE LOWER(login)='".strtolower($login)."'");
               if (!
    mysql_num_rows($sql)) {
                   if (
    strlen($pass1)>=4) {
                       
    $pass1=md5($pass1);
                       
    $pass2=md5($pass2);
                       if (
    $pass1==$pass2) {
                           if(
    mysql_query("INSERT INTO {$GLOBALS['cnf']['db_pref']}_auth VALUES(NULL,'$login','$pass1')")) {
                             
    $error="Вы успешно зарегистрированны";
                             
    header("Refresh:3;url=".$_SERVER['PHP_SELF']);
                         }else{
                               
    $error="Системная ошибка, не могу занести информацию в БД";
                         }
                       }else {
                           
    $error="Ошибка: Пароли не совпадают";
                       }
                   }else {
                       
    $error="Ошибка: Минимальная длина пароля 4 символа";
                   }
               } else {
                   
    $error="Ошибка: Такой пользователь уже существует";
               }
           }else {
             
    $error="Ошибка: Обязательные поля нужно заполнить";
           }
         }
         print 
    "
           "
    .($error?"<div align=center width=60% style='border:1px solid red'>$error</div><br>":"")."
           <form method=POST>
           <table width=30% align=center border=1>
           <tr>
           <td>Login</td><td><input type='text' name='login'></td>
           <tr>
           <td>Pass 1</td><td><input type='password' name='pass1'></td>
           <tr>
           <td>Pass 2</td><td><input type='password' name='pass2'></td>
           <tr>
           <td colspan=2 align=center><input type=submit value='Регистрация'></td>
           </table>
           </form>
           "
    ;
       break;
       default:
       if (
    $_SESSION['user']['group']=='guest') {
       
    $_COOKIE['save']=$_COOKIE['save']?unserialize($_COOKIE['save']):"";
       
    $login=!$_COOKIE['save']['login'] || isset($_POST['login'])?$_POST['login']:$_COOKIE['save']['login'];
       
    $pass=!$_COOKIE['save']['pass'] || isset($_POST['pass'])?$_POST['pass']:$_COOKIE['save']['pass'];
       if (isset(
    $login) && isset($pass)) {
           if (!empty(
    $login) && !empty($pass)) {
               if (!
    $_COOKIE['save']['pass'] || isset($_POST['pass'])) $pass=md5($pass);
               
    $login=mysql_real_escape_string(htmlspecialchars($login));
               
    $sql=mysql_query("SELECT * FROM {$GLOBALS['cnf']['db_pref']}_auth WHERE LOWER(login)='".strtolower($login)."'");
               if (
    mysql_num_rows($sql)) {
                   
    $row=mysql_fetch_assoc($sql);
                   if (
    $row['pass']==$pass) {
                       
    $_SESSION['user']['group']='user';
                       
    $_SESSION['user']['login']=$row['login'];
                       if (!
    headers_sent() && $_POST['save']) {
                           
    $cook=array();
                           
    $cook['pass']=$pass;
                           
    $cook['login']=$row['login'];
                           
    setcookie("save",serialize($cook),time()+99999,'/');
                       }
                   }else {
                     
    $error="Ошибка: Неверный Пароль";
                   }
               }else {
                 
    $error="Ошибка: Такого Пользователя не существует";
               }
           }else {
             
    $error="Ошибка: Обязательные поля нужно заполнить";
         }
         }
       }
       if (
    $_SESSION['user']['group']=='guest') {
       print 
    "
       "
    .($error?"<div align=center width=60% style='border:1px solid red'>$error</div><br>":"")."
       <form method=POST>
       <table width=30% align=center border=1>
       <tr>
       <td>Login</td><td><input type='text' name='login'></td>
       <tr>
       <td>Pass</td><td><input type='password' name='pass'></td>
       <tr>
       <td>Запомнить?</td><td><input type='checkbox' name='save' value='1'></td>
       <tr>
       <td colspan=2><a href='?do=register'>Регистрация</a></td>
       <tr>
       <td colspan=2 align=center><input type=submit value='Войти'></td>
       </table>
       </form>
       "
    ;
       }else {
       print 
    "
       <table width=30% align=center border=1>
       <tr>
       <td>Вы вошли как</td><td>
    {$_SESSION['user']['login']} <a href='?do=out'>Выйти</a></td>
       </table>
       "
    ;
       }
     }
     
    ?>
    (c) http://www.php.ru/forum/viewtopic.php?t=14334
     
  6. selevit

    selevit Banned

    Joined:
    19 Aug 2009
    Messages:
    95
    Likes Received:
    9
    Reputations:
    -3
    спасибо большое!!!
     
  7. selevit

    selevit Banned

    Joined:
    19 Aug 2009
    Messages:
    95
    Likes Received:
    9
    Reputations:
    -3
    можно еще вопрос - как сделать подтверждение регистрации по e-mail?
     
  8. -=Zhenek=-

    -=Zhenek=- Elder - Старейшина

    Joined:
    31 Dec 2007
    Messages:
    271
    Likes Received:
    77
    Reputations:
    1
    Сделай в базе еще одну калонку.
    При регистрации генерируй код и заноси его туда.
    На почту высылай ссылку например : site.ru/index.php?do=actemail&code=уникальный код

    При переходе по ссылке удаляй из столбца код. и пиши,что активировано.


    А при заходе в аккаунт проверяй если в поле кода не пусто,то говори что мыло не активированно.