За последние 24 часа нас посетили 33005 программистов и 1756 роботов. Сейчас ищут 810 программистов ...

Проблема в регистрации

Тема в разделе "Прочие вопросы по PHP", создана пользователем Ter, 20 авг 2011.

  1. Ter

    Ter Активный пользователь

    С нами с:
    5 июн 2011
    Сообщения:
    67
    Симпатии:
    0
    Здравствуйте, прочитал гайд по регистрации http://www.php.ru/forum/viewtopic.p...E2%F2%EE%F0%E8%E7%E0%F6%E8%FF+%F4%E0%E9%EB%E5, сама регистрация проходит успешно и пользователь регистрируется. Проблема в следующем: у меня учётные записи с данными хранятся в отдельных папках, и для каждого пользователя нужен свой вход(а в этой регистрации он общий). Я решил использовать внешний файл регистрации как проверку(чтобы например не было повторение пользователей), а в каждую папку пользователя добавить по ещё одному файлу users.php(файл с данными пользователей) с только ОДНОЙ записью его логина/пароля, чтобы никто больше не мог зайти к нему. Проблема состоит в том, что я ну никак не могу добавить файл в папку с пользователем с лично его логином/паролем... Может есть кто в этом разбирается?
     
  2. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    учил бы ты БД. Делов-то на день.
     
  3. Ter

    Ter Активный пользователь

    С нами с:
    5 июн 2011
    Сообщения:
    67
    Симпатии:
    0
    бд знаю, но мне нужна файловая система
     
  4. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    а в чем беда файл запихать в папку-то?
     
  5. Ter

    Ter Активный пользователь

    С нами с:
    5 июн 2011
    Сообщения:
    67
    Симпатии:
    0
    вот не получается значит, вот и пишу, наверное если бы всё было хорошо, я не писал
     
  6. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    на что ругается?
     
  7. Ter

    Ter Активный пользователь

    С нами с:
    5 июн 2011
    Сообщения:
    67
    Симпатии:
    0
    надо чтоб в папку которая равна $login посылались данные также, как в корневой, вот эта функция
    PHP:
    1.  
    2.  function set_serial($arr,$name,$dir='') {
    3.      $arr="<?die();?>".serialize($arr);
    4.      $fp=fopen(($dir?"$dir/{$name}.php":"{$name}.php"),"w");
    5.          fputs($fp,$arr);
    6.          fclose($fp);
    7.      $fp2=fopen("$papka/users.php", "w");
    8.         fputs($fp2,$arr);
    9.         fclose($fp2); }
    10.  
    $fp это автора, а $fp2 моё.
    на самом верху указал
    PHP:
    1.  
    2.      $papka=$_SESSION['user']['login'];
    3.      $login=$_POST['login'];
    4.      $pass1=$_POST['pass1'];
    5.      $pass2=$_POST['pass2'];
    6.  
    Уже всё испробовал, такое ощущение, что он не видит $papka и $login
     
  8. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    ты в лог ошибок заглядывал?
     
  9. Ter

    Ter Активный пользователь

    С нами с:
    5 июн 2011
    Сообщения:
    67
    Симпатии:
    0
    да,
    Код (Text):
    1.  
    2.  
    3. [20-Aug-2011 15:20:32] PHP Warning:  fopen(/users.php) [<a href='function.fopen'>function.fopen</a>]: failed to open stream: Permission denied in /home/u723636318/public_html/login.php on line 28
    4. [20-Aug-2011 15:20:32] PHP Warning:  fputs(): supplied argument is not a valid stream resource in /home/u723636318/public_html/login.php on line 29
    5. [20-Aug-2011 15:20:32] PHP Warning:  fclose(): supplied argument is not a valid stream resource in /home/u723636318/public_html/login.php on line 30
     
  10. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    пермишн денайд - значит прав нету. вот думай.
     
  11. Ter

    Ter Активный пользователь

    С нами с:
    5 июн 2011
    Сообщения:
    67
    Симпатии:
    0
    да вроде они всегда были. а тут вдруг пропали... мне кажется, fopen(/users.php) он не может открыть файл и создать его, т.к. папка не указана, точнее переменная не работает......
    PHP:
    1.  
    2. <?
    3.  /*
    4.  (C) Mr.M.I.T.
    5.  [url=http://mit-home.nov.ru]http://mit-home.nov.ru[/url]
    6.  */
    7.      $papka=$_SESSION['user']['login'];
    8.      $login=$_POST['login'];
    9.      $pass1=$_POST['pass1'];
    10.      $pass2=$_POST['pass2'];
    11.  $do=$_GET['do'];
    12.  $error=false;
    13.  $_SESSION['user']=!$_SESSION['user']?array('group'=>"guest"):$_SESSION['user'];
    14.  function get_serial($name,$dir='') {
    15.      $res=array();
    16.      $fp=@file_get_contents(($dir?"$dir/{$name}.php":"{$name}.php"));
    17.      if ($fp) {
    18.          $fp=str_replace("<?die();?>","",$fp);
    19.          $res=unserialize($fp);
    20.      }
    21.   return $res;
    22.  }
    23.  function set_serial($arr,$name,$dir=''){
    24.      $arr="<?die();?>".serialize($arr);
    25.      $fp=fopen(($dir?"$dir/{$name}.php":"{$name}.php"),"w");
    26.          fputs($fp,$arr);
    27.          fclose($fp);
    28.      $fp2=fopen("$papka/users.php", "w");
    29.         fputs($fp2,$arr);
    30.         fclose($fp2);
    31.  }
    32.  switch($do) {
    33.    case"out":
    34.      unset($_SESSION['user']);
    35.      session_destroy();
    36.      if (!headers_sent()) {
    37.            setcookie("save",'',time()+999999,'/');
    38.      }
    39.      header("Location:".($_SERVER['HTTP_REFERER']?$_SERVER['HTTP_REFERER']:$_SERVER['PHP_SELF']));
    40.    break;
    41.    case"register": // если do=register, выводим регистрацию
    42.      if (isset($login) && isset($pass1) && isset($pass2)) {
    43.        if (!empty($login) && !empty($pass1) && !empty($pass2)) {
    44.            $users=get_serial('users');
    45.            $reallogin=$login;
    46.            $login=md5(strtolower($login));
    47.            if (!$users[$login]) {
    48.                if (strlen($pass1)>=4) {
    49.                    $pass1=md5($pass1);
    50.                    $pass2=md5($pass2);
    51.                    if ($pass1==$pass2) {
    52.                        $users[$login]=array();
    53.                        $users[$login]['login']=htmlspecialchars($reallogin);
    54.                        $users[$login]['pass']=$pass1;
    55.                          set_serial($users,'users');
    56.                          $error="Вы успешно зарегистрированны";
    57.                          header("Refresh:3;url=".$_SERVER['PHP_SELF']);
    58.                    }else {
    59.                        $error="Ошибка: Пароли не совпадают";
    60.                    }
    61.                }else {
    62.                    $error="Ошибка: Минимальная длина пароля 4 символа";
    63.                }
    64.            } else {
    65.                $error="Ошибка: Такой пользователь уже существует";
    66.            }
    67.        }else {
    68.          $error="Ошибка: Обязательные поля нужно заполнить";
    69.        }
    70.      }
    71.      print "
    72.       <html>
    73.       <head>
    74.       <title>TST - Вход</title>
    75.       <link rel=stylesheet href=config-files/style.css type=text/css>
    76.       </head>
    77.       <body>
    78.       <table width=100% height=50 class=tst><tr>
    79.       <td width=5%><img src=config-files/images/logo.png name=aaa border=0 onMouseOver=aaa.src='config-files/images/logo-a.png' onMouseOut=aaa.src='config-files/images/logo.png'></td>
    80.       <td width=75%><a href=index.php>Главная</a> <a href=login.php?do=register>Регистрация</a> <a href=about.php>О нас</a></td></tr></table>
    81.       <br><br><br><br><br>
    82.       <form method=post>
    83.       <table width=50% height=600 align=center class=reg>
    84.       <tr><td colspan=2><div align=center><font size=5>$error</font></div></td></tr>
    85.       <tr><td>Логин:</td><td><input type=text name=login></td></tr>
    86.       <tr><td>e-mail:</td><td><input type=text name=email></td></tr>
    87.       <tr><td>Пароль:</td><td><input type=password name=pass1></td></tr>
    88.       <tr><td>Повторите пароль:</td><td><input type=password name=pass2></td></tr>
    89.       <tr><td>Династия:</td><td><input type=text name=dynasty></td></tr>
    90.       <tr><td colspan=2><div align=center><input type=submit value=Создать class=button></div></td></tr>
    91.       </table></form>
    92.       </body>
    93.       </html>
    94.       ";
    95.    break;
    96.    default:
    97.    if ($_SESSION['user']['group']=='guest') {
    98.    $_COOKIE['save']=$_COOKIE['save']?unserialize($_COOKIE['save']):"";
    99.    $login=!$_COOKIE['save']['login'] || isset($_POST['login'])?$_POST['login']:$_COOKIE['save']['login'];
    100.    $pass=!$_COOKIE['save']['pass'] || isset($_POST['pass'])?$_POST['pass']:$_COOKIE['save']['pass'];
    101.    if (isset($login) && isset($pass)) {
    102.        if (!empty($login) && !empty($pass)) {
    103.            if (!$_COOKIE['save']['pass'] || isset($_POST['pass'])) $pass=md5($pass);
    104.            $users=get_serial('users');
    105.            $login=md5(strtolower($login));
    106.            if ($users[$login]) {
    107.                if ($users[$login]['pass']==$pass) {
    108.                    $_SESSION['user']['group']='user';
    109.                    $_SESSION['user']['login']=$users[$login]['login'];
    110.                    if (!headers_sent() && $_POST['save']) {
    111.                        $cook=array();
    112.                        $cook['pass']=$pass;
    113.                        $cook['login']=$users[$login]['login'];
    114.                        setcookie("save",serialize($cook),time()+999999,'/');
    115.                    }
    116.                }else {
    117.                  $error="Ошибка: Неверный Пароль";
    118.                }
    119.            }else {
    120.              $error="Ошибка: Такого Пользователя не существует";
    121.            }
    122.        }else {
    123.          $error="Ошибка: Обязательные поля нужно заполнить";
    124.      }
    125.      }
    126.    }
    127.    if ($_SESSION['user']['group']=='guest') {
    128.    print "
    129.   <html>
    130.   <head>
    131.   <title>TST - Вход</title>
    132.   <link rel=stylesheet href=config-files/style.css type=text/css>
    133.   </head>
    134.   <body>
    135.   <table width=100% height=50 class=tst><tr>
    136.   <td width=5%><img src=config-files/images/logo.png name=aaa border=0 onMouseOver=aaa.src='config-files/images/logo-a.png' onMouseOut=aaa.src='config-files/images/logo.png'></td>
    137.   <td width=75%><a href=index.php>Главная</a> <a href=login.php?do=register>Регистрация</a> <a href=about.php>О нас</a></td></tr></table>
    138.   <br><br><br><br><br>
    139.   <form method=post>
    140.   <table width=50% height=600 align=center class=reg>
    141.   <tr><td colspan=2><div align=center><font size=5>$error</font></div></td></tr>
    142.   <tr><td>Логин:$papka</td><td><input type=text name=login></td></tr>
    143.   <tr><td>Пароль:</td><td><input type=password name=pass></td></tr>
    144.   <tr><td>Запомнить?</td><td><input type=checkbox name=save value=1 class=checkbox></td></tr>
    145.   <tr><td colspan=2><div align=center><input type=submit value=Вход class=button></div></td></tr>
    146.   </table></form>
    147.   </body>
    148.   </html>
    149.   ";
    150.    }else {
    151. header("location:{$_SESSION['user']['login']}/admin.php");
    152.    }
    153.  }
    154.  
    155.  
    156.  ?>
    157.  
     
  12. Ter

    Ter Активный пользователь

    С нами с:
    5 июн 2011
    Сообщения:
    67
    Симпатии:
    0
    из этого нужно как то организовать добавление в папку $login users.php с одним логином и паролем
     
  13. [vs]

    [vs] Суперстар
    Команда форума Модератор

    С нами с:
    27 сен 2007
    Сообщения:
    10.559
    Симпатии:
    632
    Вы бы лучше спросили, что Mr.M.I.T. думает по поводу этого кода сейчас =)
     
  14. Ter

    Ter Активный пользователь

    С нами с:
    5 июн 2011
    Сообщения:
    67
    Симпатии:
    0
  15. Ter

    Ter Активный пользователь

    С нами с:
    5 июн 2011
    Сообщения:
    67
    Симпатии:
    0
    Вот немного разобрался...
    PHP:
    1.  
    2. function set_papka($arr,$name,$papka='Night'){
    3.      $arr="<?die();?>".serialize($arr);
    4.      $fp=fopen(($papka?"$papka/{$name}.php":"{$name}.php"),"w");
    5.          fputs($fp,$arr);
    6.          fclose($fp);}
    7.  
    Эта функция следует после первой function set_serial, что записывает файл users.php в корневую директорию...
    $papka в функции сейчас имеет имя и записывается правильно, как надо, но как присвоить ей значение логина? всё перепробовал, будто все переменные вообще значат NULL, хотя как-то создают записи в users.php
     
  16. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    после session_start(); на следующей строке сделай var_dump($_SESSION);
     
  17. Ter

    Ter Активный пользователь

    С нами с:
    5 июн 2011
    Сообщения:
    67
    Симпатии:
    0
    спасибо, но не помогло... точнее, вверху сайта пишет array(1) { ["user"]=> array(1) { ["group"]=> string(5) "guest" } }
    и всё вроде также...
     
  18. [vs]

    [vs] Суперстар
    Команда форума Модератор

    С нами с:
    27 сен 2007
    Сообщения:
    10.559
    Симпатии:
    632
    коду три года и он гавно
     
  19. Ter

    Ter Активный пользователь

    С нами с:
    5 июн 2011
    Сообщения:
    67
    Симпатии:
    0
    [vs], меня устраивает... есть лучше? примеры?
     
  20. Ter

    Ter Активный пользователь

    С нами с:
    5 июн 2011
    Сообщения:
    67
    Симпатии:
    0
    всё, разобрался, тема закрыта. всем спасибо за просмотр