Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
Самоучитель PHP 5 / 6 (3 издание). Авторы: Кузнецов М.В., Симдянов И.В. Программирование. Ступени успешной карьеры. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5/6. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. MySQL 5. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. C++. Мастер-класс в задачах и примерах. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Переадресация на нужную страницу!
 
 автор: Vados   (07.08.2006 в 23:36)   письмо автору
 
 

Всем привет!
Вот не могу понять, каким образом можно реализовать возможность при корректном логине трансфер на нужную страницу сайта?
Подскажите пожалуйста!
Вот сам сценарий:

<?php 
// авторизация  
if($_POST['action'] == "1")
  {
include 
'admin/config.php'// скрипт подключения к базе данных 
session_start(); //  начинаем сразу сессию 
// получаем значения логина и пароля из формы 
$login mysql_escape_string($_POST['login']); 
$password mysql_escape_string($_POST['password']); 
// проверяем наличие переданных логина и пароля в базе данных 
$res mysql_query('select login, password  
                    from id  
                    where login="'
.$login.'" and password="'.$password.'"'); 
$num mysql_num_rows($res); 
if (
$num == 0
  { 
  echo 
'Неверный логин и/или пароль!'
  exit; 
  } 
// записываем переменные сессии 
$_SESSION['login'] = $login
$_SESSION['password'] = $password
//здесь что-то для трансфера на нужную страницу
cur 
 
}
?>


Заранее спасибо!

   
 
 автор: cheops   (07.08.2006 в 23:38)   письмо автору
 
   для: Vados   (07.08.2006 в 23:36)
 

Можно поступить следующим образом
<?php  
// авторизация   
if($_POST['action'] == "1"
  { 
include 
'admin/config.php'// скрипт подключения к базе данных  
session_start(); //  начинаем сразу сессию  
// получаем значения логина и пароля из формы  
$login mysql_escape_string($_POST['login']);  
$password mysql_escape_string($_POST['password']);  
// проверяем наличие переданных логина и пароля в базе данных  
$res mysql_query('select login, password   
                    from id   
                    where login="'
.$login.'" and password="'.$password.'"');  
$num mysql_num_rows($res);  
if (
$num == 0)  
  {  
  echo 
'Неверный логин и/или пароль!';  
  exit;  
  }  
// записываем переменные сессии  
$_SESSION['login'] = $login;  
$_SESSION['password'] = $password;  
//здесь что-то для трансфера на нужную страницу 
  
header("Location: адрес_страницы_переадресации.php");
 } 
?>

   
 
 автор: Vados   (08.08.2006 в 00:04)   письмо автору
 
   для: cheops   (07.08.2006 в 23:38)
 

Привет!
Но у меня ничего не переадресовывает...
Я сделал как написано выше, но вот какое предупреждение:

Warning: Cannot modify header information - headers already sent by (output started at c:\www\test_site\rus\login.php:7) in c:\www\test_site\rus\login.php on line 87

Ещё вот хотел такое спросить, я dот тестировал и скажите, правильно ли я мыслю, что при выключенных cookie у меня пользователь не сможет попасть на страницу, которая требует предварительной авторизации.
На каждой такой странице - авторизированной я пишу вначале код:

<?php 
include 'admin/config.php';
session_start(); 

$login mysql_escape_string($_SESSION['login']); 
$password mysql_escape_string($_SESSION['password']); 

// проверяем логин и пароль из переменных сессии на наличие в базе данных 
$res mysql_query('select login, password  
                    from id  
                    where login="'
.$login.'" and password="'.$password.'"'); 
$num mysql_num_rows($res); 
if (
$num == 0
  { 
  echo 
'Ошибка авторизации, пожалуйста введите правильный логин и/или пароль!'
  exit; 
  } 
?>

Это нормально, то есть безопасно ли это? Можно ли обмануть данный сценарий?
Заранее спасибо за помощь!

   
 
 автор: ec_stasis   (08.08.2006 в 01:04)   письмо автору
 
   для: Vados   (08.08.2006 в 00:04)
 

Заголовок должен посылаться перед каким-либо выводом. Т.е. не должно быть операторов echo, а также сообщений об ошибках от РНР перед вызовом функции header().
Есть альтернативный вариант: включть буфферизацию вывода
- в php.ini output_buffering = On
или
- в самом начале скрипта вызвать функцию ob_start(), котораю и инициализирует ту самую буфферизацию вывода

   
 
 автор: Vados   (08.08.2006 в 01:55)   письмо автору
 
   для: ec_stasis   (08.08.2006 в 01:04)
 

Не совсем понимаю!
В таком случае, если я буду использовать функцию ob_start() у меня всё, что находится в скрипте всё будет буферизироваться, но зачем мне это?
Кроме этого всё остаётся по прежнему, трансфера на указанную мной страницу нет.
И что значит поддавить все сообщения об предупреждениях? Для чего это, что мне это даст?
Спасибо!

   
 
 автор: RV   (08.08.2006 в 03:51)   письмо автору
 
   для: Vados   (08.08.2006 в 01:55)
 

http://phpfaq.ru/headers

   
 
 автор: cheops   (08.08.2006 в 11:57)   письмо автору
 
   для: Vados   (08.08.2006 в 00:04)
 

Куки, сессии, отправка заголовков должны происходить до отправки любой информации в окно браузера, т.е. до любого вывода echo, print или непосредственного вывода вне тэгов <?php и ?>. Это связано с тем, что HTTP-заголовки передаются перед всеми данными и когда происходит вывод в окно браузера PHP вынужден их пред этим отослать клиенту. Поэтому повторно, после вывода информации в браузер он не может работать с куками, сессиями и отправлять заголовки.
Если вывод текста до отправки заголовков необходим следует воспользоваться функциями управления вывода, позволяющих задерживать вывод информации в браузер.
http://www.softtime.ru/group/id_group=12
http://www.softtime.ru/forum/ead.php?id_forum=1&id_theme=147
http://www.softtime.ru/forum/read.php?id_forum=1&id_theme=148
Вы можете также включить буфферизацию, если имеете доступ к конфигурационному файлу php.ini
output_buffering = On


http://www.softtime.ru/forum/read.php?id_forum=1&id_theme=8484

   
 
 автор: Lelik   (08.08.2006 в 04:25)   письмо автору
 
   для: cheops   (07.08.2006 в 23:38)
 

попробуй вместо

header("Location: адрес_страницы_переадресации.php");


написать такой код

<?php
echo '<html><head><meta http-equiv="Refresh" content="0; page.php"></head></html>';
// или
echo '<script language="javascript">location.replace("page.php")</script>';
?>


но лучше конечно настроить РНР для переадресации заголовком, то есть хедером

   
 
 автор: Lelik   (08.08.2006 в 04:30)   письмо автору
 
   для: cheops   (07.08.2006 в 23:38)
 

а лучше изменить данный код например так

<?php   
// авторизация    
if($_POST['action'] == "1")  
  {  
include 
'admin/config.php'// скрипт подключения к базе данных   
session_start(); //  начинаем сразу сессию   
// получаем значения логина и пароля из формы   
$login mysql_escape_string($_POST['login']);   
$password mysql_escape_string($_POST['password']);   
// проверяем наличие переданных логина и пароля в базе данных   
$res mysql_query('select login, password    
                    from id    
                    where login="'
.$login.'" and password="'.$password.'"');   
if (
mysql_num_rows($res) > 0)   
  {   
// записываем переменные сессии   
$_SESSION['login'] = $login;   
$_SESSION['password'] = $password;   
//здесь что-то для трансфера на нужную страницу  
  
header("Location: адрес_страницы_переадресации.php");  
  }   
else
  exit(
"Error");
 }  
?>

   
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования