[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Проблема с header
WhiteKnight
У меня не получается ничего отправить в header
Что бы не писал и всегда ошибка


Warning: Cannot modify header information - headers already sent by (output started at Z:\home\localhost\www\WebProgramming\lessons\lessons\GuestBook2\index.php:1) in Z:\home\localhost\www\WebProgramming\lessons\lessons\GuestBook2\index.php on line 38



Спустя 6 минут, 23 секунды (29.08.2009 - 23:44) Bezdna написал(а):

Спустя 5 минут, 18 секунд (29.08.2009 - 23:49) WhiteKnight написал(а):
И причем тут utf
У меня и так файл в utf без BOM

И в .htaccess тоже прописал

AddDefaultCharset UTF-8

Спустя 1 час, 33 минуты, 56 секунд (30.08.2009 - 01:23) WhiteKnight написал(а):
Прочитал в книжке, что такое сообщение если есть пробел до <?php
и заголовки должны быть отправленны до формирования HTML страницы.

Код писать безобразный ? нечитабильный чтоли ?
а как же HTML ?

Спустя 27 минут, 56 секунд (30.08.2009 - 01:51) WhiteKnight написал(а):
В общем перенес все что связано с заголовком до создание формы

но все равно ругается

Warning: Cannot modify header information - headers already sent by (output started at Z:\home\localhost\www\WebProgramming\lessons\lessons\GuestBook2\index.php:8) in Z:\home\localhost\www\WebProgramming\lessons\lessons\GuestBook2\index.php on line 19

на вот эти строки

8: if ((trim($_POST['name'])) == '') echo "Вы не заполнили поле Имя <br>";

19: header ("location: ".$_SERVER['PHP_SELF']."?a=".rand(100,1));

а как мне по другому тогда сообщение об ошибке выводить


Спустя 9 минут, 31 секунда (30.08.2009 - 02:01) WhiteKnight написал(а):
поставил игнорировать ошибку
@header ("location: ".$_SERVER['PHP_SELF']."?a=".rand(100,1));

скрипт работает как и должен. но того Warning не отображается.
Скажите так можно делать ?
Это не критично ?

Спустя 25 минут, 40 секунд (30.08.2009 - 02:26) sergeiss написал(а):
Цитата (WhiteKnight @ 30.08.2009 - 02:51)
а как мне по другому тогда сообщение об ошибке выводить

Сохраняешь его в символьной строке и выводишь тогда, когда нужно. У тебя же стоит вывод в браузер
PHP
echo "Вы не заполнили поле Имя <br>";

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

Спустя 18 минут, 3 секунды (30.08.2009 - 02:44) WhiteKnight написал(а):
sergeiss
Спасибо за пояснение


Попробовал записать в переменную

if ((trim($_POST['name'])) == '') $er = 1;
elseif((trim($_POST['msg'])) == '') $er = 2;


но почему то результата я не могу из нее достать. не могу понять почему ничего не выводится

я отдельно после формы написал

switch ($er)
{
case 1: echo "Вы не заполнили поле имя <br>";
case 2: echo "Вы не заполнили поле Cообщение <br>";
case 3: echo "";
}


а ничего не выводится

и если да же так

echo $er; // должны быть код ошибки от 1 - 3
sad.gif

Спустя 6 часов, 51 минута, 3 секунды (30.08.2009 - 09:35) DeeKeiD написал(а):
PHP
if(empty($_POST['name'])) {
// выводим сообщение об ошибке в поле имя
}
elseif(empty(
$_POST['msg'])) {
// выводим сообщение об ошибке в поле сообщение
}
else {
// выполняем скрипт
}

Спустя 2 часа, 23 минуты, 6 секунд (30.08.2009 - 11:58) sergeiss написал(а):
У меня есть подозрение, что ты неправильно понимаешь суть процессов.

Приведи код в более полном виде (но в разумном количестве smile.gif).

Спустя 5 часов, 39 минут, 11 секунд (30.08.2009 - 17:38) WhiteKnight написал(а):
Да там логика вроде простая. проверяю данные которые ввелись в форме.
если все нормально то данные записываются в файл если нет то должна быть выведана в браузер ошибка в заполнении полей данных

вот и весь скрип.


PHP
<?php 
    header
("Content-Type: text/html; charset=utf-8"); 
    
// проверка на существование переменных
    
if(isset($_POST['name'])) $name $_POST['name']; else  null;
    if(isset(
$_POST['msg']))  $msg  $_POST['msg']; else null;
    
// проверяем введенные данные
    
if(isset($_POST['ok']))
        {
    if ((
trim($_POST['name'])) == '')  $er 1// ошибка с кодом 1
            
elseif((trim($_POST['msg'])) == ''$er 2// ошибка с кодом 2
            
elseif((file_exists("data.txt")) and (file_get_contents("data.txt")))
            {
                
// формируем данные которые будут сохранены
                
$tosave $name."\r\n".$msg;
                
$tosave $tosave."\r\n".file_get_contents("data.txt");
                
file_put_contents("data.txt"$tosave);
                
header ("location: ".$_SERVER['PHP_SELF']."?a=".rand(100,1));
                 
$er 3// нет ошибки
            
}
            else
                
file_put_contents("data.txt"$tosave."\r\n");
                
header ("location: ".$_SERVER['PHP_SELF']."?a=".rand(100,1));
                 
$er 3// нет ошибки
        
}

?>

    <form action = "?" method="POST">
        <input name="name" type="text" value="<?php echo htmlspecialchars($name); ?>" /><br/>
        <textarea name="msg" cols="40" rows="5">
        <?php echo htmlspecialchars($msg?>
        </textarea><br>
        <input name="ok" type="submit" />
    </form>
<?php
        
// вывдо содержимое на екран
        
if (file_exists("data.txt"))
        {
            echo 
nl2br(htmlspecialchars(file_get_contents("data.txt")));
        }

        
// вывод ошибок
        
switch ($er)
        {
            case 
1: echo "Вы не заполнили поле имя <br>";
            case 
2: echo "Вы не заполнили поле Cообщение <br>";
            case 
3: echo "";
        }


    



Спустя 8 минут, 43 секунды (30.08.2009 - 17:46) WhiteKnight написал(а):
Сейчас заметил, что с логикой выполнения не в порядке.
Заметил что скобок не хватает
вот так переписал вот этот кусок и уже лучше

PHP
else
                
file_put_contents("data.txt"$tosave."\r\n");
                
header ("location: ".$_SERVER['PHP_SELF']."?a=".rand(100,1));
                 
$er 3// нет ошибки
        
}



сейчас

PHP
else
            {
                
file_put_contents("data.txt"$tosave."\r\n");
                
header ("location: ".$_SERVER['PHP_SELF']."?a=".rand(100,1));
                 
$er 3// нет ошибки
            
}
        }
    else
    {
        
// вывод ошибок
        
switch ($er)
        {
            case 
1: echo "Вы не заполнили поле имя <br>";
            case 
2: echo "Вы не заполнили поле Cообщение <br>";
            case 
3: echo "";
        }
    }



есть еще не точность, если не заполнено первое поле а второе заполнено то пишет что оба не заполнены.

Спустя 28 минут, 13 секунд (30.08.2009 - 18:15) Гость_hara написал(а):
http://www.php.net/manual/en/control-structures.switch.php
break...

вы уверены что устанавливать какие то переменные после того как послали header с location
имеет смысл? хотя конечно в данном случае это не имеет значения

Спустя 5 минут, 26 секунд (30.08.2009 - 18:20) WhiteKnight написал(а):
Всё разобрался smile.gif
Всё дело было в скобках. Их много и напутал я в них

Быстрый ответ:

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