#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