Такой код (скрипт, обрабатывающий данные формы для отсылки их на мыло):
проверяем, данные пришли именно из нашей формы?
если ДА, то include("file2.php")
иначе header("Location: на главную страницу сайта");
---------------file2.php-----------------
проверяем поля формы не были пустыми?
если НЕТ, то
чистим данные от спецсимволов, формируем тело письма
include("file3.php")
header("Location: на страницу формы, где сообщается, что письмо отправлено");
иначе header("Location: на страницу формы для повторного ввода данных");
---------------file3.php-----------------
include("class.phpmailer.php")
отправляем письмо
НО, header, выделенный красным, никуда не отправляет. Я уже куда только его не переставлял. Заменял его на meta-тег с атрибутом refresh, так прикол в том, что какой адрес для этого meta ни укажи, он всё равно перенаправляет браузер на главную страницу сайта.
На локальном сервере (под управлением Винды) всё работает, на удалённом сервере под управлением АльтЛинукс (php 4.3.11) красный header упирается по полной.
Может, кто в силах объяснить эту мистику? Может, проблема в большой вложенности скриптов (много include)? Как быть?
header("Location ...") - в одном случае работает, в другом - нет (крыша едет по полной...)
Модератор: Модераторы разделов
-
Dionysius
- Сообщения: 523
- ОС: Manjaro
-
serzh-z
- Бывший модератор
- Сообщения: 8259
- Статус: Маньяк
- ОС: Arch, Fedora, Ubuntu
Re: header("Location ...") - в одном случае работает, в другом - нет
В file3.php возникают ошибки и он после него ничего уже не выполняется?
-
Dionysius
- Сообщения: 523
- ОС: Manjaro
Re: header("Location ...") - в одном случае работает, в другом - нет
Всё прекрасно работает, письмо отправляется.
Более того, до или после красного header'а можно вписать какой-нибудь код (echo "bla-bla", например) и он выполняется. А этот header просто забивает на всё...
-
The Ripper
- Сообщения: 33
Re: header("Location ...") - в одном случае работает, в другом - нет
До выполнения header в браузер ничего не должно быть выведено, с помощью echo, например.
Вместо include, используй лучше include_once.
Да и не проше ли сделать все это одним скриптом?
Вместо include, используй лучше include_once.
Да и не проше ли сделать все это одним скриптом?
-
Dionysius
- Сообщения: 523
- ОС: Manjaro
Re: header("Location ...") - в одном случае работает, в другом - нет
The Ripper писал(а): ↑14.03.2006 15:02До выполнения header в браузер ничего не должно быть выведено, с помощью echo, например.
Вместо include, используй лучше include_once.
Да и не проше ли сделать все это одним скриптом?
В браузер-то ничего не выводится. Поменял все include на include_once - не помогло. Одним скриптом - неудобно, форм будет несколько, а отправка сообщений одинаковая.
Вот как работает скрипт:
Код: Выделить всё
---------------file1.php---------------
$pos=strrpos($_SERVER["HTTP_REFERER"], "/");
$href=substr($_SERVER["HTTP_REFERER"], 0, $pos);
@include_once("../domens.php");
$flag=0;
foreach ($domens as $val)
{
if (($href=="http://www.".trim($val)) || ($href=="http://".trim($val))) {$flag=1; break;}
}
if ($flag)
{
@include_once("chk_".$_POST["formname"].".php");
}
else header("Location: http://mysite.ru");
--------------domens.php------------------
содержит массив имён зеркал сайта
-----------------------chk_myform.php------------------
if (trim($_POST["val1"]) && trim($_POST["val2"]) && и т. д.)
{
$pattern="/[\'*\"*\`*\\*]/";
$val1=preg_replace($pattern, "", $_POST["val1"]);
и т. д.
$subject="бла-бла";
$body.="бла-бла".$val1;
и т. д.
@include_once("file2.php");header("Location: http://mysite.ru/заявка?some_val=".$_POST["some_num"]."&some_val2=some_num");
Код: Выделить всё
}
else header("Location: http://mysite.ru/заявка?some_val=".$_POST["some_num"]."&some_val2=another_num");
---------------------------------------file2.php-----------------------------------------
setlocale(LC_ALL, 'ru_RU.CP1251');
require("../class.phpmailer.php");
$mail = new PHPMailer();
$mail->SetLanguage("ru", "../");
$mail->IsSMTP();
$mail->Host = "localhost;localhost";
$mail->From = "robot@mysite.ru";
$mail->FromName = "Robot";
$mail->AddAddress("my_addr@mysite.ru");
$mail->WordWrap = 50;
$mail->IsHTML(true);
$mail->Subject = $subject;
$mail->Body = $body;
$mail->Send();Есть ещё идеи?
-
KiWi
- Бывший модератор
- Сообщения: 2521
- Статус: статус, статус, статус
-
Dionysius
- Сообщения: 523
- ОС: Manjaro
-
The Ripper
- Сообщения: 33
Re: header("Location ...") - в одном случае работает, в другом - нет
Цитата:
Посмотри включаемые *.php-файлы на предмет того, чтоб после "?>" не было никаких пробелов и т.д.
Remember that header() must be called before any actual output is sent, either by normal HTML tags, blank lines in a file, or from PHP. It is a very common error to read code with include(), or require(), functions, or another file access function, and have spaces or empty lines that are output before header() is called.
Посмотри включаемые *.php-файлы на предмет того, чтоб после "?>" не было никаких пробелов и т.д.
-
Dionysius
- Сообщения: 523
- ОС: Manjaro
Re: header("Location ...") - в одном случае работает, в другом - нет
The Ripper, благодарю за помощь. B) header отказывался выполняться по причине предстоящего перед ним кода, если код удалить, header работает. Надо скрипт переписать.