header ("Location: ....");

T
На сайте с 13.10.2013
Offline
21
643

Помогите разобраться с логином. Не получается редирект


session_start();
ini_set('display_errors',1);
error_reporting(E_ALL);

if(isset($_POST['log_submit']))
{
if (empty($_POST['login']) or empty($_POST['password'])){
$empty_username_password = 1;
}
else{
$login = $_POST['login'];
$password = $_POST['password'];

$login = stripslashes($login);
$login = htmlspecialchars($login);
$password = stripslashes($password);
$password = htmlspecialchars($password);

//удаляем лишние пробелы
$login = trim($login);
$password = trim($password);

include ($_SERVER["DOCUMENT_ROOT"]."/inc/connect.php");

$query= " SELECT *
FROM owner
WHERE login = '{$login}'
AND pwd = '".hash('sha512',$_POST['password'])."'";

$result = mysql_query($query) or die(mysql_error());

if(mysql_num_rows($result) == 1){
$myrow = mysql_fetch_array($result);
$_SESSION['login'] = $myrow['login'];


header("Location: file.php");
exit;

}
else{
$invalid_username_password = 1;
}
}
}
?>
<!DOCTYPE html>
<html>
<head>
<meta content="text/html;charset=utf-8" http-equiv="Content-Type">
<meta content="utf-8" http-equiv="encoding">
<style>
body{text-align:center;}
.main{width:860px;margin:200px auto 10px auto;text-align:center;border:1px solid blue;}
.alert{font:16px Arial,Helvetica,sans-serif;color:red;}
.join{text-align:right;padding:0 20px 5px 0;}
</style>
</head>
<body>
<div class="main">
<?php
if($invalid_username_password){echo "<div class='alert'><p>Неправильный username или password.</p></div>";}
if($empty_username_password){echo "<div class='alert'><p>Вы ввели не всю информацию, заполните все поля!</p></div>";}
?>
<form action="" method="post">
<table style="margin:0 auto;">
<tr><td>Username</td><td><input name="login" type="text" autofocus /></td></tr>
<tr><td>Password</td><td><input name="password" type="password" /></td></tr>
<tr><td></td><td><input name="remember" type="checkbox" checked>Remember me</input> <a href="#">Forgot password?</a></td></tr>
<tr><td></td><td><input type="submit" name="log_submit" value="Log in"></td></tr>
</table>
</form>

</div>
</body>
</html>
edogs software
На сайте с 15.12.2005
Offline
775
#1

В начале ob_start(); напишите

И крайне рекомендуем эту статейку читануть http://phpfaq.ru/mysql/slashes или хотя бы на mysqli посмотреть, код у Вас - плохой.

Разработка крупных и средних проектов. Можно с криптой. Разумные цены. Хорошее качество. Адекватный подход. Продаем lenovo legion в спб, дешевле магазинов, новые, запечатанные. Есть разные. skype: edogssoft
Satisfaction
На сайте с 10.05.2012
Offline
33
#2
Telez:
session_start();**

Функция session_start() отправляет HTTP-заголовки и дальнейшие манипуляции с ними невозможны. Поэтому, нужно инициализировать отправку сессионных Cookie (session_start()) после отправки пользовательских HTTP-заголовков.

siv1987
На сайте с 02.04.2009
Offline
427
#3
Satisfaction:
Функция session_start() отправляет HTTP-заголовки и дальнейшие манипуляции с ними невозможны.

Чего?.. session_start создает или продолжает сессию на основе идентификатора который как правило лежит в кукисы. Для нее важно, как и для установки остальных заголовках, чтобы она была вызвана перед отправкой содержимого в браузере. Никакие заголовки она не закрывает.

Satisfaction
На сайте с 10.05.2012
Offline
33
#4
siv1987:
Чего?.. session_start создает или продолжает сессию на основе идентификатора который как правило лежит в кукисы. Для нее важно, как и для установки остальных заголовках, чтобы она была вызвана перед отправкой содержимого в браузере. Никакие заголовки она не закрывает.

Скорее всего вы правы. session_start() отправляет заголовок с Cookies, в котором содержится идентификатор сессии. Поэтому, я решил, что после этого отправка HTTP-заголовков невозможна. Сейчас попробовал найти отсылки к своим домыслам в официальной документации, однако ничего такого не нашел. Извините за введение в заблуждение.

edogs software
На сайте с 15.12.2005
Offline
775
#5

siv1987, Satisfaction,

Вы вообще о чем?

session_start, разумеется, не закрывает никаких заголовков.

Но она, разумеется, может отправляет заголовки ( о чем недвусмысленно сказано в документации).

Поэтому если Вы не кэшируете буфер вывода (для чего мы и посоветовали ob_start), то header("Location после нее уже может быть работать и не будет.

---------- Добавлено 29.11.2015 в 22:58 ----------

Впрочем учитывая явную ньюбность автора - мы бы посоветовали Telez убедиться в том, что до <? у него нет ничего. Даже BOM символа UTF-8.

Можно открыть файл в другом редакторе, например, что бы проверить его отсутствие. Или сохранить в соответствующем формате.

siv1987
На сайте с 02.04.2009
Offline
427
#6

edogs, мы о session_start. О том что после нее якобы нельзя больше отправлять заголовки. А вот почему вы решили что дело в выводе, с display_errors и error_reporting у ТСа неизбежна была бы какая-то ошибка. Почему бы вначале не проверить условие при котором срабатывает редирект?

edogs software
На сайте с 15.12.2005
Offline
775
#7
siv1987:
edogs, мы о session_start. О том что после нее якобы нельзя больше отправлять заголовки.

Иногда нельзя. Смотря как что настроено.

siv1987:
А вот почему вы решили что дело в выводе, с display_errors и error_reporting у ТСа неизбежна была бы какая-то ошибка. Почему бы вначале не проверить условие при котором срабатывает редирект?

Проще сначал отсечь очевидное:)

А вообще у автора такой отборный кусок г-нокода, что он явно скопировал его откуда-то из учебника и тут вместо исправления ошибки - следовало бы начинать понимать что происходит.

siv1987
На сайте с 02.04.2009
Offline
427
#8

Можно пример когда после вызова session start нельзя отправлять заголовки?

PN
На сайте с 22.08.2012
Offline
103
#9
siv1987:
Можно пример когда после вызова session start нельзя отправлять заголовки?

скорее наоборот. ДО session_start(), как и ДО header() нельзя отправлять контент, а заголовки можно и до и после:)

Мой совет помог? Не скупись! Bitcoin 1Lseddet1o1B6odgXQHbGaWGwRkt1Db8Ef Ethereum 0x450f1a17461e25194B7F9226cDEe70173F39e1e1

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий