header location не фунциклирует
1.
Virtuozzo (17.12.2016 / 14:50)
Всем привет! Есть страница регистрации.
Проблема в следующем.
После записи данных юзера в бд не получается создать перенаправление.
2.
Александр (17.12.2016 / 14:53)
Кидай сюда код, посмотрим. Так никто ничем не поможет.
3.
Virtuozzo (17.12.2016 / 14:53)
<?php
$title = 'Регистрация';
include_once($_SERVER["DOCUMENT_ROOT"].'/style/head.php');
ob_start();
?>
<div class="title">Регистрация</div>
<?
if(isset($_GET['ok'])){
?>
<div class="success">
Вы успешно зарегистрировались!<br/>
<a href="/" class="link">Перейти на сайт</a>
</div>
<?
include_once($_SERVER["DOCUMENT_ROOT"].'/style/foot.php');
exit();
}
mode('guest');
if(isset($_POST['ok'])){
$_POST['nick']=guard($db->real_escape_string($_POST['nick']));
$_POST['name']=guard($db->real_escape_string($_POST['name']));
$_POST['email']=guard($db->real_escape_string($_POST['email']));
if(empty($_POST['nick'])){
$error = 'Введите ник!';
}elseif(mb_strlen($_POST['nick']) < 2){
$error = 'Ник должен содержать не менее двух символов!';
}elseif(empty($_POST['password1'])){
$error = 'Введите пароль!';
}elseif(empty($_POST['password2'])){
$error = 'Введите подтверждение пароля!';
}elseif(empty($_POST['name'])){
$error = 'Введите имя!';
}elseif(mb_strlen($_POST['name']) < 2){
$error = 'Имя должно содержать в себе хотя бы 2 символа!';
}elseif(empty($_POST['email'])){
$error = 'Введите E-Mail!';
}elseif(mb_strlen($_POST['email']) < 5){
$error = 'E-Mail должен содержать как минимум 5 символов!';
}elseif($_POST['password1'] != $_POST['password2']){
$error = 'Пароли не совпадают!';
}elseif(!preg_match('/[0-9a-z_\-]+@[0-9a-z_\-^\.]+\.[a-z]{2,6}/i', $_POST['email'])){
$error = 'Неверно введен E-Mail';
}elseif($db->query("SELECT * FROM `users` WHERE `email`='".$_POST['email']."'")->num_rows != 0){
$error = 'Пользователь с таким E-Mail уже существует!';
}elseif($db->query("SELECT * FROM `users` WHERE `nick`='".$_POST['nick']."'")->num_rows != 0){
$error = 'Пользователь с таким ником уже существует!';
}elseif(mb_strlen($_POST['nick'])>40){
$error = 'Длинна ника должна быть менее 40 символов!';
}
4.
Virtuozzo (17.12.2016 / 14:56)
if(isset($error)){
?>
<div class="error"><?=$error?></div>
<?
}else{
$db->query("INSERT INTO `users` SET `nick`='".$_POST['nick']."', `password`='".md5($_POST['password1'])."', `name`='".$_POST['name']."', `email`='".$_POST['email']."', `date_reg`='".time()."'");
setcookie("nick", $_POST['nick'], time()+86000);
setcookie("password", md5($_POST['password1']), time()+86000);
header('location:?ok');
}
}
?>
<div class="text">
<form action="" method="POST">
Придумайте ник:<br/>
<input type="text" name="nick"><br/>
Придумайте пароль:<br/>
<input type="password" name="password1"><br/>
Повторите пароль:<br/>
<input type="password" name="password2"><br/>
Введите имя:<br/>
<input type="text" name="name"><br/>
Введите ваш E-Mail:<br/>
<input type="text" name="email"><br/>
<input type="submit" name="ok" value="Зарегистрироваться">
</form>
</div>
<?
include_once($_SERVER["DOCUMENT_ROOT"].'/style/foot.php');
?>
5.
Удаленный (17.12.2016 / 15:03)
Вроде как setcookie() и header() не должны быть на одной странице.
Да и адрес в location надо указывать полностью вместе с http://
6.
Virtuozzo (17.12.2016 / 15:06)
frasi, Но при "выходе" с сайта есть так-же удаление кукесов и
setcookie("nick", "");
setcookie("password", "");
header('location:/');
и тут он работает как положено, не смотря на то что стоит с сеткуки
7.
Удаленный (17.12.2016 / 15:08)
А вообще в таких случаях надо включать показ ошибок, чтоб не гадать на кофейной гуще
8.
Virtuozzo (17.12.2016 / 15:13)
frasi, Включены. Но ничего не показывает. Получается что у меня после нажатия кнопки заносятся данные в бд и стр. просто обновляется с чистыми формами для ввода.
9.
Удаленный (17.12.2016 / 15:22)
Virtuozzo, куки записываются?
10.
Virtuozzo (17.12.2016 / 15:25)
frasi, Пардон
Закомментировал показ ошибок.
Warning: Cannot modify header information - headers already sent by (output started at /home/user/site.ru/htdocs/www/modules/login/reg.php:1) in /home/user/site.ru/htdocs/www/modules/login/reg.php on line 89
Warning: Cannot modify header information - headers already sent by (output started at /home/user/site.ru/htdocs/www/modules/login/reg.php:1) in /home/user/site.ru/htdocs/www/modules/login/reg.php on line 90
Warning: Cannot modify header information - headers already sent by (output started at /home/user/site.ru/htdocs/www/modules/login/reg.php:1) in /home/user/site.ru/htdocs/www/modules/login/reg.php on line 91
Нет. Кукесы не записывает
11.
Нариман (17.12.2016 / 15:26)
У тебя header уже отдается текущая страница, судя по всему та, что подключена в
include_once($_SERVER["DOCUMENT_ROOT"].'/style/head.php');
12.
Удаленный (17.12.2016 / 15:28)
Значит у тя перед header() идет вывод хтмл-кода. Так делать нельзя
Добавлено через 00:52 сек.
Пиши хтмл-вывод только с помощью echo '';
13.
Virtuozzo (17.12.2016 / 15:49)
Roberto, Ну по идее он должен отправить на эту же страницу из reg.php в reg.php?ok но он не отправляет никуда. + ругается на
эти три строки
setcookie("nick", $_POST['nick'], time()+86000);
setcookie("password", md5($_POST['password1']), time()+86000);
header('location:?ok');
14.
Удаленный (17.12.2016 / 15:52)
Я ж говорю, у тя вывод перед хедером. Поставь ob_start(); в самом начале файла шапки или перед инклудом
15.
Артур (17.12.2016 / 15:54)
Файл /style/head.php в студию
16.
Virtuozzo (17.12.2016 / 16:00)
frasi, У меня там он прописан
17.
Александр (17.12.2016 / 16:03)
Судя по всему у тебя пишет уже в шапке что-то.
18.
Virtuozzo (17.12.2016 / 16:04)
Башка,
<?php
ob_start();
include_once($_SERVER["DOCUMENT_ROOT"].'/system/function.php');
?>
<!DOCTYPE HTML>
<head>
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title><?=$title?></title>
<link rel="shortcut icon" href="/style/images/icons/favicon.ico">
<link rel="stylesheet" href="/style/css/style.css" type="text/css" />
</head>
<div class="head">
<a href="/"><img src="/style/images/logo.png"></a>
</div>
<?
if(!isset($user)){
?>
<div class="nvg">
<a href="/login">Авторизация</a><br/>
<a href="/reg">Регистрация</a>
</div>
<?
}else{
?>
<div class="nvg">
<a href="/cabinet">Личный кабинет</a><br/>
<a href="/exit">Выход</a>
</div>
<?
}
?>
19.
Александр (17.12.2016 / 16:06)
http://cannot-modify-header-information.ru/
Добавлено через 01:38 сек.
И header('location:?ok'); укажи с header('location: reg.php?ok');
20.
Артур (17.12.2016 / 16:08)
где то в начале файла какой нить пробельный символ запрятался, или UTF BOM.
21.
ramzes (17.12.2016 / 23:00)
<?php
$title = 'Регистрация';
include_once($_SERVER["DOCUMENT_ROOT"].'/style/head.php');
ob_start();
?>
тут надо поменять местами подключение шапки и включение буфферизации. шапка генерирует ответ сервера до включения ob_start, соответственно, ниже шапки ни какие заголовки отправленны не будут. в т.ч. и куки и редиректы
22.
Virtuozzo (18.12.2016 / 11:58)
ramzes, Спасибо. Только надо было в начале стр. добавить
Header("Content-Type: text/html; charset=utf8");
А менять буфер с шапкой пробовал, выдавало только белую страницу.
Добавлено через 03:37 сек.
ramzes, Сейчас всё работает как часы.
23.
Александр (18.12.2016 / 18:24)
Так запись у тебя шла после заголовков. Дал ведь ссылку там все описано и как раз твой случай был.
24.
Virtuozzo (18.12.2016 / 20:34)
Randy, Ну вот я ж оттуда и нашёл решение. За что спасибо ^_^
URL:
https://visavi.net/topics/43306