За последние 24 часа нас посетили 20560 программистов и 1103 робота. Сейчас ищут 780 программистов ...

Проблема с аутентификацией, либо я рукожоп не умеющий списать код, либо я рукожоп

Тема в разделе "Прочие вопросы по PHP", создана пользователем Vadim_2020, 17 янв 2020.

  1. Vadim_2020

    Vadim_2020 Новичок

    С нами с:
    17 янв 2020
    Сообщения:
    2
    Симпатии:
    0
    Файл создания таблицы
    PHP:
    1. <?php
    2. function add_user($connection, $fn, $sn, $un, $pw)
    3. {
    4. $stmt = $connection->prepare('INSERTINTO users VALUES(?,?,?,?)');
    5. $stmt->bind_param('ssss', $fn , $sn, $un, $pw);
    6. $stmt->execute();
    7. $stmt->close();
    8. }
    9.  
    10. require_once 'login.php';
    11. $connection = new mysqli($hn, $un, $pw, $db);
    12. if ($connection->connect_error) die('Fatal Error');
    13.  
    14. $query = 'CREATETABLE users(
    15. forename VARCHAR(32) NOTNULL,
    16. surname VARCHAR(32) NOTNULL,
    17. username VARCHAR(32) NOTNULL UNIQUE,
    18. passwordVARCHAR(32) NOTNULL
    19. )';
    20.  
    21. $result = $connection->query($query);
    22. if (!$result) die('Fatal Error');
    23.  
    24. $forename = 'Bill';
    25. $surname = 'Smith';
    26. $username = 'bsmith';
    27. $password = 'mysecret';
    28. $hash = password_hash($password, PASSWORD_DEFAULT);
    29.  
    30. add_user($connection, $forename, $surname, $username, $hash);
    31.  
    32.  
    33. ?>
    Файл аутентификации
    PHP:
    1. <?php
    2. require_once 'login.php';
    3. $connection = new mysqli($hn, $un, $pw, $db);
    4.  
    5. if ($connection->connect_error) die("Fatal Error");
    6.  
    7. if (isset($_SERVER['PHP_AUTH_USER']) &&
    8. isset($_SERVER['PHP_AUTH_PW']))
    9. {
    10. $un_temp = mysql_entities_fix_string($connection, $_SERVER['PHP_AUTH_USER']);
    11. $pw_temp = mysql_entities_fix_string($connection, $_SERVER['PHP_AUTH_PW']);
    12. $query = "SELECT*FROM users WHERE username='$un_temp'";
    13. $result = $connection->query($query);
    14.  
    15. if (!$result) die("Пользователь не найден");
    16.  
    17. elseif ($result->num_rows)
    18. {
    19. $row = $result->fetch_array(MYSQLI_NUM);
    20.  
    21. $result->close();
    22. if (password_verify($pw_temp, $row[3])) echo
    23. htmlspecialchars("$row[0] $row[1]:
    24. Hi $row[0], you are now logged in as '$row[2]'");
    25. else die("Неверная комбинация имя пользователя - пароль1");
    26. }
    27. else die("Неверная комбинация имя пользователь - пароль2");
    28. }
    29. else
    30. {
    31. header('WWW-Authenticate: Basic realm="Restricted Area"');
    32. header('HTTP/1.0 401 Unauthorized');
    33. die ("Пожалуйста, введите имя пользователя и пароль");
    34. }
    35. $connection->close();
    36.  
    37. function mysql_fix_string($connection, $string)
    38. {
    39. {
    40. $string = stripslashes($string);
    41. return $connection->real_escape_string($string);
    42. }
    43. }
    44.  
    45. function mysql_entities_fix_string($connection, $string)
    46. {
    47. return htmlentities(mysql_fix_string($connection, $string));
    48. }
    49. ?>
    Проблема заключается в том, что бы я не вводил он выводит "Неверная комбинация имя пользователь - пароль2"
    Верно ввожу с таблицы users значения, все равно тоже самое.
    Если что примеры с книги.
    Либо что - то с таблицей, я запутался
     
    #1 Vadim_2020, 17 янв 2020
    Последнее редактирование модератором: 17 янв 2020
  2. artoodetoo

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

    С нами с:
    11 июн 2010
    Сообщения:
    11.068
    Симпатии:
    1.231
    Адрес:
    там-сям
    Пожалуйста оформляй код на форуме в ббкоды [php] ... [/php]
    на первый раз я сделал это за тебя.

    --- Добавлено ---
    Код из каких-то древних источников взят: расширение php_mysql давно мертво, magic quotes тоже. Это невозможно запустить на современной версии PHP, может в этом проблема?

    Чо пишет-то? Где описание ошибки? Отлаживай: http://phpfaq.ru/debug
    --- Добавлено ---
    Глаз можно сломать об код без отступов. Вот к чему относится тот else где "пароль2" — я не вижу.

    Ты мог бы узнать больше, если бы временно вставлял отладку вроде die($query);
    Я уж не говорю про xdebug
     
    Roman __construct нравится это.
  3. Vadim_2020

    Vadim_2020 Новичок

    С нами с:
    17 янв 2020
    Сообщения:
    2
    Симпатии:
    0
    Спасибо,ошибок он не выдает. Не выполняет код в блоке (elseif($result->num_rows))
    Не могли бы вы скинуть документацию или ресурсы
    --- Добавлено ---
    Я понимаю, что есть ошибки и их много.Если Вас не затруднит, можно скинуть документацию на источники свежие. Отступы там присутствуют. Я же не великий программист как Вы.
     
  4. Roman __construct

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

    С нами с:
    27 апр 2019
    Сообщения:
    1.270
    Симпатии:
    112
    Вадим, велком ту рукожопп-форум!))))

    Смотри суть:

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

    Присоединяюсь к рекомендациям Артудиту. Учись отладке, изучай инструментарий отладки. Это очень быстро а эффект - огромный.
     
  5. artoodetoo

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

    С нами с:
    11 июн 2010
    Сообщения:
    11.068
    Симпатии:
    1.231
    Адрес:
    там-сям
    php.net

    чтобы понять что искать, надо больше узнать про ошибку. для этого отлаживай. ссылку я дал.
    я, как великий программист, не могу читать код без отступов. и я не смогу его запустить на моём php, ибо он не совместим. на самом деле не знаю, вижу упоминается mysql, но всё прочесть не могу.
    сорри!
    --- Добавлено ---
    вот да! это прямо в самую мякотку!
    --- Добавлено ---
    @Vadim_2020 мне кажется ты накосячил с блоками { }. начни с отступов, а там видно будет
     
    #5 artoodetoo, 17 янв 2020
    Последнее редактирование: 17 янв 2020
    Roman __construct нравится это.
  6. ADSoft

    ADSoft Старожил

    С нами с:
    12 мар 2007
    Сообщения:
    3.817
    Симпатии:
    735
    Адрес:
    Татарстан
    стопудова рукожоп все команды слитно
    INSERTINTO
    CREATETABLE
    SELECT*FROM
     
    Roman __construct и artoodetoo нравится это.
  7. Roman __construct

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

    С нами с:
    27 апр 2019
    Сообщения:
    1.270
    Симпатии:
    112
    Вот, хоть кто-то удосужился на код посмотреть :D
     
  8. Vinikon

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

    С нами с:
    9 ноя 2016
    Сообщения:
    10
    Симпатии:
    1
    мне почему-то не понравился одинокий bindParam в 5 строке - параметры какие-странные, и где еще три bindParam? Виноват, не разобрался, по ходу это правильный bind_param