ФорумПрограммированиеПыхнуть хотите?F.A.Q. → Авторизация пользователей в полном смысле этого слова.

Авторизация пользователей в полном смысле этого слова.

  • XoxMa

    Сообщения: 135 Репутация: N Группа: Кто попало

    Spritz Март 12, 2008, 11:37 п.п., спустя 49 минут 16 секунд

    О, спасибо, наконец-то заработало..

    Хех, у меня ещё одна проблемка, и я даже не знаю, когда смогу сам их решать.
    Я пытался сделать так, что если пользователь неправильно ввёл ещё раз пароль, то у него возникает ошибка, что пароли неправильно введены при регистрации - это $password и $xpassword.
    Но у меня в любых случаях возникает эта ошибка. Что у меня не так?

    <?php
    session_start();
    if (empty($_POST))
    {
    ?>

    <h3>Введи Ваши данные</h3>
    <form action="register.php" method="post">
    <table>
    <tr>
    <td>Логин:</td>
    <td><input type="text" name="login" /></td>
    </tr>
    <tr>
    <td>Пароль:</td>
    <td><input type="password" name="password" /></td>
    </tr>
    <tr>
    <td>Повтор пароля:</td>
    <td><input type="password" name="xpassword" /></td>
    </tr>
    <tr>
    <td></td>
    <td><input type="submit" value="Зарегистрироваться" /></td>
    </tr>
    </table>
    </form>

    <?php
    }
    else
    {
    // обрабатывае пришедшие данные функцией mysql_real_escape_string перед вставкой в таблицу Ѕƒ
    $login = (isset($_POST['login'])) ? mysql_real_escape_string($_POST['login']) : '';
    $password = (isset($_POST['password'])) ? mysql_real_escape_string($_POST['password']) : '';

    // провер€ем на наличие ошибок (например, длина логина и парол€)
    $error = false;
    $errort = '';

    if (trim($password != $xpassword))
    {
    $error = true;
    $errort .= "ѕароли не совпадают";
    }

    // если ошибок нет, то добавл€ем юзаре в таблицу
    if (!$error)
    {
    // генерируем соль и пароль
    $salt = GenerateSalt();
    $hashed_password = md5(md5($password) . $salt);

    $query = "INSERT
    INTO `".$prefix."_users`
    SET
    `login`='{$login}',
    `password`='{$hashed_password}',
    `salt`='{$salt}'";
    $sql = mysql_query($query) or die(mysql_error());

    print '<h4>ѕоздравл€ем, ¬ы успешно зарегистрированы!</h4><a href="index.php?page=login">јвторизоватьс€</a>';
    }
    else
    {
    print '<h4>¬озникли следующие ошибки</h4>' . $errort;
    }
    }
    ?>


  • md5

    Сообщения: 11960 Репутация: N Группа: в ухо

    Spritz Март 12, 2008, 11:39 п.п., спустя 2 минуты 27 секунд

    if (trim($password != $xpassword))

    че за бред?
    расскажи пошагово как это работает и сам поймёш где ошибка
    все умрут, а я изумруд
  • XoxMa

    Сообщения: 135 Репутация: N Группа: Кто попало

    Spritz Март 12, 2008, 11:45 п.п., спустя 5 минут 55 секунд

    Всё равно, если я уберу trim, то ошибка выскакивает.
  • XoxMa

    Сообщения: 135 Репутация: N Группа: Кто попало

    Spritz Март 12, 2008, 11:48 п.п., спустя 3 минуты 8 секунд

    Всё! Понял. Надо было сделать так:
    if ($_POST['password'] != $_POST['xpassword'])
  • XoxMa

    Сообщения: 135 Репутация: N Группа: Кто попало

    Spritz Март 17, 2008, 7:35 п.п., спустя 4 дня 19 часов 47 минут

    Кстати, md5, а как сделать, чтобы когда я набирал так http://мой_сайт.ru/id1, где id1 - это id пользователя, который зарегистрировался раньше всех, то будет показана какая-либо информация об этом номере, например что под id1 находится ник XoxMa ? :D

    У меня получилась только такая вещь, но я не знаю как в адресной строке прописать номер id:

    $ath = mysql_query("SELECT * FROM `users` WHERE `id`=$id");
    if ($ath)
    {
    $user = mysql_fetch_array($ath);
    echo "e-mail: ".$user['name'];
    }

    ___________________________________________________________

    Всё, разобрался)
  • XoxMa

    Сообщения: 135 Репутация: N Группа: Кто попало

    Spritz Март 20, 2008, 5:33 п.п., спустя 2 дня 21 час 57 минут

    Какой нужно сделать запрос, чтобы на страничку выводилось сколько всего пользователей в бд? то есть последний id.
    И что значит LIMIT 1 (при запросе к mysql)? Я искал в инете, но не нашёл точного ответа)
    Как можно определить, когда пользователь зарегин? Я думаю, что нужно создать в бд в таблице колонку date, но я не знаю, как дата будет сохраняться..
  • md5

    Сообщения: 11960 Репутация: N Группа: в ухо

    Spritz Март 20, 2008, 6:03 п.п., спустя 30 минут 19 секунд

    Какой нужно сделать запрос, чтобы на страничку выводилось сколько всего пользователей в бд?

    SELECT COUNT(*)

    то есть последний id.

    а зачем тебе последний id?

    И что значит LIMIT 1 (при запросе к mysql)? Я искал в инете, но не нашёл точного ответа)

    http://www.mysql.ru/docs/man/SELECT.html

    Как можно определить, когда пользователь зарегин? Я думаю, что нужно создать в бд в таблице колонку date, но я не знаю, как дата будет сохраняться..

    да, можно колонку с типом DATE и при регистрации `date`=NOW()
    все умрут, а я изумруд
  • XoxMa

    Сообщения: 135 Репутация: N Группа: Кто попало

    Spritz Март 30, 2008, 10:09 п.п., спустя 10 дней 3 часа 5 минут

    Никак не получается.
    Предположим, у меня есть таблица в бд с колонками id, login и pass.
    Какой нужно сделать запрос, чтобы изменить login и pass, а id определяется установлена ли сессия.

    То есть например я зашёл под своим логином с id=3 и меняю свой login и pass. Мне нужно чтобы в колонку с id=3 записался новый login и pass.

    То, что я смог смастерить, но появляется ошибка:

    $query = "INSERT
    INTO `users`
    (`id`, `login`, `pass`)
    VALUES
    `login`='{$login}',
    `pass`='{$pass}'
    WHERE `id`='{$_SESSION['user_id']}'";

    ___________________________________________________

    Всё, разобрался. Надо было написать UPDATE и SET
  • XoxMa

    Сообщения: 135 Репутация: N Группа: Кто попало

    Spritz Март 30, 2008, 11:31 п.п., спустя 1 час 22 минуты 12 секунд

    да, можно колонку с типом DATE и при регистрации `date`=NOW()

    А как задать формат времени? То есть чтобы в mysql время сохранялось в том виде, в котором я хочу.
    Пытался сделать что-то наподобии $today = date("d.m.Y"); и `date`='{$today}'; , но не вышло.
  • AlexB

    Сообщения: 4306 Репутация: N Группа: в ухо

    Spritz Март 31, 2008, 12:27 д.п., спустя 55 минут 45 секунд


    То есть чтобы в mysql время сохранялось в том виде, в котором я хочу.
    Оно хранится во внутреннем формате mysql. Задавать формат надо при извлечении из базы, а не при сохранении. На то в мускуле есть функция DATE_FORMAT.
  • XoxMa

    Сообщения: 135 Репутация: N Группа: Кто попало

    Spritz Апрель 5, 2008, 10:27 п.п., спустя 5 дней 21 час 59 минут

    А если пользователь забыл пароль, то что нам делать? Мы ведь не будем посылать ему пароль в виде md5?
  • mechanic

    Сообщения: 125 Репутация: N Группа: Кто попало

    Spritz Апрель 5, 2008, 10:50 п.п., спустя 23 минуты 15 секунд

    можно спросить у пользователя, какой он хотел бы пароль, и послать ему на мыло спецлинк, при переходе по которому система распознает юзера и обновит ему пароль..
    или другой вариант, послать на мыло ссылку, перейдя по которой, юзер автоматом авторизуется и дальше уже сможет обновить себе пароль в ЛК сам
  • md5

    Сообщения: 11960 Репутация: N Группа: в ухо

    Spritz Апрель 5, 2008, 10:57 п.п., спустя 6 минут 39 секунд

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

    Сообщения: 135 Репутация: N Группа: Кто попало

    Spritz Апрель 5, 2008, 11:19 п.п., спустя 21 минуту 44 секунды

    Значит получается, что на тех сайтах, где высылается пароль в нормальном виде - там нету никакого md5? И значит админ сайта может посмотреть все пароли?
  • md5

    Сообщения: 11960 Репутация: N Группа: в ухо

    Spritz Апрель 5, 2008, 11:33 п.п., спустя 14 минут 14 секунд

    да, да, да
    хули не ясно?
    не может же он расхешировать md5. нету такого. с пальца ему высосать чтоли?
    конечно значит не хешируется пароль а кладется в первозданном виде
    все умрут, а я изумруд

Пожалуйста, авторизуйтесь, чтобы написать комментарий!