[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: header Location + Оцените скрипт
123456
Есть код:
<?php 
//Это всё в инклуде идет
echo "ВЕРХ
<br>
<br>
<br>
<br>
<br>"
;
// include_once './vid/header.php';

echo "Авторизация <br><br>";

if(isset($_SESSION['email']))
{
echo "Ошибка! Вы уже автаризованы..";
include './vid/footer.php';
exit();
}

if(isset($_POST['submit']))
{
if(trim($_POST['email'])!=="" && trim($_POST['password'])!=="")
{
$valid_email = filter_var($_POST['email'], FILTER_VALIDATE_EMAIL);

if($valid_email == false)
{
echo "Ошибка! E-mail введен неверно.";
include './vid/footer.php';
exit();
}

$login_sql = mysql_query("SELECT `password`,`email`,'ban_time'
FROM `pol`
WHERE`email`='"
.$_POST['email']."'
"
);
$login_bd = mysql_fetch_array($login_sql);

if(mysql_num_rows($login_sql))
{
if(time+7 >$login_bd['ban_time'])
{
if($login_bd['password'] === md5(md5('h4nk7Gj8'.md5($_POST['password']))))
{
include './modules/string.php'; // Генерируется случайная строка в $pin

$ip_br = $_SERVER['REMOTE_ADDR'].$_SERVER['HTTP_USER_AGENT'];
$kash = md5(md5(rand(523,6345).$pin.rand(452,4999)));

$_SESSION['email'] = $_POST['email'];
$_SESSION['kash'] = $kash;

mysql_query("update `pol` set `ip_br`='".md5(md5($ip_br))."', `kash`='".md5(md5($kash))."' where `email`='".$_POST['email']."'");

header("Location: http://".$url."/index.php?p=profile");
}
else
{
mysql_query("update `pol` set `ban_time`='".time()."'where `email`='".$_POST['email']."'");
echo "Ошибка! E-mail не найден или неверный пароль.";
include './vid/footer.php';
exit();
}
}

else
{
echo "Ошибка! Прошло мало времени, после неудачной авторизации! Авторизуйтесь заново.";
include './vid/footer.php';
exit();
}
}

else
{
echo "Ошибка! E-mail не найден или неверный пароль.";
include './vid/footer.php';
exit();
}
}

else
{
echo "Ошибка! Заполнены не все поля!";
}
}

else
{
?>
<form action="" method="post">
<
input type="text" name="email" />
<
input type="password" name="password" />
<
input type="submit" name="submit" value="Войти" />
</
form>
<?php
}

include_once './vid/footer.php';

?>


При удачной авторизации пишет:
Warning: Cannot modify header information - headers already sent by (output started at Z:\home\123.ru\www\include\login.php:7) in Z:\home\123.ru\www\include\login.php on line 54
Данный файл: login.php

строка 7: <br>
строка 54: header("Location: http://".$url."/index.php?p=profile");


Если удалить:

//Это всё в инклуде идет
echo "ВЕРХ
<br>
<br>
<br>
<br>
<br>"
;
// include_once './vid/header.php';

echo "Авторизация <br><br>";
, то всё работает...


Как решить эту проблему???

И посмотрите как сам написан скрипт. Есть ошибки???



Спустя 8 минут, 54 секунды (26.08.2012 - 22:40) VELIK505 написал(а):
Ошибки так никто не выводит
echo "Ошибка! Вы уже автаризованы..";
include './vid/footer.php';
exit();

Спустя 2 минуты, 25 секунд (26.08.2012 - 22:42) 123456 написал(а):
а как?

Спустя 6 минут, 25 секунд (26.08.2012 - 22:48) Игорь_Vasinsky написал(а):
помести под скрипт

Спустя 23 минуты, 57 секунд (26.08.2012 - 23:12) 123456 написал(а):
index.php
<?php 
include_once './config.php';

$con=mysql_connect($bd_host,$bd_user,$bd_password);
mysql_select_db($bd_base,$con);
mysql_query("set names 'cp1251'");
mysql_query("set character_set_client='cp1251'");
mysql_query("set character_set_results='cp1251'");
mysql_query("set collation_connection='cp1251_general_ci'");

if(isset($_SESSION['email']))
{
$valid_email = filter_var($_SESSION['email'], FILTER_VALIDATE_EMAIL);
if($valid_email == true)
{
$user_sql = mysql_query("SELECT * FROM `pol` WHERE `email` = '".$_SESSION['email']."'");
$user = mysql_fetch_array($user_sql);
}
}


$conf_sql = mysql_query("SELECT * FROM `confs` WHERE `id`='1'");
$conf = mysql_fetch_array($conf_sql);


$modules = array('main', 'login', 'registration', 'exit', 'profile');
$do = (isset($_GET['p'])) ? $_GET['p'] : 'main';

if (in_array($do, $modules))
require './include/' . $do . '.php';
else
require
'./include/main.php';
?>



config.php
<?php 
session_start();

$bd_host = "localhost";
$bd_user = "123";
$bd_password = "123";
$bd_base = "123";

$url = "123.ru";

?>


Вроде ж нигде не отправляю заголовок

Спустя 34 минуты, 24 секунды (26.08.2012 - 23:47) 123456 написал(а):
ну?????

Спустя 57 минут, 1 секунда (27.08.2012 - 00:44) inpost написал(а):
header() - мгновенная переадресация. Какой смысл выводить текст, если его никто не увидит? Ответ прост, никакого! Не надо выводить текст тогда, когда делаешь переадресацию, в виду этого меняй логику и порядок скрипта так, чтобы вывод текста был только в том случае, если не делаешь переадресацию, обычно его помещают под проверки на переадресацию!

Спустя 8 часов, 58 минут, 35 секунд (27.08.2012 - 09:42) KOPOJI написал(а):
перед использованием функций header,setcookie,session_start и еще ряда других (которые отправляют заголовки) не должно быть никакого вывода информации, вплоть то <html> и даже пробелов перед началом php-кода. иначе вы получите эту ошибку. можно в начале скрипта первой же строчкой прописать
ob_start();
она вывод будет накапливать и тогда ошибок быть не должно.
далее. для работы с сессиями надо их запустить -
session_start();

if(time+7 >$login_bd['ban_time'])
это что то неизвестное.. может все таки time()+7?
и вместо кучи md5 лучше используйте соль и sha1 внутри md5 имхо..

Спустя 1 час, 58 минут, 11 секунд (27.08.2012 - 11:41) 123456 написал(а):
KOPOJI
1) для работы с сессиями надо их запустить - session_start();

session_start(); у меня запускается в config.php


2) лучше используйте соль и sha1 внутри md5?

Возможно

inpost
Всё, сделал, работает)
Вот что получилось:
<?php 
$error = array(
1 => "Ошибка! E-mail не найден или неверный пароль.",
2 => "Ошибка! Прошло мало времени, после неудачной авторизации! Авторизуйтесь заново.",
3 => "Ошибка! Заполнены не все поля!",
4 => "Ошибка! E-mail введен неверно.",
5 => "Ошибка! Вы уже автаризованы."
);

if(!isset($_SESSION['email']))
{
if(isset($_POST['submit']))
{
if(trim($_POST['email'])!=="" && trim($_POST['password'])!=="")
{
$valid_email = filter_var($_POST['email'], FILTER_VALIDATE_EMAIL);

if($valid_email == true)
{
$login_sql = mysql_query("SELECT `password`,`email`,`ban_time` FROM `site_user` WHERE `email`='".$_POST['email']."'");
$login_bd = mysql_fetch_array($login_sql);

if(mysql_num_rows($login_sql))
{
if(time() > $login_bd['ban_time']+5)
{
if($login_bd['password'] === md5("$sol".sha1($_POST['password'])))
{
include './modules/string.php'; // Генерируется случайная строка в $pin

$ip_br = $_SERVER['REMOTE_ADDR'].$_SERVER['HTTP_USER_AGENT'];
$kash = md5(md5(rand(523,6345).$pin.rand(452,4999)));

$_SESSION['email'] = $_POST['email'];
$_SESSION['kash'] = $kash;

mysql_query("update `site_user` set `ip_br`='".md5("$sol".sha1($ip_br))."', `kash`='".md5("$sol".sha1($kash))."' where `email`='".$_POST['email']."'");
header("Location: http://".$url."/index.php?p=profile");
}
else
{
mysql_query("update `site_user` set `ban_time`='".time()."'where `email`='".$_POST['email']."'");
$error_echo .= $error['1'];
}
}

else
{
$error_echo .= $error['2'];
}
}

else
{
$error_echo .= $error['1'];
}
}

else
{
$error_echo .= $error['3'];
}
}

else
{
$error_echo .= $error['4'];
}
}
}

else
{
$error_echo .= $error['5'];
}

if($error_echo)
{
include_once './vid/header.php';
echo "Авторизация <br><br>";
echo $error_echo;
include './vid/footer.php';
}
?>


Посмотрите, может где какие ошибки еще найдете

Спустя 3 минуты, 56 секунд (27.08.2012 - 11:44) m4a1fox написал(а):
123456
Цитата
mysql_fetch_array($login_sql);

Почему используете именно array()?

Спустя 3 минуты, 7 секунд (27.08.2012 - 11:48) inpost написал(а):
Ты дописываешь $error_echo, а ты её создал ранее?
Если ты проверяешь на пустоту, то логичнее было бы if(!empty()).

Спустя 3 минуты, 11 секунд (27.08.2012 - 11:51) 123456 написал(а):
inpost , да, я создал $error_echo в файле config.php(Подключен к данному файлу)

логичнее было бы if(!empty())
ОК)

Что еще не так?

Спустя 3 минуты, 58 секунд (27.08.2012 - 11:55) inpost написал(а):
я бы поменял if-else местами. Визуально виднее было бы.

Спустя 3 минуты, 15 секунд (27.08.2012 - 11:58) Игорь_Vasinsky написал(а):
злоупотребляешь условиями ветвления.

писал бы результат всех проверок в массив ошибок,, а каждый этап скрипта запускал бы если этот массив пуст.

Спустя 4 минуты, 29 секунд (27.08.2012 - 12:02) 123456 написал(а):
inpost , мне так как-то удобнее, привык что ли.

Игорь_Vasinsky, а что, нельзя разве? Это как-то не безопасно? или скрипт долго будет грузить???
Я как-то не понял твой вариант, покажи в примере

Спустя 3 минуты, 40 секунд (27.08.2012 - 12:06) Игорь_Vasinsky написал(а):
if('имя пользователя пустое')
$errors[] = 'empty name';

....


if('пароль пустое')
$errors[] = 'empty pass';



а перед запуском алгоритма проверяешь

if(!$errors)
//Запустил скрипт
else
foreach
($errors as $error)
echo $error.'<br/>';



можно перед каждым этапом


if('имя пользователя пустое')
$errors[] = 'empty name';

....

if(!$errors)
if('пароль пустое')
$errors[] = 'empty pass';
else
foreach
($errors as $error)
echo $error.'<br/>';

Спустя 34 минуты, 42 секунды (27.08.2012 - 12:41) 123456 написал(а):
Ну у меня ведь только это сократиться и всё

if(trim($_POST['email'])=="" && trim($_POST['password'])=="")
{
}


if(!(filter_var($_POST['email'], FILTER_VALIDATE_EMAIL)))
{
}


А дальше подключение к БД, и нет смысла на каждом шагу проверять
if(!$errors)
//Запустил скрипт
else
foreach
($errors as $error)
echo $error.'<br/>';


Спустя 46 минут, 54 секунды (27.08.2012 - 13:28) 123456 написал(а):
Посмотрите проверку на авторизованного пользователя

<?php 
// Это в инклуде
if(isset($_SESSION['email']))
{
$valid_email = filter_var($_SESSION['email'], FILTER_VALIDATE_EMAIL);
if($valid_email == true)
{
$user_sql = mysql_query("SELECT * FROM `site_user` WHERE `email` = '".$_SESSION['email']."'");
$user = mysql_fetch_array($user_sql);
}
}

// Инклуд до сюда

if(isset($_SESSION['email']) && isset($_SESSION['kash']))
{
if(mysql_num_rows($user_sql))
{
if($user['email'] !== $_SESSION['email'] or $user['kash'] !== md5("$sol".sha1($_SESSION['kash'])) or $user['ip_br'] !== md5("$sol".sha1($_SERVER['REMOTE_ADDR'].$_SERVER['HTTP_USER_AGENT'])))
{
$error = 1;

}
}

else
{
$error = 1;
}
}

else
{
$error = 1;
}

if($error == 1)
{
unset($_SESSION['email']);
unset($_SESSION['kash']);
header("Location: http://".$url."/index.php?p=main");
}
?>

Спустя 17 минут, 20 секунд (27.08.2012 - 13:45) Игорь_Vasinsky написал(а):
Цитата
if($valid_email == true)

ай ай ай.. это же булиан

if($valid_email === true)


или

if($valid_email)



а работает?

Спустя 5 минут, 35 секунд (27.08.2012 - 13:51) 123456 написал(а):
Цитата (Игорь_Vasinsky @ 27.08.2012 - 11:45)
Цитата
if($valid_email == true)

ай ай ай.. это же булиан

if($valid_email === true)


или

if($valid_email)



а работает?

У меня всё работает так:
if($valid_email == true)


В мануал лазил, там именно == написано, а не ===
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.