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

Форум PHP

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

 

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

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

тема: Два обработчика для одной формы.
 
 автор: Axxil   (13.01.2005 в 16:53)   письмо автору
 
 

Возможно это?
Если да то как.
Если нет то есть ли альтернатива.

   
 
 автор: cheops   (13.01.2005 в 17:15)   письмо автору
 
   для: Axxil   (13.01.2005 в 16:53)
 

Здесь существует несколько подходов:
1) Создание в форме несколько кнопок, а в обработчике отслеживать какая из кнопок нажата.
2) Подстановка имени обработчика в поле action динамически, средствами PHP, один из вариантов такой формы приведён в теме http://www.softtime.ru/forum/read.php?id_forum=4&id_theme=1495
3) Каскадный обработчик - в форме один обработчик и одна кнопка, но имеется скрытое поле hiddenfield (здесь возможна привязка к выпадающему списку, если выбор должен осуществляться непосредственно в форме), которое определяет тип вторичного обработчика, которому передаётся управление в обработчике формы:
<?php
  $action 
"index.php";
  switch(
$_POST['hiddenfield'])
  {
    case 
1// Заголовок
      
$action "addtitlform.php";
      break;
    case 
2// Абзац
      
$action "addparform.php";
      break;
    case 
3// Ссылка
      
$action "addanchform.php";
      break;
    case 
4// Новая статья
      
$action "addanchartform.php";
      break;
    case 
5// Таблица из cvs-файла
      
$action "addtableform.php";
      break;
  }
  echo 
"<HTML><HEAD>
        <META HTTP-EQUIV='Refresh' CONTENT='0; URL=
$action?
                          id_article="
.$_POST['id_article']."&
                          pos="
.$_POST['pos']."&
                          id_page="
.$_POST['id_page']."'>
        </HEAD></HTML>"
;
?>

По последнему варианту построена система администрирования контента сайта в нашей второй книге "PHP 5. Разработка многофункционального Web-сайта."

   
 
 автор: Axxil   (13.01.2005 в 17:30)   письмо автору
 
   для: cheops   (13.01.2005 в 17:15)
 

Я имею ввиду 2 ОДНОВРЕМЕННЫХ обработчика.
Скажем первый обработчик отправляет данные на платёжную систему, а второй отсылает данные формы на email.
Даже больше, к первому обработчику нет доступа.
Это скрипт на сайте платёжнй системы

   
 
 автор: cheops   (13.01.2005 в 18:32)   письмо автору
 
   для: Axxil   (13.01.2005 в 17:30)
 

Какие параметры принимает обработчик на сайте платёжной системы и каким методом POST или GET, в таких случаях тоже прибегают к каскадной обработке - промежуточный обработчик принимает данные от формы, отправляет письмо и отправляет данные платёжно системе.

   
 
 автор: Axxil   (13.01.2005 в 18:39)   письмо автору
 
   для: cheops   (13.01.2005 в 18:32)
 

Платёжная система принимает три скрытых параметра методом POST.
>> промежуточный обработчик принимает данные от формы, отправляет письмо и отправляет данные платёжно системе.

Письмо отправить несложно. Загвоздка в том как из промежуточного обработчика обратиться к платёжной системе?
код кнопки ведущей на платёжку

form method=post action=https://www.paysystem.com/cgi-bin/sbuyers/purchase.2c >
<INPUT type="submit" value="Order"> 
<input type=hidden name=sid value=1111> 
<input type=hidden name=product_id value=1100> 
<input type=hidden name=quantity value=1> 
</form>

мне надо чтоб при нажатии ещё и письмо отсылалось.

   
 
 автор: elenaki   (13.01.2005 в 22:15)   письмо автору
 
   для: Axxil   (13.01.2005 в 18:39)
 

у меня тоже была такая проблема. но я так и решила. посылаю письмо-уведомление ПОСЛЕ ответа платежной системы. она ведь возращает ссылку или на ok.html (ok.php) или на notok.html (notok.php)

   
 
 автор: Axxil   (14.01.2005 в 12:37)   письмо автору
 
   для: elenaki   (13.01.2005 в 22:15)
 

А если мне надо узнать сколько человек собиралось заплатить.
То есть именно нажали кнопку оплатить.

   
 
 автор: Axxil   (14.01.2005 в 14:04)   письмо автору
 
   для: Axxil   (14.01.2005 в 12:37)
 

Неужели не существует никакой хитрости чтоб решить эту проблему?
Блин, а ведь очень надо...

   
 
 автор: XPraptor   (14.01.2005 в 14:57)   письмо автору
 
   для: Axxil   (14.01.2005 в 14:04)
 

Или я чего недогоняю, или... Что тебе мешает дописать в кнопке строчку onclick="твоя_функция_отправки()"?

   
 
 автор: Axxil   (14.01.2005 в 15:25)   письмо автору
 
   для: XPraptor   (14.01.2005 в 14:57)
 

>>твоя_функция_отправки()
На каком языке?
JavaScript?
Если да то если можно приведите код или ссылку на функцию отправки почты на JavaScript.
А то я с джавой не очень дружу :(

   
 
 автор: XPraptor   (14.01.2005 в 15:36)   письмо автору
 
   для: Axxil   (14.01.2005 в 15:25)
 

Да хоть на Perl! Если не хочешь писать на Jave заголовок функции, то напиши так:

onclick="<?php send_my_mail() ?>"

А шде нить в дебрях подключенного модуля пишешь:

function send_my_mail()
{
считываешь из базы сколько уже послали
пишешь в базу сколько послали +1
}

   
 
 автор: Axxil   (14.01.2005 в 15:50)   письмо автору
 
   для: XPraptor   (14.01.2005 в 15:36)
 

так в send_my_mail() надо ещё параметры передать из формы!
Что раньше происходит событие onclick или заполнение массива $_POST?

   
 
 автор: XPraptor   (14.01.2005 в 16:25)   письмо автору
 
   для: Axxil   (14.01.2005 в 15:50)
 

Ты же говорил что хочешь знать только сколько оплатили!
А так нужно конечно писать полный скрипт на Jave или VBScript.
Принцип такой:
Пишешь имя функции которую вызываешь при клике
<SCRIPT Language="Javascript">
function send_my_mail()
{
var param1;
var param2;
...
param1=document.имя_формы.имя_элемента.value;
param2=document.имя_формы.имя_элемента.value;
window.open('http://www.твоястраница.ru/sendmsg.php?prm1='+param1+'&prm2='+param2,'send_message','width=700,height=700,top='+(screen.height/2-350)+', left='+(screen.width/2-350)+', scrollbars=no,resizable=no,status=no,toolbar=no,menubar=no');

}
</SCRIPT>

а уже на своей странице обрабатываешь GET переменные которые пришли.

   
 
 автор: Axxil   (14.01.2005 в 17:16)   письмо автору
 
   для: XPraptor   (14.01.2005 в 16:25)
 

Гениально!
Паралельный процесс. И всё. То над чем я уже 2 дня бьюся решено.
Спасибо тебе огромное.

   
 
 автор: Axxil   (14.01.2005 в 17:19)   письмо автору
 
   для: XPraptor   (14.01.2005 в 16:25)
 

И ещё вопрос можно как нибудь убить окно из файла sendmess.php?
Ладно, сам нашёл как
<body onload="window.close()">
Спасибо ещё раз.

   
 
 автор: cheops   (14.01.2005 в 16:12)   письмо автору
 
   для: XPraptor   (14.01.2005 в 15:36)
 

>onclick="<?php send_my_mail() ?>"
Вряд ли так получится, так как PHP-код между тэгами <?php и ?> выполнится на сервере, а клиенту уйдёт только HTML, который он сгенерирует, если такой будет иметь место. Здесь нужно именно JavaScript, так как событие onclick происходит уже на машине клиента, где PHP уже нет.

PS elenaki как-то почту при помощи JavaScript отправляет... но в последней теме что-то она была не в восторге от этого способа :)

   
Rambler's Top100
вверх

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