Как получить пользовательские данные из базы данных?

#php #mysqli

#php #mysqli

Вопрос:

Когда я пытаюсь получить пользовательские данные из mysql, он просто ничего не показывает. Похоже, что он ничего не получает в $user_log.

 if(isset($_POST['login_user']))
    {
        $username = mysqli_real_escape_string($db, $_POST['username']);
        $password = mysqli_real_escape_string($db, $_POST['password']);
        $errors = array();

        if(empty($username))
        {
            array_push($errors, "Попълнете потребителското име");
        }
        if(empty($password))
        {
            array_push($errors, "Попълнете паролата");
        }

        if(count($errors) == 0)
        {
            $password = md5($password);
            $query = "SELECT 'active', 'email' FROM users WHERE username='".$username."' AND password='".$password."'";
            $results = mysqli_query($db, $query);
            if(mysqli_num_rows($results) == 1)
            {
                $user_log = mysqli_fetch_array($result, MYSQLI_BOTH);
                // Trying to find if there is something in 'active'
                echo 'Active: ' . $user_log['active'];
                if($user_log['active'])
                {
                    $_SESSION['username'] = $username;
                    $_SESSION['success'] = "1";
                    header("location: user.php?action=panel");
                }
                else
                    array_push($errors, "Профилът не е потвърден. Има изпратен линк за потвърждение на ". $user_log['email'] .".");
            }
            else
            {
                array_push($errors, "Грешно потребителско име или парола.");
            }
        }
    }
  

Я хочу узнать, равен ли столбец «активный» в базе данных пользователя 0 или 1, и если он равен 0, чтобы сообщить ему, чтобы он отправил свою электронную почту и напечатал пользовательскую электронную почту в сообщении.

Комментарии:

1. Предупреждение: вы можете быть открыты для SQL-инъекций и должны действительно использовать параметризованные подготовленные операторы вместо ручного построения ваших запросов. Они предоставляются PDO или MySQLi . Никогда не доверяйте никаким входным данным, особенно тем, которые поступают со стороны клиента. Даже когда ваши запросы выполняются только доверенными пользователями, вы все равно рискуете повредить свои данные .

2. Никогда не храните пароли в виде открытого текста или с использованием MD5 / SHA1! Храните только хэши паролей. Используйте PHP password_hash() и password_verify() . Если вы используете версию PHP ниже 5.5 (на что я очень надеюсь, что это не так), вы можете использовать библиотеку password_compat для получения той же функциональности.

3. Спасибо за ответы. Я воспользуюсь этими советами и переделаю их.

Ответ №1:

Возможно echo 'Active: ' . $user_log['active']; , это то, что вы делаете раньше header("location: user.php?action=panel");

Если я верю документации PHP, вы не должны пытаться отображать что-либо перед вызовом header() .

Помните, что header() должен вызываться перед отправкой любого фактического вывода, будь то с помощью обычных HTML-тегов, пустых строк в файле или из PHP.

Редактировать :

Я только что заметил, что вы пишете $result вместо $results in $user_log = mysqli_fetch_array($result, MYSQLI_BOTH); . Если это все еще не причина вашей проблемы… Извините, я не могу вам помочь.

Комментарии:

1. Дело в том, что $user_log['active'] это не true так header("location: user.php?action=panel"); , не называется. Я полагаю, что по умолчанию он равен 0. Я использую echo 'Active: ' . $user_log['active']; только для отладки, чтобы посмотреть, отображает ли он что-нибудь.

2. братан, я чувствую себя таким тупым. Я смотрел на это пару часов подряд, и это моя ошибка. Большое спасибо: D