Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > PHP: Общие вопросы > отправка header


Автор: Ravanger 29.6.2007, 10:31
Доброго времени суток!

такая проблема, мне надо, чтоб при нажатии на кнопку происходил возврат на страницу с формой и при этом над формой выводилось сообщение, я пытался сделать это так:

Код

<?php
require_once("config.php");

session_start();

     $name=mysql_escape_string($_POST['name']);
     $class=mysql_escape_string($_POST['class']);
     $rassa=mysql_escape_string($_POST['rassa']);
     $description=mysql_escape_string($_POST['description']);
     $author=mysql_escape_string($_POST['author']);

if (session_is_registered('update'))
{
    echo "<font size=2 color=red>Персоонаж добавлен</font>";
    session_unregister('update');
}

if ($dbconn)
{
    $query = "INSERT INTO base VALUES('','".$name."','".$class."','".$rassa."','".$description."','".$author."')";
    $res = mysql_query($query) or die(mysql_error());
    session_register('update');
    header("location: index.html");
}
else
{
    echo "fuck";
}
?>

 и как результат естественно получаю

Код

Персоонаж добавлен
Warning: Cannot modify header information - headers already sent by (output started at b:\home\homesite\www\base.php:14) in b:\home\homesite\www\base.php on line 23


подскажите,пожалуйста,как подправить. зарание благодарен! и простите если подобная тема уже была

Автор: skyboy 29.6.2007, 10:44
даже если бы  сработал редирект, значит, ты бы вывел надпись "персонаж" добавлени и быстро-быстро поменял бы страницу, чтоб пользователь ничего не смог прочесть...
вывод "Персонаж добавлен" следует реализовать на той странице, на которую ты перенаправляешь пользователя. в твоем случае  - index.html

Автор: Kefir 29.6.2007, 10:49
хедеры могут посылаться только перед выводом любой инфы на экран. то есть
Код

echo "Hehe";
header("Location: blah.php");

не сработает. у вас то же самое:

Цитата(Ravanger @  29.6.2007,  10:31 Найти цитируемый пост)
Персоонаж добавлен
Warning: Cannot modify header information - headers already sent by (output started at b:\home\homesite\www\base.php:14) in b:\home\homesite\www\base.php on line 23

Ибо как видно перед отправкой хедеров выводится "Персоонаж добавлен". Если невозможно не выводить информацию, то используйте javascript для редиректа. хотя на самом деле просто не совсем понятно как и где должен быть редирект.

Автор: Ravanger 29.6.2007, 11:19
Цитата

вывод "Персонаж добавлен" следует реализовать на той странице, на которую ты перенаправляешь пользователя. в твоем случае  - index.html


это я собственно и пытаюсь сделать
Цитата

Если невозможно не выводить информацию, то используйте javascript для редиректа. 

ни js ни PEAR использовать не могу, т.к. это пишется под вап

Автор: BuShaRt 29.6.2007, 13:40
Ravanger, 
Если бы не эта ошибка, скрип вообще замкнулся бы smile
Установи, после создания персонажа метку в сессию, по которой фильтруй повторное добавление и блокируй в случае, если персонаж создан smile

Добавлено через 1 минуту и 43 секунды
Цитата(Ravanger @  29.6.2007,  11:19 Найти цитируемый пост)
это я собственно и пытаюсь сделать

Тогда вообще потрите строку, выводящую инфу о созданном персонаже

Цитата(Ravanger @  29.6.2007,  11:19 Найти цитируемый пост)
ни js ни PEAR использовать не могу, т.к. это пишется под вап

PEAR вполне можно юзать smile 

Автор: Ravanger 29.6.2007, 13:46
Цитата

Тогда вообще потрите строку, выводящую инфу о созданном персонаже


я бы потер но она надо... а вот как ее вывести вместе с формой эт трабл...

Автор: BuShaRt 29.6.2007, 13:53
Ravanger, 
Цитата(BuShaRt @  29.6.2007,  13:40 Найти цитируемый пост)
Установи, после создания персонажа метку в сессию, по которой фильтруй повторное добавление и блокируй в случае, если персонаж создан 


Автор: Ravanger 29.6.2007, 13:57
а можно на примере...плз

Автор: BuShaRt 29.6.2007, 14:02
Код


if ($dbconn and ($_GET['new']!=1))
{
    $query = "INSERT INTO base VALUES('','".$name."','".$class."','".$rassa."','".$description."','".$author."')";
    $res = mysql_query($query) or die(mysql_error());
    session_register('update');
    header("location: index.html&new=1");
}


примерно так, но это не сессия....
Если собираетесь игру делать, все равно придеться вникать в эти вопросы, почитайте статьи на http://phpclub.ru хотя бы)

Добавлено через 1 минуту и 22 секунды
ночь не спал, сижу жду началника, не в состояние думать, пример толковый не дам :(

Автор: Ravanger 29.6.2007, 14:21
Цитата

Если собираетесь игру делать, все равно придеться вникать в эти вопросы,


 smile  это не игра, скорее ресурс, скрипт полностью свою задачу выполняет, просто интересно стало оформить его по человечески
и вот тут загвоздочка, PEAR подключать не хочу(переписывать все прийдется) хотя с его использованием решить было бы проще

Автор: BuShaRt 29.6.2007, 15:35
Ravanger, 
PEAR можно подключить без переписывания и даже без установки подключать отдельные классы к тому же к данной задаче он ни какого отношения не имеет

Автор: HackMan 30.6.2007, 02:53
а нельзя ли так сделать редирект?

echo 'Данные обновлены. Через 3 секунды Вы будете перемещены на главную старницу.';
echo '<META HTTP-EQUIV="Refresh" CONTENT="3; URL=index.php"></head><body></body>';

Автор: Golda 30.6.2007, 10:23
Насколько я понимаю, Ravanger, Вы искали решение типа 

Код

<?php
require_once("config.php");

session_start();

if ($_SERVER['REQUEST_METHOD'] == 'POST') {

     $name=mysql_escape_string($_POST['name']);
     $class=mysql_escape_string($_POST['class']);
     $rassa=mysql_escape_string($_POST['rassa']);
     $description=mysql_escape_string($_POST['description']);
     $author=mysql_escape_string($_POST['author']);

     if ($dbconn) {
        $query = "INSERT INTO base VALUES('','".$name."','".$class."','".$rassa."','".$description."','".$author."')";
        $res = mysql_query($query) or die(mysql_error());
        session_register('update');
        header("location: index.html");
    }
} else {
    if (session_is_registered('update')) {
    echo "<font size=2 color=red>Персоонаж добавлен</font>";
    session_unregister('update');
   }
   ...
}

?>


(не тестировала: возможны мелкие баги)

Автор: Ravanger 30.6.2007, 19:28
Разобрался, спасибо всем

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)