накорпел я скрипт, который проверяет введенные данные, затем создает 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 () { |
Что касаемо JS, то лучше так:
PHP |
print "<body bgcolor=#3a6ea5> |
Спустя 1 час, 41 минута, 49 секунд (30.01.2009 - 09:30) twin написал(а):
Только сейчас обратил внимание на название темы. У Вас вывод в поток выше отправки заголовка, по этому и ругается. Поставьте весь блок php выше вывода, то есть вот этого:
HTML |
<html> <head> </head> . . |
либо закончите буфферизацию. В самом конце скрипта напишите это:
PHP |
$buffer = ob_get_contents(); |
Спустя 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) не работает.
А с 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 "
print "
PHP |
print"<script> |
И посмотрите пути у ссылок. Они должны быть относительно того файла, к которому подключается.
Спустя 22 минуты, 10 секунд (30.01.2009 - 15:29) Yurien написал(а):
Решил протестить снова скрипт, оказывается вот что приходит на почту вместо нормального текста:
п п я п я я п я п я п , я п п п п п п я п п я я п п
п п п пЁп п п я я п п я п п п я я п п п п п п п п я п п п я п п п п п п п п п п п п п -я п п я п : ...................................
п я п п п я п п п п п п п я п п п п я п п п я п п п п п п п я п я , я п п п п п п п п я п п п я п п я я п я п п я я .
п я п п я п п п п п п я п я п п я я п я я п п я я я п п п : ..............
Все страницы сохранены в кодировке utf-8.
Честно сказать - я не знаю как направить скрипт в окно по ссылке. Ссылка при вызве формы выглядит как rus.php?link=write.
п п я п я я п я п я п , я п п п п п п я п п я я п п
п п п пЁп п п я я п п я п п п я я п п п п п п п п я п п п я п п п п п п п п п п п п п -я п п я п : ...................................
п я п п п я п п п п п п п я п п п п я п п п я п п п п п п п я п я , я п п п п п п п п я п п п я п п я я п я п п я я .
п я п п я п п п п п п я п я п п я я п я я п п я я я п п п : ..............
Все страницы сохранены в кодировке utf-8.
Честно сказать - я не знаю как направить скрипт в окно по ссылке. Ссылка при вызве формы выглядит как rus.php?link=write.
Спустя 9 часов, 13 минут, 27 секунд (31.01.2009 - 00:42) Yurien написал(а):
twin, сейчас попробовал отредактировать еще много-много раз, письмо теперь отправляется в норм. кодировке, но (вот проблема) тема письма перестала отображаться.
По прежнему не могу осилить ошибку "cannot modifity header inf.".
По прежнему не могу осилить ошибку "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 (); ?> |
По крайней иере у меня все работает...
Спустя 21 час, 55 минут, 35 секунд (4.02.2009 - 14:04) Guest написал(а):
Никак. Ковырял, не помогло. этот файл (с именем form.php) инклудится к файлу на уровень выше (rus.php). и при отправке программой заголовка скрипт выдает ошибку.
Все-таки огромное спасибо за помощь.
Все-таки огромное спасибо за помощь.
Спустя 2 часа, 13 минут, 10 секунд (4.02.2009 - 16:17) twin написал(а):
Так а заголовок то где? Вот это
PHP |
<? |
уберите из этого файла и поставьте в том файле, к которому подключаете, ниже заголовка. Он выведет все не из инклюда, а из буфера (переменной $buffer). И не будет ругаться.