За последние 24 часа нас посетили 16507 программистов и 1677 роботов. Сейчас ищут 887 программистов ...

Header, хэш, база данных...

Тема в разделе "PHP для новичков", создана пользователем Web, 30 окт 2016.

  1. Web

    Web Новичок

    С нами с:
    21 окт 2016
    Сообщения:
    30
    Симпатии:
    1
    Здравствуйте ! Помогите разобраться как поставить setcookie и header (Location) в середину или конец кода (если конечно такое возможно !). Правильно ли у меня сделана система хэширования ? Ну и наконец помогите разобраться как заносить хэш и ip в базу данных (знаю что это легко, но т.к. я новичок в этом деле, я уже запутался...).
    PHP:
    1. <?php
    2. setcookie("id", $myrow['id'], time()+60*60*24*30);
    3. setcookie("hash", $hash, time()+60*60*24*30);
    4. //--
    5. if (isset($_POST['loginlog'])) {
    6.     $login = $_POST['loginlog'];  
    7. }
    8. if ($login == '') {
    9.     unset($login);
    10. }
    11. if(isset($_POST['passwordlog'])) {
    12.     $password = $_POST['passwordlog'];
    13. }
    14. if ($password == '') {
    15.     unset($password);
    16. }
    17. //--
    18. if (empty($login) or empty ($password)) {
    19.     $error400 = true;
    20. }
    21. //--random line
    22. function generateCode ($length = 6){
    23.     $chars = "abcdefghijklmnopqrstuvwxyzABCDFGHIJKLMOPQRSTUVWXYZ0123456789";
    24.     $code = "";
    25.     $clean = strlen($chars) - 1;
    26.     while (strlen($code) < $length){
    27.         $code .= $chars[mt_rand(0,$clean)];
    28.     }
    29. return $code;
    30. }
    31. //--
    32. $login = stripslashes($login);
    33. $login = htmlspecialchars($login);
    34. $password =  stripslashes($password);
    35. $password = htmlspecialchars($password);
    36. //--
    37. $login = trim($login);
    38. $password = trim($password);
    39. //--
    40. include ("bd.php");
    41. //--
    42. $result = mysql_query("SELECT * FROM userg WHERE login='$login'",$db);
    43. $myrow = mysql_fetch_array($result);
    44. //--
    45. if (empty($myrow['password'])) {
    46.     $error404 = true;
    47. }
    48. if ($myrow['password'] === md5(md5($password))) {
    49.     $hash = md5(generateCode(10));
    50.     $ip = ", user_ip=INET_ATON('".$_SERVER['REMOTE_ADDR']."')";
    51.     mysql_query("UPDATE users SET user_hash='".$hash."' ".$ip." WHERE id='".$myrow['id']."'");
    52. }
    53. else {
    54.     $error401 = true;
    55. }
    56. //--
    57. ?>
     
  2. denis01

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

    С нами с:
    9 дек 2014
    Сообщения:
    12.227
    Симпатии:
    1.714
    Адрес:
    Молдова, г.Кишинёв
    Читай книги по HTML, PHP, MySQL для новичков, там это есть с основами. http://www.ozon.ru/context/detail/id/137538198/

    Возможно, include там для примера, можно и без него, главное понять логику, что весь вывод можно собрать в переменную, а потом уже в конце когда все заголовки отправлены, можно и вывод сделать https://php.ru/forum/threads/file_get_contents-proisxodit-redirekt-na-glavnuju.59169/#post-476516

    Нет, сейчас можно и безопаснее https://habrahabr.ru/post/194972/
    md5 старый и не надёжный.

    Не надо так делать, пусть в базе будет оригинал, а вот при выводе на странице, уже можно htmlspecialchars применять.

    Тут сразу две ошибки:
    1. mysql_* функции в PHP7 удалили, используй mysqli_* или PDO.
    2. Ты не фильтруешь $login, не поможет htmlspecialchars, надо использовать подготовленные запросы или специальные метода
    https://secure.php.net/manual/ru/mysqli.real-escape-string.php
    https://secure.php.net/manual/ru/mysqli.prepare.php
    https://secure.php.net/manual/ru/pdostatement.execute.php

    Зачем в cookie записывать хэш?
     
  3. Web

    Web Новичок

    С нами с:
    21 окт 2016
    Сообщения:
    30
    Симпатии:
    1
    1. Хорошо, постараюсь разобраться с этим.
    2. Это пока что временный вариант.
    3. Вы имеете ввиду вывод на страницу например через echo ?
    4. У меня вообще путаница возникает с этой базой данных... Непривычный синтаксис (для меня) запросов и в целом общения с ней (непривычный потому что особо не изучал эту тему, пока PHP и всё-такое).
    5. Ответ прост ! Я бы назвал это "списал" , до этого была самая простая регистрация, но мне показалось, что надо сделать всё "по-красоте", ну и я случайно наткнулся на статью (https://habrahabr.ru/post/13726/) и решил попробовать сделать. Начал смотреть этот код и вникать что, да зачем, и что-то делать по-своему, но как видите даже смотря на чужой код наляпал ошибок.
    Спасибо вам огромное за критику и советы !!!
     
  4. denis01

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

    С нами с:
    9 дек 2014
    Сообщения:
    12.227
    Симпатии:
    1.714
    Адрес:
    Молдова, г.Кишинёв
    будет что-то не понятно, то спрашивай.

    На счёт той статьи, ей почти 10 лет, не стоит по ней что-то делать.
    Лучше книги для начинающих и задавай тут вопросы.
     
    Web нравится это.