[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Проблема "Cannot modifity header information"
Yurien
Здраствуйте, прошу помочь разобраться со следующей проблемой:

накорпел я скрипт, который проверяет введенные данные, затем создает DOM документ, сохраняет в файл, отправляет уведомление на почту, переадресует посетителя к просмотру комментариев.
Все вроде бы работает, кроме функции отправки почты:

<?php ob_start (); ?>
<html>
<head>
</head>
<body>
<br>
<br>
<div align="center" margin-left="20%">
<table width="90%" border="0" align="center">
<form action="" method="post">
<tr>
<td colspan="2"><div align="right">Ваше имя:</div></td>
<td><div align="left"><input type="text" name="name"></div></td>
</tr>
<tr>
<td colspan="2"><div align="right">Город:</div></td>
<td><div align="left"><input type="text" name="city"></div></td>
</tr>
<tr>
<td colspan="2"><div align="right">E-mail*:</div></td>
<td><div align="left"><input type="text" name="mail"></div></td>
</tr>
<tr>
<td width="137"><div align="right"><img src="$spamcheck" width="130" height="23" /></div></td>
<td width="146"><div align="right">Число на рисунке:</div></td>
<td><div align="left"><input type="text" name="spamcheck"></div></td>
</tr>
<tr>
<td colspan="3" align="center" valign="middle"><br><textarea name="comment" wrap="vitual" rows="15" cols="80"></textarea></td>
</tr>
<tr>
<td colspan="3" align="center" valign="middle"><br><input type="submit" value="Отправить сообщение" ></td>
</tr>
</form>
</table>
</div>
<br>
<br>
<div align="center"><p>* Внимание! Ваш e-mail будет сохранен только в базе данных моего веб-сайта и ни в коем случае не будет показан публично.</p></div>
<?php
$date = date("d.m.y - H:i");
$name = @$_POST['name'];
$city = @$_POST['city'];
$mail = @$_POST['mail'];
$spamcheck = @$_POST['spamcheck'];
$comment = @$_POST['comment'];
$file = "files/xml/guestbook.xml";


function check_mess () {

global $name, $city, $mail, $comment, $spamcheck;

function valid_email ($mail) { return (ereg('^[-!#$%&\'*+\\./0-9=?A-Z^_`a-z{|}~]+'.'@'.'[-!#$%&\'*+\\/0-9=?A-Z^_`a-z{|}~]+\.'.'[-!#$%&\'*+\\./0-9=?A-Z^_`a-z{|}~]+$',$mail)); }
error_reporting(63); if($name=="") { print "<body bgcolor=#3a6ea5><script language=\"Java Script\">history.back(-1);alert('Ошибка! Неправильно введено имя')</script></body>"; exit; }

error_reporting(63); if($city=="") { print "<body bgcolor=#3a6ea5><script language=\"Java Script\">history.back(-1);alert('Ошибка! Неправильно указан город')</script></body>"; exit; }

error_reporting(63); if(valid_email($mail)) { } else { print "<body bgcolor=#3a6ea5>
<script language=\"Java Script\"> history.back(-1);alert('Ошибка! Неправильно указан e-mail')</script></body>"; exit; }

error_reporting(63); if($spamcheck=="12345124321") { } else { print "<body bgcolor=#3a6ea5><script language=\"Java Script\">history.back(-1);alert('Ошибка! Не верное число')</script></body>"; exit; }

error_reporting(63); if($comment=="") { print "<body bgcolor=#3a6ea5><script language=\"Java Script\">history.back(-1);alert('Ошибка! Не введен текст')</script></body>"; exit; }
save_mess();

}

if (isset($comment) and $comment) {
check_mess();
}

function save_mess () {

global $link, $date, $name, $city, $mail, $comment, $file;

$doc = new DOMDocument("1.0", "UTF-8");
if(!@$doc->load($file))
{
$root = $doc->appendChild($doc->createElement("document"));
}
else
{
$root = $doc->firstChild;
}

$item = $root->appendChild($doc->createElement("comment"));
$telo = $item->appendChild($doc->createElement("dateguest", $date));
$telo = $item->appendChild($doc->createElement("nameguest", $name));
$telo = $item->appendChild($doc->createElement("cityguest", $city));
$telo = $item->appendChild($doc->createElement("mailguest", $mail));
$telo = $item->appendChild($doc->createElement("pguest", $comment));

$doc->save($file);

send_mail();
}

function send_mail () {
global $mail, $name;
$to = $mail;
$from = "здесь я указываю свой почтовый сервер";
$subject = "Вы написали сообщение на сайте ....";
$message = "Здраствуйте, уважаемый".$name."\n\n Благодарю Вас за оставленное сообщение на моем веб-сайте: ....... \n Если Вы задали в своем сообщении вопрос, то в ближайшее время я отвечу. \n Ответ можно просмотреть по ссылке: ........;
mail ( $to, $subject, $message, "From: $from\r\nX-Priority: 1 (Highest)" );
Header("Location: .......");
exit;

}

?>

Подскажите в чем проблема с функцией отправки почты?

p.s.: если кто-нибудь также может помочь по-поводу java-скрипта, скажите пожалуйста, используя функцию:

print "<body bgcolor=#3a6ea5><script language=\"Java Script\">history.back(-1);alert('Ошибка! Неправильно указан город')</script></body>

команда alert не срабатывает и окно не появляется, вся строка после print однако выпечатывается в исходный код в документе веб-обозревателя (но не видна при просмотре страницы).





Спустя 7 часов, 12 минут, 44 секунды (30.01.2009 - 07:48) twin написал(а):
Попробуйте вот так, только с кодировкой определитесь, если используете windows-1251, то напишите её вместо utf-8:
PHP
function send_mail () {
global $mail, $name;
$from = "здесь я указываю свой почтовый сервер";
$subject = "Вы написали сообщение на сайте ....";
$message = "Здраствуйте, уважаемый".$name."\n\n Благодарю Вас за оставленное сообщение на моем веб-сайте: ....... \n Если Вы задали в своем сообщении вопрос, 
  то в ближайшее время я отвечу. \n 
  Ответ можно просмотреть по ссылке: ........"
;
$headers = "From: $from\nX-Mailer: $from\nContent-Type: text/plain; charset=utf-8 \r\n";
mail ( $mail, $subject, $message, $headers );
Что касаемо JS, то лучше так:
PHP
print "<body bgcolor=#3a6ea5>
<script type=\"text/javascript\" language=\"Java Script\">
window.onload = function comback(){history.back(-1); 
alert('Ошибка! Не верное число');}</script></body>"
;

Спустя 1 час, 41 минута, 49 секунд (30.01.2009 - 09:30) twin написал(а):
Только сейчас обратил внимание на название темы. У Вас вывод в поток выше отправки заголовка, по этому и ругается. Поставьте весь блок php выше вывода, то есть вот этого:
HTML
<html>
<head>
</head>
.
.
либо закончите буфферизацию. В самом конце скрипта напишите это:
PHP
$buffer ob_get_contents();   
ob_end_clean(); 
echo 
$buffer;

Спустя 5 часов, 2 минуты, 46 секунд (30.01.2009 - 14:33) Guest написал(а):
twin, огромное спасибо за ответ. С функцией окончания буферизации теперь все заработало.
А с Java Script странно: ссылка на форму гостевой (это php-страница, которая добавляется командой include: if(link=write) {......... include(files/guestbook/guestbook.php);}) выглядит так. Я пробовал сделать отдельный php-документ, запускаю его, все в порядке, команда alert работает, и неприхотливо. Но в виде include-файла к главному документу (rus.php) не работает.

Спустя 33 минуты, 48 секунд (30.01.2009 - 15:07) twin написал(а):
Попробуйте так:
print "
PHP
print"<script>
window.onload = function comback(){history.back(-1); 
alert('Ошибка! Не верное число');}<script>"
;

И посмотрите пути у ссылок. Они должны быть относительно того файла, к которому подключается.

Спустя 22 минуты, 10 секунд (30.01.2009 - 15:29) Yurien написал(а):
Решил протестить снова скрипт, оказывается вот что приходит на почту вместо нормального текста:


п п я п я я п я п я п , я п п п п п п я п п я я п п

п п п пЁп п п я я п п я п п п я я п п п п п п п п я п п п я п п п п п п п п п п п п п -я п п я п : ...................................
п я п п п я п п п п п п п я п п п п я п п п я п п п п п п п я п я , я п п п п п п п п я п п п я п п я я п я п п я я .
п я п п я п п п п п п я п я п п я я п я я п п я я я п п п : ..............

Все страницы сохранены в кодировке utf-8.

Честно сказать - я не знаю как направить скрипт в окно по ссылке. Ссылка при вызве формы выглядит как rus.php?link=write.

Спустя 9 часов, 13 минут, 27 секунд (31.01.2009 - 00:42) Yurien написал(а):
twin, сейчас попробовал отредактировать еще много-много раз, письмо теперь отправляется в норм. кодировке, но (вот проблема) тема письма перестала отображаться.
По прежнему не могу осилить ошибку "cannot modifity header inf.".

Спустя 50 минут, 14 секунд (31.01.2009 - 01:32) twin написал(а):
Сейчас нет сил, завтра попробую переписать Ваш скрипт. Скорее всего нужно кодировать тему, потому что есть проблемы с многобайтной кодировкой. Попробуйте пока тему написать латиницей. А ругается на хидер, значит или буфферизация не в порядке или если нет её, то нужно вывод убирать. Третьего не дано, если пробелы не считать.

Спустя 14 часов, 36 минут, 14 секунд (31.01.2009 - 16:09) twin написал(а):
Да и переписывать то особо нечего, попробуйте так:
PHP
<?php ob_start (); ?>
<html>
<head>
</head>
<body>
<br>
<br>
<div align="center" margin-left="20%">
<table width="90%" border="0" align="center">
<form action="" method="post">
<tr>
<td colspan="2"><div align="right">Ваше имя:</div></td>
<td><div align="left"><input type="text" name="name"></div></td>
</tr>
<tr>
<td colspan="2"><div align="right">Город:</div></td>
<td><div align="left"><input type="text" name="city"></div></td>
</tr>
<tr>
<td colspan="2"><div align="right">E-mail*:</div></td>
<td><div align="left"><input type="text" name="mail"></div></td>
</tr>
<tr>
<td width="137"><div align="right"><img src="$spamcheck" width="130" height="23" /></div></td>
<td width="146"><div align="right">Число на рисунке:</div></td>
<td><div align="left"><input type="text" name="spamcheck"></div></td>
</tr>
<tr>
<td colspan="3" align="center" valign="middle"><br><textarea name="comment" wrap="vitual" rows="15" cols="80"></textarea></td>
</tr>
<tr>
<td colspan="3" align="center" valign="middle"><br><input type="submit" value="Отправить сообщение" ></td>
</tr>
</form>
</table>
</div>
<br>
<br>
<div align="center"><p>* Внимание! Ваш e-mail будет сохранен только в базе данных моего веб-сайта и ни в коем случае не будет показан публично.</p></div>
<?php
$date 
date("d.m.y - H:i");
$name = @$_POST['name'];
$city = @$_POST['city'];
$mail = @$_POST['mail'];
$spamcheck = @$_POST['spamcheck'];
$comment = @$_POST['comment'];
$file "files/xml/guestbook.xml";


function 
check_mess () {

global 
$name$city$mail$comment$spamcheck;

function 
valid_email ($mail) { return (ereg('^[-!#$%&\'*+\\./0-9=?A-Z^_`a-z{|}~]+'.'@'.'[-!#$%&\'*+\\/0-9=?A-Z^_`a-z{|}~]+\.'.'[-!#$%&\'*+\\./0-9=?A-Z^_`a-z{|}~]+$',$mail)); }
error_reporting(63); if($name=="") { print "<body bgcolor=#3a6ea5><script >window.onload = function comback(){history.back(-1);alert('Ошибка! Неправильно введено имя')}</script></body>"; exit; }

error_reporting(63); if($city=="") { print "<body bgcolor=#3a6ea5><script >window.onload = function comback(){history.back(-1);alert('Ошибка! Неправильно указан город')}</script></body>"; exit; }

error_reporting(63); if(valid_email($mail)) { } else { print "<body bgcolor=#3a6ea5>
<script >window.onload = function comback(){ history.back(-1);alert('Ошибка! Неправильно указан e-mail')}</script></body>"
; exit; }

error_reporting(63); if($spamcheck=="12") { } else { print "<body bgcolor=#3a6ea5><script >window.onload = function comback(){history.back(-1);alert('Ошибка! Не верное число')}</script></body>"; exit; }

error_reporting(63); if($comment=="") { print "<body bgcolor=#3a6ea5><script >window.onload = function comback(){history.back(-1);alert('Ошибка! Не введен текст')}</script></body>"; exit; }
save_mess();

}

if (isset(
$comment) and $comment) {
check_mess();
}

function 
save_mess () {

global 
$link$date$name$city$mail$comment$file;

$doc = new DOMDocument("1.0""UTF-8");
if(!@
$doc->load($file))
{
$root $doc->appendChild($doc->createElement("document"));
}
else
{
$root $doc->firstChild;
}

$item $root->appendChild($doc->createElement("comment"));
$telo $item->appendChild($doc->createElement("dateguest"$date));
$telo $item->appendChild($doc->createElement("nameguest"$name));
$telo $item->appendChild($doc->createElement("cityguest"$city));
$telo $item->appendChild($doc->createElement("mailguest"$mail));
$telo $item->appendChild($doc->createElement("pguest"$comment));

$doc->save($file);

send_mail();
}
function 
send_mail() {
global 
$mail$name;
$from "test@test.ts";
$subject "Вы написали сообщение на сайте ....";
$message "Здраствуйте, уважаемый <b>".$name."</b>!\n\n Благодарю Вас за оставленное сообщение на моем веб-сайте: ....... \n Если Вы задали в своем сообщении вопрос, 
  то в ближайшее время я отвечу. \n 
  Ответ можно просмотреть по ссылке: ........"
;
$headers "From: $from\nX-Mailer: $from\nContent-Type: text/html; charset=utf-8 \r\n";
mail $mail$subject$message$headers );
}
$buffer ob_get_contents();   
ob_end_clean(); 
echo 
$buffer;
По крайней иере у меня все работает...

Спустя 21 час, 55 минут, 35 секунд (4.02.2009 - 14:04) Guest написал(а):
Никак. Ковырял, не помогло. этот файл (с именем form.php) инклудится к файлу на уровень выше (rus.php). и при отправке программой заголовка скрипт выдает ошибку.

Все-таки огромное спасибо за помощь.

Спустя 2 часа, 13 минут, 10 секунд (4.02.2009 - 16:17) twin написал(а):
Так а заголовок то где? Вот это
PHP
<?
echo 
$buffer;
уберите из этого файла и поставьте в том файле, к которому подключаете, ниже заголовка. Он выведет все не из инклюда, а из буфера (переменной $buffer). И не будет ругаться.
Быстрый ответ:

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