Nasıl?

4 Cevap php

Ben birden çok komut POST gereken bir form var. Bunu nasıl basit yolu yapabilirim?

Ben JavaScript, Curl veya Snoopy sınıfı ile yapılabilir biliyorum, ama gerçekten hangi Bunu yapmanın en basit ve en iyi yoludur.

Dizelerin bir e-posta gönderir ve bir php dosyası var, başka yerde barındırılıyor.

Her iki komut verileri toplamak gerekir.

4 Cevap

Bu konuda gitmek için en iyi yolu, ilk önce uzak komut dosyasına aldı (süzülmüş) POST verilerini CURL kullanması ardından, yerel komut için formu göndermek olacaktır. Sonra sadece tepki izlemek.

Sonra sadece e-posta göndermek ve yerel birinde uzak komut yanıtı işlemek.

Bunu yapmanın en kolay yolu, onlardan her birinden sonuç alınıyor ve ne sonuçlar yapmayacaksın, her komut dosyası (. Almak veya $. Sonrası ya $) bir $. Ajax göndermek için jQuery kullanmak için.

$(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: The serialize command is the data that is being sent. Take a look at the jQuery serialize function. It basically just takes the various inputs, selects, textareas, checkboxes, etc in your form, and puts them into a string like this:

myNameInput = john & aktif = on & whateverSelected = 3

Bu form elemanı adları ve değerleri sadece bir dize var. İşte ajax komutu ile harici komut dosyasına gönderilen budur.

Bir yan not, serialize yaparken, tüm form elemanları değil, sadece bir id bir name niteliği, sahip olduğunuzdan emin olun. Serialize onların id's hiç dikkat etmez. Sadece name.

Bu bir eylem kullanarak Çoklu Hosts Formu Gönder için çalışma sona erdi budur.

Ben her zamanki posta komut dosyası daha sonra Curl kullanarak ikinci konağa göndermek için kodu dahil yayınlanmıştır.

Aşağıda 'özü' kullanmak zorunda değil gibi, bazı küçük tweaks ile çalışmış gerçek kodudur.

Bulunan (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);

Ben sadece ASP ile bu yapmak zorunda. Ben bir etki bir e-posta işleme komut için bir form gönderebilir ve tek bir düğmeye tıklama ile farklı bir etki üzerinde bir MySQL veritabanı üzerinde eylem kaydetmek istedim. Bu aynı zamanda diğer durumlarda, herhangi bir sayıda yararlı olabilir.

Bir HTML form tanımı birden EYLEMLER için hiçbir yolu yoktur. Yani, sadece tek bir yerde, süreç formu için onu göndermek ve daha sonra başka bir yere formu "repost". Siz herhangi bir uzunluktaki bir script "zinciri" yapabilirsiniz.

Önce komut için bu ASP alt rountine ekleyin. PHP veya başka bir dil kullanıyorsanız, sadece kendi diline bu kodu çevirebilir ve konsept çalışacaktır.

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

Ardından, sürecin sonunda, sadece bu gibi alt bir çağrı ile bitirmek:

 RePost "http://www.SomeOtherDomain.com/SomeOtherScript.asp"

Gerekirse, tüm komut üzerinde zincirleme işlemleri tekrarlayın ve sonra sonunda muhtemelen resmi etki üzerinde bir sayfaya yönlendirme (Form nereden geldi) veya kullanıcılara bir başarı mesajı görüntülemek için bir şeyler yapmak istiyorum.