Здравствуйте! Такая проблема не работают переходы через header, сам код работает, выдает ошибки и регистрирует.
Текст ошибки: Warning: Cannot modify header information - headers already sent by (output started at E:\Programmes\OpenServer\OSPanel\domains\Registr\views\layouts\header.php:1) in E:\Programmes\OpenServer\OSPanel\domains\Registr\scripts\registration.php on line 85
Сам код: registration.php
<?php
$userName = $password = $email = "";
$userNameErr = $passwordErr = $emailErr = "";
ob_start();
require_once '../database/config.php';
if ($_SERVER["REQUEST_METHOD"] == "POST") {
if (empty(trim($_POST["name"]))) {
$userNameErr = 'Вы не ввели имя пользователя.';
} else {
$sql = "SELECT id FROM users WHERE name = :username";
if ($stmt = $db->prepare($sql)) {
$stmt->bindParam(':username', $paramUsername, PDO::PARAM_STR);
$paramUsername = trim($_POST["user"]);
if ($stmt->execute()) {
if ($stmt->rowCount() == 1) {
$userNameErr = 'Такой логин уже занят';
} else {
$userName = trim($_POST["name"]);
}
} else {
print 'Ошибка';
}
}
unset($stmt);
}
if (empty(trim($_POST["password"]))) {
$passwordErr = 'Введите пароль';
} elseif
(preg_match('/^[_!)(.a-z\d]{6,16}$/i', $_POST["password"]) == false) {
$passwordErr = 'Только латинские буквы, минимальная длина - 6, максимальная - 16';
} else {
$password = trim($_POST['password']);
}
if (empty(trim($_POST['email']))) {
$emailErr = 'Введите электронную почту.';
} elseif (filter_var($_POST['email'], FILTER_VALIDATE_EMAIL) == false) {
$emailErr = 'Почта не прошла валидацию.';
} else {
$email = trim($_POST['email']);
}
if (empty($userNameErr) && empty($passwordErr) && empty($emailErr)) {
$sql = "INSERT INTO users (email, name, password) VALUES (:email, :name, :password)";
if ($stmt = $db->prepare($sql)) {
$stmt->bindParam(':email', $paramEmail, PDO::PARAM_STR);
$stmt->bindParam(':name', $paramUsername, PDO::PARAM_STR);
$stmt->bindParam(':password', $paramPassword, PDO::PARAM_STR);
$paramEmail = $email;
$paramUsername = $userName;
$paramPassword = password_hash($password, PASSWORD_DEFAULT);
if ($stmt->execute()) {
echo <<<__HTML__
<script>alert('Вы зарегистрированы.')</script>
__HTML__;
header('Location: login.php'); //Переход на вход
} else {
print 'Error';
}
}
unset($stmt);
}
unset($db);
}
Файл с HTML:
<?php
require_once("layouts/header.php");
require_once('../scripts/registration.php');
?>
<div class="register-form">
<div class="container">
<form action="<?php echo htmlspecialchars($_SERVER["PHP_SELF"]); ?>" method="post" >
<div class="form-group <?php echo (!empty($userNameErr)) ? 'has-error' : ''; ?>">
<label >Логин</label>
<input name="name" type="text" class="form-control" id="name" placeholder="Введите имя"
value="<?php echo $userName; ?>">
<span class="help-block"><?php print $userNameErr; ?></span>
</div>
<div class="form-group <?php echo (!empty($emailErr)) ? 'has-error' : ''; ?>">
<label>Email</label>
<input name="email" type="email" class="form-control" id="email" placeholder="Введите email"
value="<?php echo $email; ?>">
<span class="help-block"><?php print $emailErr; ?></span>
</div>
<div class="form-group <?php echo (!empty($passwordErr)) ? 'has-error' : ''; ?>">
<label>Пароль</label>
<input name="password" type="password" class="form-control" id="password" placeholder="Введите пароль"
value="<?php echo $password; ?>">
<span class="help-block"><?php print $passwordErr; ?></span>
</div>
<button type="submit" name="Submit" class="btn btn-primary">Зарегистрироваться</button>
<p>Уже зарегистрированы? <a href="login.php">Войти здесь</a>.</p>
</form>
</div>
</div>
<?php
require_once ('layouts/footer.php')
?>
Проверьте как вы сохранили файл. Если в кодировке utf-8 c BOM, то пересохраните без него. Так же посмотрите, чтобы небыло пустых символов перед тегом < ?php
Кстати да, вам в комментарии правильно указали: header должен идти до всех выводов (echo выводов, html тегов, пустых строк). А у вас в файле прямо перед ним вывод echo.
Апостиль в Лос-Анджелесе без лишних нервов и бумажной волокиты
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости