LinuxQuestions.org

LinuxQuestions.org (/questions/)
-   Programming (http://www.linuxquestions.org/questions/programming-9/)
-   -   PHP Automatic Form Action (http://www.linuxquestions.org/questions/programming-9/php-automatic-form-action-895254/)

dstu 08-03-2011 05:45 AM

PHP Automatic Form Action
 
Hello,

I'm trying to prepare a php page that gets data by post, processes it and should redirect the visitor to another page, to which we also send other data by post.

As I can't use a simple HTML Form, I tried the fsockopen, but it only gives me back the result and doesn't GO to that page.

How should I do this?

Thanks a lot.

David

Nominal Animal 08-04-2011 04:31 AM

You have basically two options.

Your PHP script can act as a reverse proxy, and do the POST request on behalf of the client, echoing the response to the client. You could do this using fopen() alone, if you construct the necessary HTTP request yourself, and your PHP configuration has allow_url_fopen enabled. In any case, note that you need to output the headers (everything before first empty line) using header(). You could also use the PECL extension pecl_http to do the reverse proxy query.

The common solution is to generate an intermediate page, which will be shown to the user. This page will contain the a hidden form, with values set in your PHP script. The form will be automatically submitted by a simple Javascript onload handler in the body element; it only needs to call the submit() method on the hidden form.

There are major differences between the limitations of the two methods. The former method can forward files in the POST request, while it is extremely difficult in the latter; you may have to modify the second POST handler to get file upload to work at all using the latter method. The latter method will also show the user an intermediate page, unless you use a hidden frame to target the initial POST request at. There may be other considerations too; for example, if there is a lot of data, the latter method will effectively transfer it three times during the process between the client and the servers, while the former method will transfer it only once between the client and the first server, and once between the two servers.

In general, if your POST data may contain file upload fields, go with the first method. If you know your POST data will not contain file upload fields, and relying on Javascript at the client end is not a problem, go with the second method.

Hope this helps.

dstu 08-08-2011 06:38 AM

Quote:

Originally Posted by Nominal Animal (Post 4433357)
Your PHP script can act as a reverse proxy, and do the POST request on behalf of the client, echoing the response to the client. You could do this using fopen() alone, if you construct the necessary HTTP request yourself, and your PHP configuration has allow_url_fopen enabled. In any case, note that you need to output the headers (everything before first empty line) using header(). You could also use the PECL extension pecl_http to do the reverse proxy query.

I don't need to "echo" a server's response to the client. I need a client to POST data to my page, get the data, manipulate it locally and then POST the new data I build to a 3rd party server, but in addition, I need the visitor to be routed to that page, just as if he pressed a SUBMIT button on my page, but it should be done automatically. I tried several PHP functions, such as socket_connect, fsockopen and curl_exec, but they all echoed the data, but didn't redirect me to the final page.


Quote:

Originally Posted by Nominal Animal (Post 4433357)
The common solution is to generate an intermediate page, which will be shown to the user. This page will contain the a hidden form, with values set in your PHP script. The form will be automatically submitted by a simple Javascript onload handler in the body element; it only needs to call the submit() method on the hidden form.

Looks more like what we need. Is there an example to how to get this done? Does this mean we would need to integrate PHP with JavaScript to achieve this "automatic POST and redirect" feature we need?

Thanks.

dstu 08-08-2011 08:19 AM

php + JavaScript
 
I finally found the way to do it, using JavaScript:

Code:

<?php

function prepare_post($param1, $param2, $param3, $param4) {

...       
                return $post_string;
               
      }


// This line should be changed to get the incoming $_POST values
 $form_elements = prepare_post('1', '2', '3', '4');

 $inputs = '';

 foreach ($form_elements as $key => $value)
        {
                $inputs .= '<input type=\'hidden\' name=\'' . $key . '\' value=\'' . $value . '\'>';
        }
/**/

 
 ?>
 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
 <html>
 <head>
 <title>Checkout </title>
 <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
 <script type="text/javascript" language="javascript">
 function submitform(){
 document.getElementById('myForm').submit();
 }
 
 </script>
 
 </head>
 <body onload="submitform()">
 
        <form name="myForm" action="http://www.domain.com/page.html" method="post">
                <?php echo $inputs ?>
        </form>
         
 <script type="text/javascript" language="javascript">
        document.myForm.submit();
 </script>



All times are GMT -5. The time now is 05:16 AM.