За последние 24 часа нас посетил 22441 программист и 1019 роботов. Сейчас ищут 667 программистов ...

Пример авторизации/регистрации/выхода (на файлах и БД)

Тема в разделе "Решения, алгоритмы", создана пользователем Mr.M.I.T., 30 сен 2008.

  1. Катюша

    Катюша Guest

    просто я сейчас на работе, а проверить смогу только на домашнем копьютере вечером
     
  2. Simpliest

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

    С нами с:
    24 сен 2009
    Сообщения:
    4.511
    Симпатии:
    2
    Адрес:
    Донецк
    достаточно просто закомментировать их.
     
  3. Elkaz

    Elkaz Старожил
    Команда форума Модератор

    С нами с:
    26 июн 2006
    Сообщения:
    3.373
    Симпатии:
    0
    Адрес:
    Баку, Азербайджан
    Катюша
    Удалите или смените аватару на реальную фотографию (читайте правила).
     
  4. Катюша

    Катюша Guest

    подскажите как лучше присоединить(include) haedr.php или вписать его в код?
     
  5. Simpliest

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

    С нами с:
    24 сен 2009
    Сообщения:
    4.511
    Симпатии:
    2
    Адрес:
    Донецк
    никак.
    Тут очень много всяких "НО" и все зависит от конкретного случая.

    Если кода немного, то все может быть в одном файле.
    Если код требуется в других файлах, то его можно вынести в отдельный файл.
    Если кода много, то для улучшения читаемости, тоже можно разделить на блоки и хранить их в отдельных файлах.
     
  6. Катюша

    Катюша Guest

    ок
     
  7. Катюша

    Катюша Guest


    1. я думаю что да, будет использоваться
    2. думаю со временем код будет расти

    по этому лучший вариант разбить на файлы, я так и сделала- уменя есть header.php и footer.php кода я подключаю header.php скрипт работает нормально(регистрирует-выход пользователя), но при нажатии на выход выдает

    Warning: Cannot modify header information - headers already sent by (output started at /home/content/14/5052914/html/defender/regist/headr.php:8) in //эта ошибка в header.php
    HTML:
    1.  
    2.  
    3.     <head profile="http://gmpg.org/xfn/11">
    4.     <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
    5.     <title>Доступ</title>
    6.    <link rel="shortcut icon" href="http://мойсайт/defender/img/favicon.ico" />
    7. 8:<link rel="stylesheet" href="http://мойсайт/defender/css/style.css" type="text/css" media="screen" />
    8. // это часть хедера где в 8 строке выдало ошибочку
    9.  


    /home/content/14/5052914/html/defender/regist/index.php on line 124 а эта в index.php <--- тут весь код регистрации
    PHP:
    1. <?
    2. 124: header("Location:".($_SERVER['HTTP_REFERER']?$_SERVER['HTTP_REFERER']:$_SERVER['PHP_SELF']));
    3. ?>
    без инклуда работает хорошо, то бишь без дизайна, только подключаю дизай, выдает эти ошибки, и я так поняла, что я куда то ни туда его пытаюсь прилепить :)))\

    помогите, куде же его прилепить:)
     
  8. Simpliest

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

    С нами с:
    24 сен 2009
    Сообщения:
    4.511
    Симпатии:
    2
    Адрес:
    Донецк
    Поиск по форуму по этой ошибке. Встречалась уже не раз.

    ДО вызова header() не должно быть никакого вывода и html

    решений этого вопроса тоже есть не одно.
     
  9. Катюша

    Катюша Guest

    да, вот задача, если я подключаю хедер после header()
    PHP:
    1. <?
    2. header("Location:".($_SERVER['HTTP_REFERER']?$_SERVER['HTTP_REFERER']:$_SERVER['PHP_SELF']));
    3.    break;
    4.    case"register":
    5.      $login=$_POST['login'];
    6.      $pass1=$_POST['pass1'];
    7.      $pass2=$_POST['pass2'];
    8.      if (isset($login) && isset($pass1) && isset($pass2)) {
    9.        if (!empty($login) && !empty($pass1) && !empty($pass2)) {
    10.            $login=mysql_real_escape_string(htmlspecialchars($login));
    11.            $sql=mysql_query("SELECT * FROM {$GLOBALS['cnf']['db_pref']}_auth WHERE LOWER(login)='".strtolower($login)."'");
    12.            if (!mysql_num_rows($sql)) {
    13.                if (strlen($pass1)>=4) {
    14.                    //$pass1=md5($pass1);
    15.                    //$pass2=md5($pass2);
    16.                    if ($pass1==$pass2) {
    17.                        if(mysql_query("INSERT INTO {$GLOBALS['cnf']['db_pref']}_auth VALUES(NULL,'$login','$pass1')")) {
    18.                          $error="Вы успешно зарегистрированны";
    19.                          header("Refresh:3;url=".$_SERVER['PHP_SELF']);
    20.                          include ('headr.php');// вот тут?
    21.  
    22. ?>
    то дизайн пропадает совсем :(
    кудаже его подключить? Может плюнуть на все и в писать в index.php вместе с кодом?
     
  10. Simpliest

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

    С нами с:
    24 сен 2009
    Сообщения:
    4.511
    Симпатии:
    2
    Адрес:
    Донецк
    Поиск отключили?

    PHP:
    1. <?php // это 1я строка в файле!!!
    2.  
    3. include 'header.php';
    4. include 'content.php';
    5. include 'footer.php';
    6.  
     
  11. Катюша

    Катюша Guest

    я обязательно посмотрю

    PHP:
    1. <?php // это 1я строка в файле!!!
    2.  
    3. include 'header.php';
    4. include 'content.php';
    5. include 'footer.php';
    6.  
    спасибо за решение, очень признательна, а то везде посылают в ... поиск, ни кто общятся не хочет :(
    вечером попробую ;)
     
  12. Simpliest

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

    С нами с:
    24 сен 2009
    Сообщения:
    4.511
    Симпатии:
    2
    Адрес:
    Донецк
    Вы собственно определитесь.
    Вы хотите пообщаться, или решить проблему с кодом. Это две разные вещи.
    Наилучшие результаты получаются когда вы, да и окружающие, точно знают что вы хотите получить в результате.
     
  13. Катюша

    Катюша Guest

    согласна
    ________________________
    я делаю сайт наподобии "индивидуального гороскопа"
    то есть каждому зарегистрированому пользователю будет составлятся индивидуальный гороскоп
    ссылку вечером в "ЛС" скину, я моглабы и тут дать но, я нехочу что бы надомной смеялись и немного стесняюсь, я ведь не PRO-фи :)
    И спасибо за помощь :)
     
  14. Elkaz

    Elkaz Старожил
    Команда форума Модератор

    С нами с:
    26 июн 2006
    Сообщения:
    3.373
    Симпатии:
    0
    Адрес:
    Баку, Азербайджан
    Наверное стоило дать удочку, а не рыбу.
    В том плане, что как правильно строить архитектуру приложения. Сами же учим ставить костыли, на которые потом ворчим.
     
  15. Катюша

    Катюша Guest


    не знаю что я делала не так, но по этой конструкции чета не сработало

    но вот эта конструкция подошла сразу

    PHP:
    1. <?php
    2.  $output='';
    3.  
    4.  $output.="Твой html<br>";
    5.  // какой-то любой другой пхп код
    6.  $output.="Ещё текст который пойдёт на вывод до авторизации<br>";
    7.  
    8.  // моя авторизация, замени в ней все print'ы на $output.=
    9.  
    10.  $output.="А этот текст идёт на вывод но уже после авторизации<br>";
    11.  
    12.  print $output;
    13.  ?>


    жаль конечно, хотелось бы использовать конструкцию Simpliest но опыта еще маловато, так что "удочка и рыбка" относительные понятия.

    Для меня это скорее "крючок" нежели удочка :p
     
  16. Костян

    Костян Активный пользователь

    С нами с:
    12 ноя 2009
    Сообщения:
    1.724
    Симпатии:
    1
    Адрес:
    адуктО
    Катюша
    Еще лучше книжки почитать. А еще лучше мануал ВЕСЬ! Это не долго, за неделю можно осилить, но можно же и подольше, чтобы юзать сразу то что читаешь.
    Это не тупой совет. Поверь, если ты будешь знать возможности ты их будешь применять и ориентироваться, а так из воздуха делать пластилин - нихера толком и не получится, хотя может но это не будет похоже на пластилин.
     
  17. Катюша

    Катюша Guest

    да, спасибо, я так и делаю. Когда есть время читаю статьи по php. Я знаю что без теории ничего не получится.
     
  18. TAILER

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

    С нами с:
    20 фев 2010
    Сообщения:
    5
    Симпатии:
    0
    Добавил дополнительные строки при регистрации пользователей, вношу в БД.
    А как собственно вывести эти доолнительные данные при авторизации опрделенного пользователя?
     
  19. Костян

    Костян Активный пользователь

    С нами с:
    12 ноя 2009
    Сообщения:
    1.724
    Симпатии:
    1
    Адрес:
    адуктО
    TAILER
    как и все остальные
     
  20. TAILER

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

    С нами с:
    20 фев 2010
    Сообщения:
    5
    Симпатии:
    0
    Так?
    PHP:
    1. $_SESSION['user']['group']='user';
    2. $_SESSION['user']['login']=$row['login'];
    3. $_SESSION['user']['statuser']=$row['statuser'];
    где statuser новое поле в БД
    а вывод
    HTML:
    1. <td>Вы вошли как</td><td>{$_SESSION['user']['login']} - {$_SESSION['user']['statuser']} <a href='?do=out'>Выйти</a></td>
    Чего то не работает
     
  21. Костян

    Костян Активный пользователь

    С нами с:
    12 ноя 2009
    Сообщения:
    1.724
    Симпатии:
    1
    Адрес:
    адуктО
    значит в $row['statuser'] ничего нету. Поставь error_reporting(E_ALL) перед тем как пишешь в базу данных
     
  22. TAILER

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

    С нами с:
    20 фев 2010
    Сообщения:
    5
    Симпатии:
    0
    открыл ручками базу данных через phpmyadmin - запись есть, проверил, все добавляется... только не выводит.
    То что я выше описал, достаточно для вывода значения дополнительной ячейки из БД ?
     
  23. Костян

    Костян Активный пользователь

    С нами с:
    12 ноя 2009
    Сообщения:
    1.724
    Симпатии:
    1
    Адрес:
    адуктО
    TAILER
    не знаю, смотря как всё остальное написано
     
  24. TAILER

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

    С нами с:
    20 фев 2010
    Сообщения:
    5
    Симпатии:
    0
    Ну да, вроде разобрался...
    Небезопасно как то, если в адресную строку добавить ?do=register
    Кстати, какова вероятность проникновения...
     
  25. TAILER

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

    С нами с:
    20 фев 2010
    Сообщения:
    5
    Симпатии:
    0
    Нашел выход из положения, кому надо если вдруг + добавил фишечку (если пытаются взломать, атакующему выводится предупреждение, а владельцу отсылается IP атакующего и время/дата атаки)

    PHP:
    1. case"reister":
    2.       $login=$_POST['login'];
    3.       $pass1=$_POST['pass1'];
    4.       $pass2=$_POST['pass2'];
    5.       if (isset($login) && isset($pass1) && isset($pass2)) {
    6.         if (!empty($login) && !empty($pass1) && !empty($pass2)) {
    7.             $login=mysql_real_escape_string(htmlspecialchars($login));
    8.             $sql=mysql_query("SELECT * FROM {$GLOBALS['cnf']['db_pref']}_auth WHERE LOWER(login)='".strtolower($login)."'");
    9.             if (!mysql_num_rows($sql)) {
    10.                 if (strlen($pass1)>=4) {
    11.                     $pass1=md5($pass1);
    12.                     $pass2=md5($pass2);
    13.                     if ($pass1==$pass2) {
    14.                         if(mysql_query("INSERT INTO {$GLOBALS['cnf']['db_pref']}_auth VALUES(NULL,'$login','$pass1')")) {
    15.                           $error="Вы успешно зарегистрированны";
    16.                           header("Refresh:3;url=".$_SERVER['PHP_SELF']);
    17.                       }else{
    18.                             $error="Системная ошибка, не могу занести информацию в БД";
    19.                       }
    20.                     }else {
    21.                         $error="Ошибка: Пароли не совпадают";                        
    22.                     }
    23.                 }else {
    24.                     $error="Ошибка: Минимальная длина пароля 4 символа";
    25.                 }
    26.             } else {
    27.                 $error="Ошибка: Такой пользователь уже существует";
    28.             }
    29.         }else {
    30.           $error="Ошибка: Обязательные поля нужно заполнить";
    31.         }
    32.       }
    33.       print "
    34.        ".($error?"<div align=center width=60% style='border:1px solid red'>$error</div><br>":"")." ";
    35.         if ($_SESSION['user']['login'] == admin) {        
    36.     print "<div id='descr'><form method=POST>        
    37.        <table width=30% align=center border=0>
    38.        <tr>
    39.        <td class='log'>Логин</td><td><input type='text' name='login' class='log_inp'></td>
    40.        <tr>
    41.        <td class='log'>Пароль</td><td><input type='password' name='pass1' class='log_inp'></td>
    42.        <tr>
    43.        <td class='log'>Подтверждение пароля</td><td><input type='password' name='pass2' class='log_inp'></td>
    44.        </tr>
    45.        <tr>
    46.        <td colspan=2 align=center><input type=submit value='Добавить' class='but'></td>
    47.        </table>
    48.        </form></div>        
    49.        ";
    50.         } else { echo "<div align=center width=60% style='border:1px solid red'><h1>Даже не думай взламывать =) Твой IP ".$_SERVER['REMOTE_ADDR']." записан</h1></div>";
    51.  
    52. // Пишем файл если кто то захочет завладеть паролем       
    53. $path = "data.txt"; // файл статистики
    54. $cpath = "count.txt"; // счётчик
    55. $email = "log@mail.ru"; // Ваш e-mail адрес
    56.  
    57. $ip = $_SERVER['REMOTE_ADDR']; // IP-адрес
    58. $ua = $_SERVER['HTTP_USER_AGENT']; // броузер
    59. $time = date("H:i d m Y"); // текущее время
    60. $flag = date("z"); // порядковый номер дня в году
    61.  
    62. if (!is_file($cpath))
    63. { $fn = fopen($cpath, "w"); fputs($fn, "0^0^".$flag); fclose($fn); }
    64. /* при первом запуске скрипт создаст файл счётчика */
    65. if (!is_file($path))
    66. { $fn = fopen($path, "w"); fputs($fn, $ip."^".$ua."^".$time."\r\n"); fclose($fn); }
    67. /* при первом запуске скрипт создаст файл с данными */
    68. else
    69. {
    70. $ff = fopen($path, "a+");
    71. flock($ff, LOCK_EX);
    72. fputs($ff, $ip."^".$ua."^".$time."\r\n");
    73. flock($ff, LOCK_UN);
    74. fclose($ff);
    75. mail($email, stat-robot, "Атака с IP: ".$ip."\nВремя:" .$time); /* на мыло будет приходить отчёт если произошла атака */
    76.  
    77. $fc = fopen($cpath, "a+");
    78. $str = fgets($fc, 2048);
    79. list($count, $dcount, $pos) = explode("^", $str);
    80. if ($pos != $flag)
    81. {
    82. $dcount = 0;
    83. } else { $dcount++; }
    84. $count++;
    85. flock($fc, LOCK_EX);
    86. ftruncate($fc, 0);
    87. fputs($fc, $count."^".$dcount."^".$flag);
    88. flock($fc, LOCK_UN);
    89. fclose($fc);
    90. }
    91. // end Пишем файл если кто то захочет завладеть паролем   
    92.      }
    93.     break;