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

Форум PHP

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

 

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

вид форума:
Линейный форум (новые сообщения вниз) Структурный форум

тема: Предотвращение появления пустого окна

Сообщения:  [1-10]   [11-18] 

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

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

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

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

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

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

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

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

   
 
 автор: Хулиган   (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 в 10:34)   письмо автору
 
   для: Trianon   (29.06.2006 в 09:52)
 

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

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

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

   
 
 автор: Хулиган   (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 можно закрывать. И второе окно не появляется, и окно с только что отправленой формой закрывается автоматом.
Всё получилось очень удачно.

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

   
 
 автор: 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>

   
 
 автор: Хулиган   (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 не должен выдавать.
Это все, чего я хочу...

   

Сообщения:  [1-10]   [11-18] 

Форум разработан IT-студией SoftTime
Rambler's Top100
вверх

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