<?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();
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
config.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-кода. иначе вы получите эту ошибку. можно в начале скрипта первой же строчкой прописать
далее. для работы с сессиями надо их запустить -
и вместо кучи md5 лучше используйте соль и sha1 внутри md5 имхо..
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
Всё, сделал, работает)
Вот что получилось:
Посмотрите, может где какие ошибки еще найдете
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()).
Если ты проверяешь на пустоту, то логичнее было бы if(!empty()).
Спустя 3 минуты, 11 секунд (27.08.2012 - 11:51) 123456 написал(а):
inpost , да, я создал $error_echo в файле config.php(Подключен к данному файлу)
логичнее было бы if(!empty())
ОК)
Что еще не так?
логичнее было бы 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, а что, нельзя разве? Это как-то не безопасно? или скрипт долго будет грузить???
Я как-то не понял твой вариант, покажи в примере
Игорь_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) а работает? |
У меня всё работает так:
if($valid_email == true)
В мануал лазил, там именно == написано, а не ===