|
автор: elenaki (24.09.2004 в 15:03) |
|
| можно ли по одному клику на Submit послать данные формы сразу двум скриптам? | |
|
|
|
|
|
|
|
для: elenaki
(24.09.2004 в 15:03)
| | ну если в одну форму воткнуть другую...
<form>
..это в первой форме
<form>
//это во второй форме
</form
</form>
это я поверхностно показал... | |
|
|
|
|
|
|
|
для: LimP
(24.09.2004 в 15:06)
| | Нет, так не сработает. Будет посылаться на тот action, который указан в верхней форме. | |
|
|
|
|
|
|
|
для: elenaki
(24.09.2004 в 15:03)
| | Одновременно нельзя, но ведь можно последовательно передавать управление скриптам. А какая задача? | |
|
|
|
|
автор: elenaki (24.09.2004 в 16:06) |
|
|
для: glsv (Дизайнер)
(24.09.2004 в 15:24)
| | у меня была система заказов on-line. клиент выбирал товар, проставлял желаемое количество, удалял,
если что не так, потом заполнял форму со своими данными и нажимал Send. на наш и клиентский e-mail
приходило письмо с заказом. клиенту еще посылалась ссылка для активации (чтобы не вводили какой
попало e-mail, а активизировали заказ со своего). после активации заказа, менеджер видел его в своей
базе и мог начинать собирать.... теперь задача - организовать оплату через интернет. с банком догово-
рились. мне прислали 3 файла и 2 таблицы для примера. я там кое-что подправила, но в конце концов
мы добились (хоть убейте, не знаю как!), что платеж проходит. на тех скриптах, из примера. потом я
взялась подправить их скрипты, чтобы они вписались в мой алгоритм и дизайн. и ни фига не работает.
попытаюсь объяснить, как должно работать (может, сама в процессе объяснения пойму :) )
допустим, клиент выбрал нужный ему товар и пришел на страницу заполнения данных - complete_order.php
ему дается форма, на выбор для розницы или для опта, не заполнив которую, он не уйдет
в форме есть скрытые поля, требуемые банком (код магазина, код валюты), есть поля, заполняемые из
переменной сессии (номер заказа = sessionid)
после успешного заполнения формы, клиент нажимает Send и данные передаются скрипту send_order.php
этот скрипт первым делом вставляет необходимые банку данные в таблицу Transactions, потом нужные
мне данные о клиенте и его заказе в таблицу orders, потом посылает клиенту сообщение с его заказом
(ссылки активации больше нет, т.к. преполагается непосредственная оплата по карточке) и убивает
сессию.
но перед этим надо послать еще те данные, которые внесены в таблицу Transactions банку. для этого
есть форма со скрытыми полями и в action стоит скрипт, обрабатывающий транзакцию на сервере банка.
я сначала подумала, может, когда я нажимаю submit, чтоб послать данные в банк, у меня уже нет сессии и,
следовательно, я не могу использовать ее переменные. но при просмотре view source я вижу, что поля
формы заполнены правильно.
вот я и решила не делать еще одну кнопку submit в send_order.php (он, собстсвенно, и не показывался
покупателю, делал свое дело и передавал управление следующему скрипту), а послать данные на скрипт
банка одновременно с переходом на send_order.php | |
|
|
|
|
|
|
|
для: elenaki
(24.09.2004 в 16:06)
| | >мы добились (хоть убейте, не знаю как!)
:)))))
>этот скрипт первым делом вставляет необходимые банку данные
>в таблицу Transactions
>но перед этим надо послать еще те данные, которые внесены в
>таблицу Transactions банку.
Не могу понять в чем проблема. Если скрипт вставляет необходимые данные в таблицу без проблем, то что же мешает эти самые данные отправить по почте( пусть даже опять их вытащив из базы :))) | |
|
|
|
|
автор: elenaki (24.09.2004 в 16:48) |
|
|
для: Igorek
(24.09.2004 в 16:19)
| | надо их отправлять не по почте, а через форму методом POST, но в этом скрипте у меня есть форма,
которая отсылает данные следующему (моему) скрипту и игнорирует банковский. поэтому я и спросила,
можно ли сразу двум скриптам послать по одному submit. значит, нельзя. делать две кнопки нельзя, т.к.
клиент может и не нажать нужную. может, на самом деле попробовать их вытащить из базы? | |
|
|
|
|
|
|
|
для: elenaki
(24.09.2004 в 16:48)
| | Хм... вообще всё, что передаёт форма (методом GET или POST) можно передать и без неё... только реализовывать это следует через заголовки и сокеты... | |
|
|
|
|
автор: elenaki (26.09.2004 в 15:34) |
|
|
для: cheops
(24.09.2004 в 23:00)
| | про заголовки не хочу даже думать. ничего более ужасного в жизни не встречала. на любое действие PHP отвечает "Заголовки уже посланы". а кто его просил посылать??? главное, никогда не поймешь, в чем ошибка. твердит как попугай "посланы" и все... даже просто перейти с одного скрипта на другой и то не может. тьфу! в CFML есть чудесный тэг location, к которому можно прицепить и строку URL с параметрами, а можно и не цеплять. в PHP спасаюсь Java-script'ом. придется заставлять пользователя два раза тыкать на Send. выведу ему на экран им же введенные данные якобы для проверки и кнопку "Послать на ..." :) | |
|
|
|
|
|
|
|
для: elenaki
(26.09.2004 в 15:34)
| | За что же так не любить заголовки. С ними надо дружить... А если ПХП говорит, что заголовки уже посланы это значит, что в браузере пользователя уже выведена какая-то информация, пусть даже один маааленький пробел. А если это не устраивает, то, как хеопс уже говорил можно использовать сокеты.
В любом случае, я считаю, заставлять пользователя нажимать два раза кнопку "отправить" - это зверство. А если есть проблемы, то можно всегда попросить совета на форуме. | |
|
|
|
|
|
|
|
для: elenaki
(26.09.2004 в 15:34)
| | Да я тоже не люблю функцию header() :))) - она компактна и удобна, но инкапсулирует действия по отправке HTTP-заголовков, лучше по честному переслать их через HTML. Строки
<?php
header("Location: http://www.softtime.ru");
?>
|
и
<?php
echo "<HTML><HEAD>
<META HTTP-EQUIV='Location' CONTENT='0; URL=http://www.softtime.ru'>
</HEAD></HTML>";
?>
|
полностью аналогичны, но если во втором случае всё очевидно - куда ж ещё тэг META поставишь как не в начало документа, то в первом слишком велико искушение послать заголовок из середины документа или из конца (будто других забот нет как следить был вывод на страницу или нет). Это, конечно, можно всё обойти функциями управления вывода, создав буффер, но это лишнее усложнение кода.
PS Главное назначение языков программирования высокого уровня - чтобы человек мог программировать машину оперируя своими концепциями, а не думать концепциями машины. Если описание документа (заголовки) должны идти в начале это понятно и укладывается в обычные представления, а если функция сопровождается туманным описанием "Вызывать в начале, иначе ничего не получится" - это не дело, но это скорее недостаток описания, в котором следовало бы более подробно описать принцип работы с заголовками, да и HTTP вообще. | |
|
|
|
|
|
|
|
для: cheops
(26.09.2004 в 16:31)
| | >PS Главное назначение языков программирования высокого
>уровня - чтобы человек мог программировать машину оперируя
>своими концепциями, а не думать концепциями машины.
Думать как машина может и не надо, но представлять как она устроена и работает, по-моему необходимо. | |
|
|
|
|
|
|
|
для: Igorek
(26.09.2004 в 18:15)
| | Конечно, я описал идеал :))) Пока для того, чтобы стать хорошим программистом на любом языке программирования, следует думать как машина :))) | |
|
|
|
|
|
|
|
для: cheops
(26.09.2004 в 18:20)
| | Сдается мне, что этот идеал недостижим, потому что у каждого свои концепции и думает каждый по-своему. А написать язык программирования, который бы понимал решаемую задачу, описанную каждым человеком по-своему, вряд ли возможно. Да и тем более, тогда бы все стали программистами и мы стали бы никому не нужны. :(( | |
|
|
|
|
|
|
|
для: Igorek
(26.09.2004 в 18:31)
| | Идиалы вообще по определению не достижимы :) Это общая тенденция делать программирование проще, PHP это один из элементов этой эволюции (сделать изначально безумно сложную область сетевого программирования доступной кому угодно)
>Да и
>тем более, тогда бы все стали программистами и мы стали бы
>никому не нужны. :((
Это неизбежно, раньше программисты шагу не могли ступить без системного администратора (не путать с сегодняшними сисадминами), которые не только могли сами программировать, но и до винтиков знали машину, потом пользователи не могли без программистов, сейчас новички не могут без продвинутого пользователя, дальше всё понятно - сейчас идёт просто бум компьютеризации (многие мои знакомые покупают его просто в качестве бытового прибора, а не для работы, в том понимании как это понималось ещё недавно).
Не смотря на эти изменения системные администраторы (в изначальном понимании этого слова) по прежнему нужны - человек, который чувствует сеть, может собрать кластер и т.п. очень ценен - на них меньше спрос и их поэтому стало меньше, но цена от этого его не падает.
Сейчас бум в программировании - программистов нужно больше и больше, потом будет неизбежный спад, но хорошие программисты будут всегда нужны.
PS К тому же человек со способностями всегда найдёт чем заняться, вокруг тьма всякой всячены :)))
PPS Сила программиста только в динамике, нельзя изучить одну область, стать в ней гуру и больше никогда ничего не изучать, пожиная лавры - так не получится - нужно постоянное движение и поиск - тогда не зависимо от прогресса и эволюции всегда можно найти себе место. | |
|
|
|
|
автор: elenaki (27.09.2004 в 12:06) |
|
|
для: cheops
(26.09.2004 в 19:00)
| | есть способ, который работает и меня вполне удовлетворяет, к тому же занимает гораздо меньше места, чем все вышеупомянутые:
print "<script>window.location.href='index.php'</script>"; | |
|
|
|