Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
MySQL на примерах. Авторы: Кузнецов М.В., Симдянов И.В. PHP Puzzles. Авторы: Кузнецов М.В., Симдянов И.В. C++. Мастер-класс в задачах и примерах. Авторы: Кузнецов М.В., Симдянов И.В. MySQL 5. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. Программирование. Ступени успешной карьеры. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Предотвращение появления пустого окна
 
 автор: Хулиган   (28.06.2006 в 14:55)   письмо автору
 
 

Есть файл mail.php. В нем только одна функция отправки письма и больше ничего нет. Никаких тегов и т.п.
Когда письмо отправляется, этот mail.php появляется в браузере в виде пустой страницы.
Зачем это пустое окно, и как можно от него избавиться?

   
 
 автор: RV   (28.06.2006 в 14:58)   письмо автору
 
   для: Хулиган   (28.06.2006 в 14:55)
 

вставить в конец
Header("Location: index.php");

   
 
 автор: valenok   (28.06.2006 в 15:04)   письмо автору
 
   для: Хулиган   (28.06.2006 в 14:55)
 

Иди закрыть средствами JS

   
 
 автор: Хулиган   (28.06.2006 в 15:57)   письмо автору
 
   для: valenok   (28.06.2006 в 15:04)
 

Наугад вписал такой скрипт: window.close(); - окно закрывается, правда при этом успевает промелькнуть в браузере. Можно ли сделать на js, чтобы вообще не появлялось?

а вот Header("Location: index.php"); выдает варнинг
Warning: Cannot modify header information - headers already sent by (output started at z:\home\mysite.ru\www\mail.php:2) in z:\home\mysite.ru\www\mail.php on line 30
и окно не закрывается. Что сделал не так? Вот весь mail.php:


<?
$recieve
$_POST["body"];
$subj="bla-bla";
$bound="bla_bla_web";
$headers="From: \"user\n";
$headers.="To: myemail@bk.ru\n";
$headers.="Subject: $subj\n";
$headers.="Mime-Version: 1.0\n";
$headers.="Content-Type: multipart/alternative; boundary=\"$bound\"\n";
$body="--$bound\n";
$body.="Content-type: text/html; charset=\"windows-1251\"\n";
$body.="Content-Transfer-Encoding: 8bit\n\n";
$body.=$recieve;
$body.="--$bound--\n\n";
mail("myemail@bk.ru"$subj$body$headers);
Header("Location: index.php");
?>

   
 
 автор: valenok   (28.06.2006 в 16:10)   письмо автору
 
   для: Хулиган   (28.06.2006 в 15:57)
 

ob_start()
--
А чем вам не нравится то что он мелькает?
Ну может можно поставить невидимость..

   
 
 автор: Trianon   (28.06.2006 в 18:09)   письмо автору
 
   для: Хулиган   (28.06.2006 в 15:57)
 

может стоит всё же убрать пустые строки вначале скрипта?

   
 
 автор: Хулиган   (28.06.2006 в 21:52)   письмо автору
 
   для: Trianon   (28.06.2006 в 18:09)
 

Это мало чем помогает: вместо пустого окна вываливается ещё раз index.php.
А он уже один раз есть, второй не нужен.

   
 
 автор: Fddd   (28.06.2006 в 22:03)
 
   для: Хулиган   (28.06.2006 в 21:52)
 

Я наверно не в кассу, но я не могу понять что вы хотите?

Если у вас mail.php а в нём этот код(без Header("Location: index.php")) и вы просто заходите прямо на mail.php то Конечно будет БЕЛЫЙ ЭКРАН!!!

   
 
 автор: Хулиган   (28.06.2006 в 23:14)   письмо автору
 
   для: Fddd   (28.06.2006 в 22:03)
 

Может я не совсем понятно описал то, что мне нужно...
У меня есть окно (index.php). В нем заполняется форма для отправки на мыло.
По нажатию кнопки в этой форме мне нужно отправить эту форму на мыло.
У формы action="mail.php"
Сам код отправки находится в mail.php.
Нажимаю кнопку, вызывается mail.php, код в нем отправляет форму на мыло.
Всё прекрасно, вот только кроме того, что отправлено письмо, mail.php вдобавок генерит и вываливает в браузер пустое окно. Это окно мне нафиг не нужно. И никак от него не избавлюсь :(
Код mail.php приведён выше. Если в нем в конце стоит Header("Location: index.php"), то вместо пустого окна mail.php выдаёт мне index.php. Это окно у меня уже есть в браузере, и второй раз оно мне тоже не нужно, как и пустое окно. Нужно просто отправить письмо и больше ничего, никаких окон mail.php не должен выдавать.
Это все, чего я хочу...

   
 
 автор: Fddd   (28.06.2006 в 23:33)
 
   для: Хулиган   (28.06.2006 в 23:14)
 

Я правильно ли вас понял:
У вас на index.php есть html форма, после нажатия на кнопку, ОТКРЫВАЕТСЯ НОВОЕ окно mail.php.
Если да то у вас что то с формой, надо чтобы открывалось в томже окне.
Форма:
<form name="FormName" action="mail.php" method="post">
<input name="Name" type="text" value="">
<input type="submit" value="Send">
</form>

   
 
 автор: Хулиган   (29.06.2006 в 00:07)   письмо автору
 
   для: Fddd   (28.06.2006 в 23:33)
 

Вы меня натолкнули на решение проблемы. Сделал так:
В коде index.php вставил такой код:

<?  if (!isset ($_GET["send"])){?>
<script>
    window.close();
</script>
<?  }
...
...


index.php у меня при первом открытии получает "send". Это как признак первого открытия (мыло не отправлено). Давлю кнопку "отправить", mail.php отправляет письмо, и вызывает index.php через Header("Location: index.php");, но уже без "send". Если "send" не установлена - это значит, что мыло было отправлено, и окно index можно закрывать. И второе окно не появляется, и окно с только что отправленой формой закрывается автоматом.
Всё получилось очень удачно.

Спасибо всем!

   
 
 автор: Trianon   (29.06.2006 в 09:52)   письмо автору
 
   для: Хулиган   (28.06.2006 в 21:52)
 

Действительно... с таким подходом это мало чем поможет.

   
 
 автор: RV   (29.06.2006 в 10:34)   письмо автору
 
   для: Trianon   (29.06.2006 в 09:52)
 

Header("Location: index.php");
сдесь index.php было дано для примера. можно было бы поподставлять свои странички и посмотреть что будет. Поставьте вместо index.php ту страницу, куда вам надо перейти после отправки. и внимательно прочитайте http://ru.php.net/header

   
 
 автор: Хулиган   (29.06.2006 в 15:19)   письмо автору
 
   для: RV   (29.06.2006 в 10:34)
 

Ещё раз спасибо за подсказку с Header(), но она не решала моей первоначальной задачи.
Вы невнимательно читали мой пост: мне никуда не надо переходить после отправки.
Коль скоро Header("Location:...."); осуществляет редирект, и всё-таки должен куда-нибудь перейти, то мне пришлось направить этот навязчивый редирект в русло, где он не мешает, и заставить его выполнить полезное действие: закрыть окно с формой, которая была отмылена и мне уже не нужна.

Чтобы было понятно, как я воспользовался Header(), приведу фрагменты кода из файлов zakaz.php и mail.php


//это файл zakaz.php. В нем есть форма, которую нужно заполнить и отправить на мыло:

<form name=frm_mail action="mail.php" name="body" method="post">
...
...
// В zakaz.php можно попасть двумя путями:
// 1. Со страницы, где пользователь выбирает товар (настоящий index.php), при этом
//    $_GET["send"] содержит его выбор, в соответствие с которым заполняется 
//    форма frm_mail и передается в mail.php для отправки.
// 2. Из файла mail.php после отправки переданой в него формы на мыло.
//    При этом $_GET["send"] либо пустой (признак успешной отправки), либо равен 0
//    (признак неудачи при отправке).

// Далее код, который определяет, откуда мы попали в zakaz.php и в соответствие с этим
// либо готовит форму для отправки, либо закрывает окно zakaz.php.

<?  if (!isset ($_GET["send"])){?>
<script>
        //если мы здесь, $_GET["send"] - пустой, значит мы попали в zakaz.php
        // из mail.php и почта отправлена успешно. Информируем и закрываем
        //окно с формой.
        window.close();
        alert("Ваш заказ отправлен.");</script>
<?  }
    
$senddata=$_GET["send"];
    if (
$senddata == 0){?>
<script>
        //если мы здесь, $_GET["send"]==0, значит мы попали в zakaz.php
        // из mail.php и при отправке возникли ошибки. Информируем и закрываем
        //окно с формой.
        window.close();
        alert("Не удалось отправить заказ.");</script>
<?  }
    
//если мы проскочили через два предыдущих условия, и оказались здесь,
    //значит это первое наше попадание в zakaz.php (со страницы index.php)
    //$_GET["send"] содержит выбор пользователя, который далее будем оформлять
    //и передавать в mail.php для отправки.


Тут файл mail.php:


...
...
if (mail("myemail@bk.ru", $subj, $body, $headers)) {
   //отправили успешно, вызываем "родительское окно" с пустым send
   $ret="Location: zakaz.php";
}
else {
   //отправка провалилась, передаем в zakaz.php send==0 (признак неудачи)
   $ret="Location: zakaz.php/?send=0";
}
Header($ret);
?>


Вот такая несложная схема взаимодействия трех файлов (index.php, zakaz.php, mail.php)

   
 
 автор: RV   (29.06.2006 в 15:23)   письмо автору
 
   для: Хулиган   (29.06.2006 в 15:19)
 

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

   
 
 автор: Хулиган   (29.06.2006 в 15:56)   письмо автору
 
   для: RV   (29.06.2006 в 15:23)
 

К сожалению, вы опять невнимательно прочитали мой код:) Там есть такие вещи:
alert("Ваш заказ отправлен.")
и
alert("Не удалось отправить заказ.")
Пользователь информируется. Естественно для краткости был опущен полный текст алерта (он растянут со всеми подробностями на 6 строк).
Я понимаю, что у вас такое мнение, что я зелёный новичок и не знаю таких элементарных вещей, как информирование пользователя или замену index.php на zakaz.php :)
В области web-программирования - бесспорно да, никогда раньше не интересовался этой отраслью, а в остальном за 15 лет написал достаточное количество программ, и знаю о взаимодействии с юзером не понаслышке.
Ещё раз спасибо за помощь.

   
 
 автор: RV   (29.06.2006 в 16:13)   письмо автору
 
   для: Хулиган   (29.06.2006 в 15:56)
 

а если у меня js отключены?

   
 
 автор: Хулиган   (29.06.2006 в 22:07)   письмо автору
 
   для: RV   (29.06.2006 в 16:13)
 

а если у вас отключен js, то дальше первой страницы вы не продвинитесь, и информировать вас будет не о чем.

   
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования