Я создал регистрационную форму с php и mysql,
это страница, которая должна появиться после входа в систему:
<?php
session_start();
require_once 'helper.php';
if( ! isset ($_SESSION['user_id'] )){
header('location: index.php');
}
?>
<?php
include 'header.php';
?>
Я добавил этот код, чтобы отключить доступ к странице, если пользователь не вошел в систему. Моя проблема в том, что после добавления этого кода я не могу войти в систему с пользователем, с которым я мог бы войти в систему раньше. Я предполагаю, потому что он не может распознать глобальные
var $_SESSION['user_id']
но я не понимаю, почему, session_start(); находится на попрошайничестве страницы.
это страница входа:
<?php
session_start();
require_once 'helper.php';
$error = '';
if (isset($_POST['submit'])) {
$email = !empty($_POST['email']) ?
trim($_POST['email']) : '';
$password = !empty($_POST['password']) ?
trim($_POST['password']) : '';
if (!$email) {
$error = '*הכנס אימייל';
} elseif (!$password) {
$error = '*הכנס סיסמה';
} else {
$sql = "SELECT * FROM users WHERE email = '$email' AND
password = '$password' ";
$link = mysqli_connect(MYSQL_HOST, MYSQL_USER, MYSQL_PWD, MYSQL_DB);
$result = mysqli_query($link, $sql);
if ($result && mysqli_num_rows($result) > 0) {
$user = mysqli_fetch_assoc($result);
$_SESSION['user_id'] = $user['íd'];
$_SESSION['user_name'] = $user['name'];
header('location: posts.php');
} else {
$error = 'אימייל או סיסמה לא נכונים';
}
}
}
?>
<?php
include("header.php");
?>
<div id="space-signup"></div>
<div class="container">
<section id="signup">
<form action="" method="post" style="width:300px; margin:0 auto; ">
<input type="email" name="email" placeholder="אימייל" value="<?= old('email'); ?>" class="form-control">
<input type="password" name="password" id="password"
placeholder="סיסמה" class="form-control">
<button type="submit" class="btn" name="submit" value="sign in"
style="width:300px" >התחבר</button>
<span class="sign-in-error"> <?= $error ?></span>
</form>
</section>
</div>
Я думаю, вы должны заменить $user['íd']
на $user['id']
или независимо от вашего имени столбца. См. Измененный код, как показано ниже.
<?php
session_start();
require_once 'helper.php';
$error = '';
if (isset($_POST['submit'])) {
$email = !empty($_POST['email']) ?
trim($_POST['email']) : '';
$password = !empty($_POST['password']) ?
trim($_POST['password']) : '';
if (!$email) {
$error = '*הכנס אימייל';
} elseif (!$password) {
$error = '*הכנס סיסמה';
} else {
$sql = "SELECT * FROM users WHERE email = '$email' AND
password = '$password' ";
$link = mysqli_connect(MYSQL_HOST, MYSQL_USER, MYSQL_PWD, MYSQL_DB);
$result = mysqli_query($link, $sql);
if ($result && mysqli_num_rows($result) > 0) {
$user = mysqli_fetch_assoc($result);
$_SESSION['user_id'] = $user['id'];
$_SESSION['user_name'] = $user['name'];
header('location: posts.php');
} else {
$error = 'אימייל או סיסמה לא נכונים';
}
}
}
?>
<?php
include("header.php");
?>
<div id="space-signup"></div>
<div class="container">
<section id="signup">
<form action="" method="post" style="width:300px; margin:0 auto; ">
<input type="email" name="email" placeholder="אימייל" value="<?= old('email'); ?>" class="form-control">
<input type="password" name="password" id="password"
placeholder="סיסמה" class="form-control">
<button type="submit" class="btn" name="submit" value="sign in"
style="width:300px" >התחבר</button>
<span class="sign-in-error"> <?= $error ?></span>
</form>
</section>
</div>
Попытайтесь вызвать ob_start()
перед началом сеанса, потому что если по умолчанию ваше output_buffering выключено, и вам было достаточно неудачно отправить один байт данных обратно клиенту, тогда ваши HTTP-заголовки уже отправлены. Это эффективно предотвращает передачу session_start() заголовка cookie обратно клиенту. Вызывая ob_start(), вы активируете буферизацию и, следовательно, задерживаете отправку заголовков HTTP.