2009-10-18 36 views
5

Tôi có một biểu mẫu mà tôi cần POST cho nhiều tập lệnh. Làm thế nào tôi có thể làm điều này một cách đơn giản nhất?Làm thế nào để? Mẫu Đăng lên Nhiều Vị trí

Tôi biết nó có thể được thực hiện với Javascript, Curl hoặc Snoopy lớp học, nhưng thực sự đó là cách đơn giản nhất và tốt nhất để làm điều này.

Một trong các tập lệnh gửi email và đó là tệp php, tệp còn lại được lưu trữ ở nơi khác.

Cần thu thập dữ liệu trên cả hai tập lệnh.

Trả lời

5

Cách tốt nhất để đi về nó sẽ là trước tiên gửi biểu mẫu tới tập lệnh cục bộ của bạn, sau đó sử dụng CURL để POST dữ liệu (đã lọc) đã được nhận tới tập lệnh từ xa. Sau đó, chỉ cần theo dõi phản hồi.

Sau đó, chỉ cần gửi email và xử lý phản hồi từ tập lệnh từ xa trong tập lệnh cục bộ của bạn.

+0

Tôi đồng ý với điều này, tôi sẽ gửi cho kịch bản cục bộ trước, vệ sinh/v.v. sau đó gửi đến một từ xa. – Chris

1

Đây là những gì cuối cùng làm việc để Gửi biểu mẫu cho nhiều máy chủ lưu trữ bằng một hành động.

Tôi đã đăng tập lệnh thư thông thường sau đó bao gồm mã để đăng lên máy chủ thứ hai bằng cách sử dụng Curl.

Dưới đây là mã thực tế hoạt động với một số chỉnh sửa nhỏ, như không phải sử dụng 'trích xuất'.

Tìm thấy tại (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); 
3

Cách đơn giản nhất để làm điều này là sử dụng jQuery để gửi $ .ajax (hoặc $ .post hoặc $ .get) cho mỗi kịch bản, lấy kết quả từ mỗi người trong số họ và làm những gì bạn sẽ có với kết quả.

$(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: Lệnh serialize là dữ liệu đang được gửi đi. Hãy xem hàm serialize của jQuery. Về cơ bản nó chỉ mất nhiều đầu vào, lựa chọn, textareas, hộp kiểm tra, vv trong mẫu của bạn, và đặt chúng vào một chuỗi như thế này:

myNameInput = john & hoạt động = on & whateverSelected = 3

Nó chỉ là một chuỗi các tên phần tử biểu mẫu của bạn và các giá trị của chúng. Đó là những gì được gửi đến kịch bản bên ngoài thông qua lệnh ajax.

Lưu ý phụ, khi thực hiện tuần tự hóa, hãy đảm bảo rằng tất cả các phần tử biểu mẫu của bạn có thuộc tính tên, không chỉ là id. Số sê-ri không chú ý đến số của số của chúng. Chỉ có tên của họ.

+0

một trong các tập lệnh có phải là một vị trí https không? Tôi không thấy các giá trị truyền vào kịch bản của bạn ở đâu. Nó có phải là serialize không? – Codex73

1

Tôi chỉ phải làm điều này với ASP. Tôi muốn đăng một mẫu lên một kịch bản xử lý email trên một tên miền và ghi lại hành động trên cơ sở dữ liệu MySQL trên một tên miền khác với một cú nhấn nút. Điều này cũng có thể hữu ích trong bất kỳ số tình huống nào khác.

Không có cách nào để có nhiều ACTIONS trên định nghĩa biểu mẫu HTML. Vì vậy, chỉ cần gửi nó vào một địa điểm, xử lý biểu mẫu và sau đó "đăng lại" biểu mẫu đến một vị trí khác. Bạn có thể làm điều này trong một chuỗi "chuỗi" có độ dài bất kỳ.

Trước tiên, hãy thêm mã phụ ASP này vào tập lệnh của bạn. Nếu bạn đang sử dụng PHP hoặc một số ngôn ngữ khác, bạn chỉ có thể dịch mã này sang ngôn ngữ của riêng mình và khái niệm sẽ hoạt động.

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 

Sau đó, ở phần cuối của quá trình của bạn, chỉ cần kết thúc với một cuộc gọi đến các tiểu như thế này:

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

Nếu cần thiết, lặp lại quá trình chaining trên tất cả các kịch bản của bạn, và sau đó trong cuối cùng bạn có thể muốn chuyển hướng đến một trang trên tên miền ban đầu của bạn (nơi biểu mẫu xuất phát) hoặc làm điều gì đó để hiển thị thông báo thành công cho người dùng của bạn.

Các vấn đề liên quan