• 0

[PHP] Pass POST data from one page to another


Question

Hi all,

I want to PASS post data from a form to a php page and then to another php page.

At the moment it does this.

1. POST to External PHP page.

2. External PHP page displays SUCCESS or ERROR.

I don't want the user to see this.

Is there a way to implement it like so:

1. POST to local PHP page

2. POST from local PHP to external PHP.

3. Load PHP response into string.

4. If string contains word ERROR then display a message on local php page.

5. Otherwise Display "submission successful"

7 answers to this question

Recommended Posts

  • 0

Hi Axel, it sounds to me like you want an Ajax call; have you considered this? It would at least cover the requirement of letting you post data to the external PHP page and retrieving back a result without moving your user off the page.

  • 0

Yo again!

I did this by doing the following. Please note I don't know how security-risky is this. But here it goes.


<?php
session_start();

$_SESSION['post_data'] = $_POST;

?>
[/CODE]

Now, on the other page

[CODE]
<?php
session_start();
$_SESSION['post_data']/// Use this as the POST variable.
?>
[/CODE]

If you want to be sure that there data is cleared then do it this way:

[CODE]
<?php
session_start();
$_SESSION['post_data']/// Use this as the POST variable.

//After finishing the code:
unset($_SESSION['post_data']);
?>
[/CODE]

Hope this helps :)

Anybody who thinks this presents a security risk please let me know, because I'm using this technique right now. Although I'm not using a sensitive information.

  • 0

I'll clarify a little bit. I'm sending the form data to https://www.formstac...forms/index.php

I don't think the Formstack API supports JSON.

I can quite easily get a webpage into a variable using php:

  $url = "https://www.formstack.com/forms/index.php"
  function get_data($url) {
  $ch = curl_init();
  $timeout = 5;
  curl_setopt($ch, CURLOPT_URL, $url);
  curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
  curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, $timeout);
  $data = curl_exec($ch);
  curl_close($ch);
  return $data;
}

Now is it possible to somehow forward the $_POST data in the curl request so that I get the relevant data?

I hope that makes sense.

Edit: Hi Jose_49! I don't thing that technique will work on the basis that I don't have any access to the code on the https://www.formstack.com/forms/index.php page so unfortunately I can't alter it. What do you make of my suggestion above?

  • 0

This is interesting:

http://superuser.com/questions/149329/what-is-the-curl-command-line-syntax-to-do-a-post-request

curl --data "param1=value1&amp;param2=value2" http://example.com/resource.cgi

No idea how to use this though.

  • 0
  On 02/02/2013 at 17:42, Jose_49 said:

I did this by doing the following.

<snip>

You've misunderstood, one of the two pages the OP wants to send the data to is on another web service!

  On 02/02/2013 at 17:43, Axel said:

I'll clarify a little bit. I'm sending the form data to https://www.formstac...forms/index.php

I don't think the Formstack API supports JSON.

One way you could perhaps find out: grab the POSTman addon for Google Chrome and use it to send a request. Set the method to POST, place your json encoded string in the body (RAW mode), and set the 'Content-Type' header to 'application/json', then see what you get back.

  On 02/02/2013 at 17:43, Axel said:

I can quite easily get a webpage into a variable using php:

  $url = "https://www.formstack.com/forms/index.php"
  function get_data($url) {
  $ch = curl_init();
  $timeout = 5;
  curl_setopt($ch, CURLOPT_URL, $url);
  curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
  curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, $timeout);
  $data = curl_exec($ch);
  curl_close($ch);
  return $data;
}

Now is it possible to somehow forward the $_POST data in the curl request so that I get the relevant data?

This is the method I would suggest you use to do it, submitting to your own PHP script, then with that submitting to the other web service.

Assuming the web service accepts JSON encoded data, you could use the following code:

$data = json_encode($_POST);

$ch = curl_init('https://www.formstack.com/forms/index.php');
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "POST");
curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, array(
	'Content-Type: application/json'
);

$result = curl_exec($ch);

If the web service does not accept JSON:

The default encoding for form data in a POST request is application/x-www-form-urlencoded. I just made a little test script, and it does not seem that PHP keeps a copy of it in this format in a server variable. The application/x-www-form-urlencoded format is described here: http://www.w3.org/TR...tml#h-17.13.4.1. It's essentially the same as query string format. e.g. forename=foo&surname=bar, and certain characters being encoded.

Thankfully though, there is no need to translate the $_POST array into an application/x-www-form-urlencoded string, you can simply give CURLOPT_POSTFIELDS an array, and it'll sort it out for you!

$ch = curl_init('https://www.formstack.com/forms/index.php');
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "POST");
curl_setopt($ch, CURLOPT_POSTFIELDS, $_POST);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);

$result = curl_exec($ch);

  On 02/02/2013 at 18:20, Axel said:

This is interesting:

http://superuser.com...-a-post-request

curl --data "param1=value1&amp;param2=value2" http://example.com/resource.cgi

No idea how to use this though.

Obviously this is command line usage (I'm sure you knew that, just making sure). Note that the data is in application/x-www-form-urlencoded form, as mentioned above! You could probably pass this as a string to php's exec() function, but that could very likely be extremely insecure, so I would strongly discourage it!

  • Like 2
  • 0
  On 02/02/2013 at 19:23, theblazingangel said:

Thankfully though, there is no need to translate the $_POST array into an application/x-www-form-urlencoded string, you can simply give CURLOPT_POSTFIELDS an array, and it'll sort it out for you!

$ch = curl_init('https://www.formstack.com/forms/index.php');
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "POST");
curl_setopt($ch, CURLOPT_POSTFIELDS, $_POST);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);

$result = curl_exec($ch);

YOU SIR ARE AN ACTUAL GOD - THANK YOU SO MUCH!!!

This topic is now closed to further replies.
  • Recently Browsing   0 members

    • No registered users viewing this page.
  • Posts

    • It depends if they can market it to hipsters, then they might hold a niche.
    • No Man's Sky Beacon update overhauls settlements and player overseer duties by Pulasthi Ariyasinghe Hello Games is back with another major update to its sci-fi space survival game No Man's Sky. This time, it has targeted settlement systems. The title will now let players be overseers who manage settlements across multiple planets while also discovering towns run entirely by robotic lifeforms. Space-faring players can now be the overseers of four settlements across the universe, with the job being offered to them after completing a unique objective. "Govern your settlers wisely and invest in their infrastructure to enable each settlement to flourish, producing lucrative resources, and becoming an invaluable base of operations throughout your journey," explains the studio. Settlement management has also been completely reworked with this update. Hello Games says that players will now have more important construction and upgrade choices, as each building has its own calculated contribution to the happiness, population, and productivity of its settlement. These can benefit the player via a wide range of resource production options. Not only that, each settler will even have their own personalities, strengths, weaknesses, and skills that will change how they work in their community. Players can find these by simply talking to any settler they meet on a planet. When a citizen dispute comes up, the number of choices offered to the overseer has been increased as well. As for the robotic settlements, they can only be found by scanning planets with specialist technology. Once found, these Autophage settlements can be taken over as well, letting players be the overseer and take care of the scrap metal-built locals. Other additions to this update include Intel Xe Super Sampling (XeSS) upscaling tech support on PC, more voice types for player characters, better snapping when building structures, and cross-save support across all platforms. Don't forget that No Man's Sky will soon be arriving on a brand-new platform too. The title will be a day-one launch on the Nintendo Switch 2 on June 5. Find the complete patch notes for No Man's Sky 5.7 Beacon Update over here.
    • Eh. I think I'm more in favor of this not being a thing. One of the most useful things on Reddit is being able to see if the person posting is consistently who they say they are. Hiding posts just allows shitposters to hide.
  • Recent Achievements

    • Week One Done
      mywakehealth earned a badge
      Week One Done
    • Dedicated
      jbatch earned a badge
      Dedicated
    • Week One Done
      Leonard grant earned a badge
      Week One Done
    • One Month Later
      portacnb1 earned a badge
      One Month Later
    • Week One Done
      portacnb1 earned a badge
      Week One Done
  • Popular Contributors

    1. 1
      +primortal
      294
    2. 2
      snowy owl
      159
    3. 3
      +FloatingFatMan
      155
    4. 4
      ATLien_0
      140
    5. 5
      Xenon
      126
  • Tell a friend

    Love Neowin? Tell a friend!