сеанс — данные не могут быть получены из $ _SESSION в переполнении стека

Здравствуйте, я новичок в языке PHP. Мне трудно получить / отобразить данные из сеанса в PHP. Моя страница входа работает нормально, и сеанс также переносится на страницу пользователя должным образом. Но я не получаю данных и ошибок.

Ниже мой правильно работающий скрипт страницы входа. Я не публикую страницу с элементами HTML, так как я использовал require_once на нем с помощью сценария ниже, и он работает нормально.

<?php
session_start();
require_once 'connection.php';

$err = array();
$errcnt = 0;

if (!empty($_POST)) {
if (empty($_POST['usermail'])) {
$err['verifyerr'] = "Please insert email";
$errcnt++;
}
if (empty($_POST['password'])) {
$err['passerr'] = "Please insert password";
$errcnt++;
}
if (!empty($_POST['usermail'])) {
$userquery = "SELECT * FROM studentdetails WHERE email = '".$_POST['usermail']."'";
$userlookup = mysqli_query($connect, $userquery);
$userfetch = mysqli_fetch_assoc($userlookup);

if (empty($userfetch)) {
$err['matcherr'] = "Invalid username";
$errcnt++;
}
else {
$passquery = "SELECT * FROM studentdetails WHERE email = '".$_POST['usermail']."' AND entrykey = '".md5($_POST['password'])."'";
$passlookup = mysqli_query($connect, $passquery);
$passfetch = mysqli_fetch_assoc($passlookup);

if (empty($passfetch)) {
$err['invalidpass'] = "Invalid password";
$errcnt++;
}
else {
$_SESSION['uid'] = $_POST['usermail'];
header("Location: http://localhost/Examination/user.php");
}
}
}
}
?>

И ниже страница user.php, где у меня возникла актуальная проблема.

<?php
session_start();
require_once 'connection.php';

if (isset($_SESSION['uid'])) {echo $_SESSION['uid']  . '<br>';

$query = "SELECT * FROM studentdetails WHERE id='".$_SESSION['uid']."'";
$result = mysqli_query($connect, $query);
if (!$result) {
die("Database query failed");
}
else {
echo "All ok!";
}
}
else {
echo "not connected";
}//$queryoutput = "SELECT * FROM studentdetails WHERE id='".$_SESSION['uid']."'";
//$outquery = mysqli_connect($connect, $queryoutput);

//if (!isset($_SESSION['uid'])) {
//header("Location: http://localhost/Examination/edulogin.php");
//}

?><!DOCTYPE html>
<html>
<head>
<title>User Profile</title>
</head>
<body>
<h1>Welcome</h1>
<?php
while ($row = mysqli_fetch_row($result)) {
var_dump($row);
echo "<hr />";
}
?><!--
<h1></h1>
<table>
<tr>
<td><h4>Firstname</h4></td>

</tr>
<tr>
<td><h4>Lastname</h4></td>

</tr>
<tr>
<td><h4>Gender</h4></td>
</tr>
<tr>
<td><h4>Email</h4></td>
</tr>
<tr>
<td><h4>About You</h4></td>
</tr>
<tr>
<td><h4>Country</h4></td>
</tr>
<tr>
<td><h4>Interests</h4></td>
</tr>
<tr>
<td><h4>Image</h4></td>
</tr>

</table>

<h3>Click here to <a href="http://localhost/Examination/userout.php">Logout</a></h3>
-->
</body>
</html>

Он даже правильно отображает сеанс, где он показывает электронную почту пользователя и «Все в порядке». Но, как ни странно, никакие данные не извлекаются и, как я уже сказал, ошибок нет. Пожалуйста, если вы знаете, сообщите мне решение. Я буду очень благодарен.

В случае, если вы хотите взглянуть на мою страницу connection.php, вот она

<?php

define('DB_SERVER', 'localhost');
define('DB_USER', 'root');
define('DB_PASS', '');
define('DB_NAME', 'user_2');
$connect = mysqli_connect(DB_SERVER, DB_USER, DB_PASS, DB_NAME);

if (mysqli_connect_errno()) {
die("Connection failed: " . mysqli_connect_error() . " (" . mysqli_connect_errno() . ")");
}
?>

0

Решение

Потому что вы устанавливаете $_SESSION['uid'] с адресом электронной почты, а затем пытается сопоставить запись базы данных, где id=email

$query = "SELECT * FROM studentdetails WHERE id='".$_SESSION['uid']."'";

Если вы назначаете адрес электронной почты, вы должны попытаться изменить свой запрос на выборку (что-то вроде):

$query = "SELECT * FROM studentdetails WHERE email='".$_SESSION['uid']."'";

Или назначьте идентификатор пользователя ($_SESSION['uid'] = $userfetch['id']) и затем запрос:

$query = "SELECT * FROM studentdetails WHERE id='".$_SESSION['uid']."'";

Вы видите "All OK"потому что ошибки нет, просто нет соответствующих записей (потому что запрос, вероятно, неверный).

…И, конечно же, обязательно защитите себя от уколов!

2

Другие решения

Прежде всего вам нужно назначить данные в $_SESSION массив. Вы уже сделали это в

$_SESSION['uid'] = $_POST['usermail'];

в вашем скрипте страницы входа.
Также проверьте URL. Оба (текущий и запрашивающий) открываются по одному и тому же протоколу, т.е. http://?

-2

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector