У меня есть форма, которая мне нужна для отправки по нескольким сценариям. Как я могу сделать это самым простым способом?
Я знаю, что это можно сделать с помощью класса Javascript, Curl или Snoopy, но на самом деле это самый простой и лучший способ сделать это.
Один из сценариев отправляет электронную почту, и это файл php, другой – в другом месте.
Нужно собирать данные по обеим сценариям.
Лучшим способом для этого было бы сначала отправить форму на ваш локальный скрипт, а затем использовать CURL для отправки (отфильтрованных) данных, полученных на удаленный скрипт. Тогда просто понаблюдайте за ответом.
Затем просто отправьте электронное письмо и обработайте ответ с удаленного сценария в локальном.
Самый простой способ сделать это – использовать jQuery для отправки $ .ajax (или $ .post или $ .get) для каждого скрипта, получения результата от каждого из них и выполнения действий с результатами.
$(document).ready( function(){ $('#mySubmitButton').click(function(){ //Send data to the email script $.post( 'send-email.php', $('form').serialize(), function(data, textStatus) { //data is the result from the script alert(data); }); //Send data to the other script $.post( 'my-other-script.php', $('form').serialize(), function(data, textStatus) { //data is the result from the script alert(data); }); }); });
update: команда serialize – это данные, которые отправляются. Посмотрите на функцию сериализации jQuery. Он в основном просто принимает различные входы, выбирает, текстовые поля, флажки и т. Д. В вашей форме и помещает их в строку следующим образом:
myNameInput = & Джон активный = на & whateverSelected = 3
Это всего лишь строка ваших имен элементов формы и их значений. Это то, что отправлено во внешний скрипт с помощью команды ajax.
Обратите внимание, что при выполнении сериализации убедитесь, что все ваши элементы формы имеют атрибут имени , а не только идентификатор . Сериализация не обращает внимания на их идентификаторы . Только их имя .
Это то, что в конечном итоге работало над отправкой формы нескольким хостам, используя одно действие.
Я отправил обычный почтовый скрипт, затем включил код для отправки на второй узел с помощью Curl.
Ниже приведен фактический код, который работал с некоторыми незначительными трюками, например, не нужно использовать «extract».
Найдено в ( http://php.dzone.com/news/execute-http-post-using-php-cu ):
//extract data from the post extract($_POST); //set POST variables $url = 'http://domain.com/get-post.php'; $fields = array( 'lname'=>urlencode($last_name), 'fname'=>urlencode($first_name), 'title'=>urlencode($title), 'company'=>urlencode($institution), 'age'=>urlencode($age), 'email'=>urlencode($email), 'phone'=>urlencode($phone) ); //url-ify the data for the POST foreach($fields as $key=>$value) { $fields_string .= $key.'='.$value.'&'; } rtrim($fields_string,'&'); //open connection $ch = curl_init(); //set the url, number of POST vars, POST data curl_setopt($ch,CURLOPT_URL,$url); curl_setopt($ch,CURLOPT_POST,count($fields)); curl_setopt($ch,CURLOPT_POSTFIELDS,$fields_string); //execute post $result = curl_exec($ch); //close connection curl_close($ch);
Я просто должен был сделать это с ASP. Я хотел бы отправить форму в скрипт обработки электронной почты на одном домене и записать действие в базе данных MySQL в другом домене одним нажатием кнопки. Это также может быть полезно в любых других ситуациях.
Невозможно иметь несколько ДЕЙСТВИЙ в определении HTML-формы. Итак, просто отправьте его в одно место, обработайте форму и затем «перетащите» форму в другое место. Вы можете сделать это в цепочке скриптов любой длины.
Сначала добавьте эту подстраницу ASP в свой скрипт. Если вы используете PHP или какой-либо другой язык, вы можете просто перевести этот код на свой родной язык, и концепция будет работать.
sub RePost( Destination ) RePostString = "<HTML><BODY>" & vbCRLF if( (Trim(Destination) <> "") and (Request.ServerVariables("REQUEST_METHOD") = "POST") ) then RePostString = RePostString & "<FORM METHOD=POST NAME=""RePostForm"" ACTION=""" & Destination & """>" & vbCRLF for each Item in request.form if( not len(item) <= 0 ) Then RePostString = RePostString & "<INPUT TYPE=HIDDEN NAME=""" & item & """ VALUE=""" & Request.form( item ) & """>" & vbCRLF end if next RePostString = RePostString & "</FORM>" & vbCRLF & _ "<script language=""JavaScript"" type=""text/javascript""> window.onLoad = document.RePostForm.submit(); </script>" else RePostString = "<CENTER><H1><BR><BR>Sorry! Internal Scripting Error Encountered!</H1></CENTER>" & vbCRLF end if RePostString = RePostString & "</BODY></HTML>" Response.Write( RePostString ) end sub
Затем, в конце вашего процесса, просто закончите с вызовом на sub, как это:
RePost "http://www.SomeOtherDomain.com/SomeOtherScript.asp"
Если необходимо, повторите процессы цепочки на всех ваших сценариях, а затем, в конце концов, вы, вероятно, захотите перенаправить на страницу своего исходного домена (откуда появилась форма) или сделать что-то, чтобы отобразить сообщение об успешности для ваших пользователей.