За последние 24 часа нас посетили 17668 программистов и 1657 роботов. Сейчас ищет 961 программист ...

Что необходимо исправить?

Тема в разделе "MySQL", создана пользователем Владислав Глебов, 30 июл 2019.

  1. Владислав Глебов

    С нами с:
    29 июл 2019
    Сообщения:
    5
    Симпатии:
    0
    данный код:
    PHP:
    1. <?php
    2. $host='localhost';
    3. $database='host1773545_db';
    4. $user='***';
    5. $pswd='***';
    6. $dbh=mysqli_connect($host, $user, $pswd) or die("Не могу соединиться с MySQL.");
    7. mysqli_select_db($dbh, $database) or die("Не могу подключиться к базе.");
    8.  
    9. $login = '***';
    10. $pass = "12345";
    11.  
    12. $sql = mysqli_query($dbh, "Select id from users where login = '$login' and pass = md5('$pass')");
    13. if (mysqli_num_rows($sql) > 0) {
    14.     die("Авторизация прошла успешно");
    15. } else {
    16.    print "Ошибка авторизации";
    17. }
    18. ?>
    выводит такой результат:

    Предупреждение : mysqli_num_rows () ожидает, что параметр 1 будет mysqli_result, логическое значение указано в /home/host1773545/host1773545.hostland.pro/htdocs/www/admin/index.php в строке 13 Ошибка авторизации
     
  2. yanuzay

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

    С нами с:
    28 мар 2018
    Сообщения:
    503
    Симпатии:
    58
    дай угадаю в $sql у тебя false, так как пользователь не найден.

    Можешь переписать условие так, тогда предупреждения быть не должно.

    PHP:
    1. if ($sql && mysqli_num_rows($sql) > 0) {
    2.     die("Авторизация прошла успешно");
    3. } else {
    4.    print "Ошибка авторизации";
    5. }
    Но это предупреждение не серьезная ошибка.
    Принципиально не влияет на твой скрипт.

    Зачем здесь md5('$pass') ты пишешь $pass в кавычках?
    Ты зашифровываешь слово '$pass' в md5, а ты наверно хотел значение переменной $pass зашифровать?
     
    #2 yanuzay, 30 июл 2019
    Последнее редактирование: 30 июл 2019
  3. Sail

    Sail Старожил

    С нами с:
    1 ноя 2016
    Сообщения:
    1.593
    Симпатии:
    362
    Если пользователь не найден, возвращается не false, а объект mysqli_result с пустой результирующей выборкой.
    false возвращается в случае ошибки выполнения запроса.
     
  4. yanuzay

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

    С нами с:
    28 мар 2018
    Сообщения:
    503
    Симпатии:
    58
    ну да.
    у него в предупреждении указано boolean given, это меня с толку сбило.

    Хотя, думаю там именно ошибка синтаксиса mysql и false в переменной $sql
     
    #4 yanuzay, 30 июл 2019
    Последнее редактирование: 30 июл 2019
  5. miketomlin

    miketomlin Старожил

    С нами с:
    9 авг 2016
    Сообщения:
    3.861
    Симпатии:
    657
    @yanuzay, зачем думать, когда об этом написано в сообщении об ошибке? :)

    @Владислав Глебов, суть в том, что вы не проверяете результат выполнения запроса. Ошибка может возникать во время выполнения, даже когда все остальное написано правильно. Хотя у вас еще потенциальные SQL-инъекции наблюдаются, из-за кот. может быть поврежден текст запроса.