У меня есть таблица со столбцами "email, senha, apelido и data_criacao". Я создал систему входа в систему, используя PHP и MySQL, и теперь я хочу отобразить сообщение с псевдонимом пользователя (это Apelido), но я просто не могу. Я пытался всю ночь...
Я пытался получить, пробовал цикл while...
Файл: логин.php
<?php
session_start();
include('conexao.php');
if (empty($_POST['email']) || empty($_POST['senha'])){
header('Location: index.php');
exit();
}
$email = mysqli_real_escape_string($conexao, $_POST['email']);
$senha = mysqli_real_escape_string($conexao, $_POST['senha']);
$query = "select apelido from cadastros where email = '{$email}' and
senha=md5('{$senha}')";
$result1 = mysqli_query($conexao, $query);
$row1 = mysqli_num_rows($result1);
if ($row1 == 1){
$apelido = $row1['apelido'];
$_SESSION['usuario'] = $apelido;
header('Location: painel.php');
exit();
} else {
header('Location: index.php');
exit();
}
?>
Файл: painel.php
<?php
session_start();
include('verifica_login.php');
?>
<h2><?php echo $_SESSION['usuario']; ?></h2>
<h2> <a href = "logout.php">SAIR</h2>
Предполагается, что должно отображаться «апелидо», но ничего не происходит, когда я отправляю форму. Он отлично работает, если я меняю $_SESSION['usuario'] = $apelido; на $_SESSION['usuario'] = $email;, он нормально показывает электронную почту
Как? я пытался, но я думаю, что я сделал это неправильно
О нет, я не использую md5 по-настоящему, я просто учусь создавать веб-приложения с базами данных, я углублюсь в вопросы безопасности, прежде чем создавать что-то по-настоящему.






На самом деле вы не получаете данные, возвращаемые вашим запросом. $result1 — это просто указатель на весь набор результатов, он не содержит фактических данных строки. Чтобы получить данные, вы должны их получить (либо по одной строке за раз, либо все вместе). Большинство руководств по PHP/mysqli покажут вам этот дополнительный шаг. Вы пытались использовать результат mysqli_num_rows(), который представляет собой просто числовое значение, показывающее, сколько строк вернул запрос, как если бы это был массив, содержащий фактические данные строк.
В вашем случае кажется, что вы ожидаете только одну строку, поэтому вы можете сделать это следующим образом:
$result1 = mysqli_query($conexao, $query);
if ($row1 = mysqli_fetch_assoc($result1)) //if there is a row to read, this will both assign the row data into $row1 and also cause the if statement to return true
{
$apelido = $row1['apelido'];
//...etc
Вам нужно фактически получить набор результатов. Например. с mysqli_fetch_assoc.