重定向到一个页面并将帖子信息发送给另一个页面

时间:2012-09-05 06:15:15

标签: php curl

我想在页面上有一个表单,在提交后将该人发送到感谢页面,但我想将表单中的数据发送到远程服务器上的另一个.php文件。我已经使用该操作将信息作为帖子直接发送到远程服务器并且它工作正常,但为了安全起见,我不希望在任何代码中看到远程上的位置。我正在处理的解决方案是在提交之后,表单操作会将您发送到.php,该文件将通过cURL将帖子信息发送到远程。这是它下山的地方。我不是一直在使用cURL,只是我读到的唯一一个听起来像它可以工作的东西。所以要回顾一下这是否令人困惑;当人们点击提交时,他们会转到一个说“你是个好人”的.php,但它也会将帖子中的信息发送到远程服务器,同时只显示远程服务器中php的位置,因此在代码中不可见。

我的html上有表格:

<form action="landing.php" method="post">
Client:<input name="client" type="text" size="20" maxlength="30">
    <br />
Test1:<input name="test1" type="text" size="20" maxlength="30">
    <br />
Test2:<input name="test2" type="text" size="20" maxlength="30">
    <br />
<input type="submit" name="submit" value="Submit" />
</form> 

进入此页面:

<?php
$ch = curl_init();
$data = array('client' => 'Foo', 'test1' => '123', 'test2' => '987');
curl_setopt($ch, CURLOPT_URL, 'http://MyServer/test.php');
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
curl_exec($ch);
?>
Thank You etc.

并且它不起作用......我是cURL的新手,因此可能会因为我正在尝试做的事而非常糟糕。我的主要是隐藏遥控器的位置。

我是否在正确的轨道上? 这可能吗?

4 个答案:

答案 0 :(得分:0)

检查Curl是否启用

发布后,尝试从Curl获取输出

<?php

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, "http://www.example.com/path/to/form");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_POST, true);

$data = array(
    'foo' => 'foo foo foo',
    'bar' => 'bar bar bar',
    'baz' => 'baz baz baz'
);

curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
$output = curl_exec($ch);
$info = curl_getinfo($ch);
curl_close($ch);

?>

答案 1 :(得分:0)

我认为还有一个替代方案: -

  1. 使用可以将您的数据存储在会话中。
  2. 然后重定向到该页面。
  3. 希望这些信息能为您提供帮助。

    或者还有一个解决方案,您可以使用以下代码重定向到新页面:

    <?php
        header("Status: 301 Moved Permanently");
        header("Location:http://MyServer/test.php?". $_SERVER['QUERY_STRING']);
        exit;
    ?>
    

    谢谢和问候 普什卡

答案 2 :(得分:0)

首先浏览curl。请参阅此link以发布数据。 正如您所说“我的主要内容是隐藏遥控器的位置”,您可以在这种情况下使用数据库。将远程位置保存在其中一个表中,并随时检索它。

尝试使用此方法解决当前问题。

<?php
//set POST variables
$url = 'http://MyServer/test.php';
$data = array('client' => 'Foo', 'test1' => '123', 'test2' => '987');

//url-ify the data for the POST
foreach($data 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($data));
curl_setopt($ch,CURLOPT_POSTFIELDS, $fields_string);

//execute post
$result = curl_exec($ch);

//close connection
curl_close($ch);
?>

答案 3 :(得分:0)

我想你需要POSTFIELDS作为这样的字符串

$data = 'client=Foo&test1=123&test2=987'

获取返回数据添加

curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
$returnText = curl_exec($ch);
$data= curl_getinfo($ch);

如果您想将其用作数组,请阅读this

  

要在HTTP“POST”操作中发布的完整数据。要发布文件,   使用@预先添加文件名并使用完整路径。文件类型可以是   通过跟随文件名中的类型明确指定   format'; type = mimetype'。此参数可以作为a传递   urlencoded字符串,如'para1 = val1&amp; para2 = val2&amp; ...'或作为数组   字段名称为键,字段数据为值。如果value是一个数组,   Content-Type标头将设置为multipart / form-data。截至PHP   5.2.0,如果使用@前缀将文件传递给此选项,则value必须是数组。