За последние 24 часа нас посетили 22820 программистов и 1223 робота. Сейчас ищут 770 программистов ...

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

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

  1. Sofia

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

    С нами с:
    25 сен 2008
    Сообщения:
    963
    Симпатии:
    2
    чувствую на форуме завтра пирожки бесплатно раздавать будут :) в честь моей геройской гибели... Пока результатов нет.
     
  2. kostyl

    kostyl Guest

    Sofia
    думаю проще показать свой код и добрые люди, а они тут где то есть, тебе помогут
     
  3. Mr.M.I.T.

    Mr.M.I.T. Старожил

    С нами с:
    28 янв 2008
    Сообщения:
    4.586
    Симпатии:
    1
    Адрес:
    у тебя канфетка?
    Хайт! тебя зовут
     
  4. Hight

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

    С нами с:
    5 мар 2006
    Сообщения:
    7.153
    Симпатии:
    0
    Адрес:
    из злой параллельной вселенной
    Mr.M.I.T.
    не не не, меня нет
     
  5. Sofia

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

    С нами с:
    25 сен 2008
    Сообщения:
    963
    Симпатии:
    2
    Вот код авторизации:
    PHP:
    1. <?php
    2.  $error=false;
    3.  $_SESSION['mail']=!$_SESSION['mail']?array('group'=>"guest"):$_SESSION['mail'];
    4.  
    5.  
    6. mysql_connect('localhost','test5','pass') or die(mysql_error());
    7. mysql_query('SET NAMES cp1251');
    8.  
    9. if ($_SESSION['user']['group']=='guest') {
    10.    $_COOKIE['save']=$_COOKIE['save']?unserialize($_COOKIE['save']):"";
    11.    $mail=!$_COOKIE['save']['mail'] || isset($_POST['mail'])?$_POST['mail']:$_COOKIE['save']['mail'];
    12.    $pass=!$_COOKIE['save']['pass'] || isset($_POST['pass'])?$_POST['pass']:$_COOKIE['save']['pass'];
    13.    if (isset($mail) && isset($pass)) {
    14.        if (!empty($mail) && !empty($pass)) {
    15.            if (!$_COOKIE['save']['pass'] || isset($_POST['pass']))
    16.            $mail=mysql_real_escape_string(htmlspecialchars($mail));
    17.            $sql=mysql_query("SELECT * FROM users WHERE LOWER(mail)='".strtolower($mail)."'");
    18.            if (mysql_num_rows($sql)) {
    19.                $row=mysql_fetch_assoc($sql);
    20.                if ($row['pass']==$pass) {
    21.                    $_SESSION['user']['group']='user';
    22.                    $_SESSION['user']['mail']=$row['mail'];
    23.                    if (!headers_sent() && $_POST['save']) {
    24.                        $cook=array();
    25.                        $cook['pass']=$pass;
    26.                        $cook['mail']=$row['mail'];
    27.                        setcookie("save",serialize($cook),time()+99999,'/');
    28.                    }
    29.                }else {
    30.                  $error="Ошибка: Неверный Пароль";
    31.                }
    32.            }else {
    33.              $error="Ошибка: Такого Пользователя не существует";
    34.            }
    35.        }else {
    36.          $error="Ошибка: Обязательные поля нужно заполнить";
    37.      }
    38.      }
    39.    }
    40.    if ($_SESSION['user']['group']=='guest') {
    41.    print "
    42.   ".($error?"<div align=center width=60% style='border:1px solid red'>$error</div><br>":"")."
    43.   <form method=POST>
    44.   <table width=30% align=center border=1>
    45.   <tr>
    46.   <td>mail</td><td><input type='text' name='mail'></td>
    47.   <tr>
    48.   <td>Pass</td><td><input type='password' name='pass'></td>
    49.   <tr>
    50.   <td>Запомнить?</td><td><input type='checkbox' name='save' value='1'></td>
    51.   <tr>
    52.   <td colspan=2><a href='?do=register'>Регистрация</a></td>
    53.   <tr>
    54.   <td colspan=2 align=center><input type=submit value='Войти'></td>
    55.   </table>
    56.   </form>
    57.   ";
    58.    }else {
    59.    print "
    60.   <table width=30% align=center border=1>
    61.   <tr>
    62.   <td>Вы вошли как</td><td>{$_SESSION['mail']} <a href='2.php?do=out'>Выйти</a></td>
    63.   </table>
    64.   ";
    65.    }
    66.  ?>
    Ошибка: Warning: mysql_num_rows(): supplied argument is not a valid MySQL result resource
    в 22 строке:

    if (mysql_num_rows($sql)) {

    что не так? :?
     
  6. [vs]

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

    С нами с:
    27 сен 2007
    Сообщения:
    10.553
    Симпатии:
    631
    Sofia
    Алгоритм работы с БД MySQL такой:
    PHP:
    1. <?php
    2. // Подключение к MySQL
    3. mysql_connect('host', 'user', 'pass');
    4. // Выбор нужной базы данных
    5. mysql_select_db('database');
    6. // Установка кодировки
    7. mysql_query('SET NAMES encode');
    8. // Составление запр
    9. $sql = 'SELECT * FROM `table`';
    10. // Отправка запроса - получение ресурса с результатом запроса
    11. $result = mysql_query($sql);
    12. // Извлечение нужных данных из результата запроса
    13. $array = mysql_fetch_assoc($result); // Например.
    У тебя пропущен пятый пункт. Кстати, полезно переводить тексты ошибок: "Внимание: mysql_num_rows(): переданый аргумент это не правильный ресурс результата MySQL.
     
  7. Sofia

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

    С нами с:
    25 сен 2008
    Сообщения:
    963
    Симпатии:
    2
    [vs] да нет, вроде на месте:
    mysql_select_db('test') or die(mysql_error());
    5 пункт у меня в 9 строке.
     
  8. [vs]

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

    С нами с:
    27 сен 2007
    Сообщения:
    10.553
    Симпатии:
    631
    Неа, пятный пункт это
    Если результат запроса неверный, значит в самом запросе ошибка. Вставь после mysql_query
    PHP:
     
  9. Sofia

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

    С нами с:
    25 сен 2008
    Сообщения:
    963
    Симпатии:
    2
    [vs]
    к сожалению только дома могу попробовать, вечером, как приеду.
     
  10. kostyl

    kostyl Guest

    [vs]
    Так вот кто ты, добрый человек. То-то я смотрю лицо у тебя доброжелательной такое. ))
     
  11. Mr.M.I.T.

    Mr.M.I.T. Старожил

    С нами с:
    28 янв 2008
    Сообщения:
    4.586
    Симпатии:
    1
    Адрес:
    у тебя канфетка?
    на
    $sql=mysql_query("SELECT * FROM users WHERE LOWER(mail)='".strtolower($mail)."'") or die(mysql_error());
     
  12. Sofia

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

    С нами с:
    25 сен 2008
    Сообщения:
    963
    Симпатии:
    2
    Установила на время денвер, ато время жмет :?

    Открыла страницу, а у меня на странице:
    Вы вошли как Array Выйти

    и кнопка выйти не работает, а должна.. как быть? :(
     
  13. Elkaz

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

    С нами с:
    26 июн 2006
    Сообщения:
    3.373
    Симпатии:
    0
    Адрес:
    Баку, Азербайджан
    PHP:
    1.  
    2. <?php
    3. $sql=mysql_query("SELECT * FROM {$GLOBALS['cnf']['db_pref']}_auth WHERE LOWER(login)='".strtolower($login)."' LIMIT 1");
    4.             if (mysql_num_rows($sql) == 1) {
    5.  
     
  14. Sofia

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

    С нами с:
    25 сен 2008
    Сообщения:
    963
    Симпатии:
    2
    Elkaz
    спс, попробовать только не могу... кука застряла :) выйти не могу из страницы.

    PHP:
    1. <?php
    2.   $error=false;
    3.   $_SESSION['mail']=!$_SESSION['mail']?array('group'=>"guest"):$_SESSION['mail'];
    4.  
    5.  
    6.  mysql_connect('localhost','test5','pass') or die(mysql_error());
    7.  mysql_select_db('test') or die(mysql_error());
    8.  mysql_query('SET NAMES cp1251');
    9.  
    10. switch($do) {
    11.    case"out":
    12.      unset($_SESSION['mail']);
    13.      session_destroy();
    14.      if (!headers_sent()) {
    15.            setcookie("save",'',time()+99999,'/');
    16.      }
    17.      
    18.  
    19. header("Location:".($_SERVER['HTTP_REFERER']?$_SERVER['HTTP_REFERER']:$_SERVER['PHP_SELF']))
    20.  
    21. ;
    22.    break;
    23. default:
    24.  
    25.  
    26.  if ($_SESSION['user']['group']=='guest') {
    27.    $_COOKIE['save']=$_COOKIE['save']?unserialize($_COOKIE['save']):"";
    28.    $mail=!$_COOKIE['save']['mail'] ||
    29.  
    30. isset($_POST['mail'])?$_POST['mail']:$_COOKIE['save']['mail'];
    31.    $pass=!$_COOKIE['save']['pass'] ||
    32.  
    33. isset($_POST['pass'])?$_POST['pass']:$_COOKIE['save']['pass'];
    34.    if (isset($mail) && isset($pass)) {
    35.        if (!empty($mail) && !empty($pass)) {
    36.            if (!$_COOKIE['save']['pass'] || isset($_POST['pass']))
    37.            $mail=mysql_real_escape_string(htmlspecialchars($mail));
    38.            $sql=mysql_query("SELECT * FROM users WHERE
    39.  
    40. LOWER(mail)='".strtolower($mail)."'")or die(mysql_error());
    41.            if (mysql_num_rows($sql)) {
    42.                $row=mysql_fetch_assoc($sql);
    43.                if ($row['pass']==$pass) {
    44.                    $_SESSION['user']['group']='user';
    45.                    $_SESSION['user']['mail']=$row['mail'];
    46.                    if (!headers_sent() && $_POST['save']) {
    47.                        $cook=array();
    48.                        $cook['pass']=$pass;
    49.                        $cook['mail']=$row['mail'];
    50.                        setcookie("save",serialize($cook),time()+99999,'/');
    51.                    }
    52.                }else {
    53.                  $error="Ошибка: Неверный Пароль";
    54.                }
    55.            }else {
    56.              $error="Ошибка: Такого Пользователя не существует";
    57.            }
    58.        }else {
    59.          $error="Ошибка: Обязательные поля нужно заполнить";
    60.      }
    61.      }
    62.    }
    63.    if ($_SESSION['user']['group']=='guest') {
    64.    print "
    65.   ".($error?"<div align=center width=60% style='border:1px solid
    66.  
    67. red'>$error</div><br>":"")."
    68.   <form method=POST>
    69.   <table width=30% align=center border=1>
    70.   <tr>
    71.   <td>mail</td><td><input type='text' name='mail'></td>
    72.   <tr>
    73.   <td>Pass</td><td><input type='password' name='pass'></td>
    74.   <tr>
    75.   <td>Запомнить?</td><td><input type='checkbox' name='save' value='1'></td>
    76.   <tr>
    77.   <td colspan=2><a href='?do=register'>Регистрация</a></td>
    78.   <tr>
    79.   <td colspan=2 align=center><input type=submit value='Войти'></td>
    80.   </table>
    81.   </form>
    82.   ";
    83.    }else {
    84.    print "
    85.   <table width=30% align=center border=1>
    86.   <tr>
    87.   <td>Вы вошли как</td><td>{$_SESSION['mail']} <a href='2.php?do=out'>Выйти</a></td>
    88.   </table>
    89.   ";
    90.    }
    91. }
    92.   ?>
     
  15. Elkaz

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

    С нами с:
    26 июн 2006
    Сообщения:
    3.373
    Симпатии:
    0
    Адрес:
    Баку, Азербайджан
    Sofia
    перед switch var_dump($do);
     
  16. Elkaz

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

    С нами с:
    26 июн 2006
    Сообщения:
    3.373
    Симпатии:
    0
    Адрес:
    Баку, Азербайджан
    Sofia
    Чтобы убить куку где-нибудь в начале скрипта напиши (после session_start)

    unset ($_SESSION['mail']);
    session_destroy();
    setcookie('save', '');
    exit;

    А MrMIT извращенец :)
     
  17. Sofia

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

    С нами с:
    25 сен 2008
    Сообщения:
    963
    Симпатии:
    2
    Elkaz
    поставила:
    PHP:
    1. ...
    2. var_dump($do);
    3. switch($do) {
    4. ...
    5.  
    результат на странице выведен: NULL
     
  18. kostyl

    kostyl Guest

    куку можно в браузере убить самому, если это тебе надо.
     
  19. Mr.M.I.T.

    Mr.M.I.T. Старожил

    С нами с:
    28 янв 2008
    Сообщения:
    4.586
    Симпатии:
    1
    Адрес:
    у тебя канфетка?
    сам извращенец, там уник на логине стоит ;)
     
  20. Mr.M.I.T.

    Mr.M.I.T. Старожил

    С нами с:
    28 янв 2008
    Сообщения:
    4.586
    Симпатии:
    1
    Адрес:
    у тебя канфетка?
    блин, да напиши ты САМА! это пример
    switch($_GET['do'])
     
  21. AMБАЛ

    AMБАЛ Активный пользователь

    С нами с:
    18 янв 2010
    Сообщения:
    11
    Симпатии:
    1

    СПАСИБО ВАМ ОГРОМНОЕ!!!!!!!!!!!!!


    Я просто в а.уе!!!!! еб...ся с php регистрацией два месяца, перелопатил,
    сайтов хеуву тучу, везде пи..дасы у друг дружки пи..дят, сами ни х.я не шарат,
    и ни..уя толком не работает!!!!! из двух десятков скриптов ваш ВАШ СКРИПТ ЗАРАБОТАЛ С ПЕРВОГО РАЗА ИДЕАЛЬНО!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
    просто пи.дец,
    извини за мат, меня просто расперает от счастья у меня теперь будет ах..уенная регистрация!!!!!!!!!!!!!!!!!!!!!

    СПАСИБО!!!!!!!!!!!
     
    daur нравится это.
  22. Sofia

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

    С нами с:
    25 сен 2008
    Сообщения:
    963
    Симпатии:
    2
    мда... сколько человеку надо для счастья :)
     
  23. Костян

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

    С нами с:
    12 ноя 2009
    Сообщения:
    1.724
    Симпатии:
    1
    Адрес:
    адуктО
    AMБАЛ
    конечно, это же самый крутой форум по php во всем интернете после php.net
     
  24. Катюша

    Катюша Guest

    мне тоже понравился этот скрипт, спасибо :)
     
  25. Simpliest

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

    С нами с:
    24 сен 2009
    Сообщения:
    4.511
    Симпатии:
    2
    Адрес:
    Донецк
    ну так функцию md5() и уберите