PHP 而不是 HTML 中的 <form> 从脚本发送表单并停留在重定向页面上?

Posted

技术标签:

【中文标题】PHP 而不是 HTML 中的 <form> 从脚本发送表单并停留在重定向页面上?【英文标题】:PHP instead of <form> in HTML to send a form from a script and stay on the redirected page? 【发布时间】:2013-09-08 06:19:20 【问题描述】:

现在我的表单中有这个代码:

<form action="https://www.paypal.com/cgi-bin/webscr" target="_BLANK" method="post">
    <input type="hidden" name="cmd" value="_xclick">
    <input type="hidden" name="business" value="paypal@********.com">
    <input type="hidden" name="lc" value="SE">
    <input type="hidden" name="item_name" value="Premium Membership">
    <input type="hidden" name="custom" value="<?php echo $session_user_id; ?>">
    <input type="hidden" name="item_number" value="1">
    <input type="hidden" name="amount" value="0.80">
    <input type="hidden" name="currency_code" value="SEK">
    <input type="hidden" name="no_note" value="1">
    <input type="hidden" name="no_shipping" value="1">
    <input type="hidden" name="notify_url" value="http://*******.com/eta/ipn.php">
    <input type="hidden" name="return" value="http://********.com/purchase/thanks">
    <input type="hidden" name="cancel_return" value="http://*******.com">
    <input type="hidden" name="rm" value="0">
    <input type="hidden" name="bn" value="PP-BuyNowBF">
    <input type="image" src="https://www.paypalobjects.com/en_US/i/btn/x-click-but23.gif" border="0" name="submit" >
    <img  border="0" src="https://www.paypal.com/en_US/i/scr/pixel.gif"  >
</form>

但问题是我需要获取这些值,在我的其他文件functions.php 中进行一些更改,然后在表单操作中转到https://www.paypal.com/cgi-bin/webscr,可能使用 PHP 创建一个表单并提交它(javascript 是在我的情况下不是一个选项)。

所以,而不是: &lt;form action="https://www.paypal.com/cgi-bin/webscr" target="_BLANK" method="post"&gt;我会的:

&lt;form role="sendit" method="POST"&gt; 如果由我在functions.php(我使用Wordpress)中的代码提交,它将被抓取,例如:

if ( isset( $_POST['submitted'] ) && isset( $_POST['post_nonce_field'] ) && wp_verify_nonce( $_POST['post_nonce_field'], 'post_nonce' ) ) 

    // grab values from hidden input fields
    $pp_cmd      = $_POST['cmd'];
    $pp_business = $_POST['business'];
    ...

    // do some internal wordpress stuff with grabbed data for statistical purposes etc.

    // and after that redirect using <form action="https://www.paypal.com/cgi-bin/webscr" target="_BLANK" method="post">
    // probably to recreate the form and submit it using php and stay on PayPal site
    ??? what code here ???

我可以从我的 functions.php 中的帖子中获取值并将它们存储在变量中,例如$pp_cmd, $pp_business。问题是我需要以某种方式使用所有这些变量并将它们作为隐藏输入和表单发布方法发送到action="https://www.paypal.com/cgi-bin/webscr" 并留在该页面上以继续在 PayPal 页面上,就好像我只是使用带有操作的默认表单到 paypal 页面一样。

怎么做?

这可以通过直接的 PHP 或带有 cURL 的 PHP 来完成吗?如果是,您能否提供一些基本代码,包括至少前两个隐藏输入,以便我自己完成?

更新:在我看来,使用 AJAX 不是一个选项。该脚本也必须在不使用 JavaScript 的情况下工作。我正在寻找这个问题的 PHP 解决方案。

【问题讨论】:

你为什么不提交发现没有 OK 标签,防止默认并将表单 ajax 到你的编辑脚本。返回更新后的数据(JSON格式好)并用新数据更新表单并设置OK标签,然后提交表单。或在处理页面上重新创建表单,使用新数据,并自动提交(到贝宝) @Waygood 这不是我的选择。即使关闭了javascript,它也必须工作。 更新建议提交到您自己的脚本,然后自动提交新表单到贝宝(对于非 JavaScript,您需要将提交按钮更改为 -> 重定向到贝宝) @Waygood 您能否添加一个答案并解释如何使用 php 自动提交带有抓取值的表单?因为这正是我在我的问题中要问的;)它应该在我的functions.php中的??? what code here ???部分中 @Waygood 知道如何做到这一点吗? 【参考方案1】:
function curl_post($url, array $post = NULL, array $options = array())

    $defaults = array(
        CURLOPT_POST => 1,
        CURLOPT_HEADER => 0,
        CURLOPT_URL => $url,
        CURLOPT_FRESH_CONNECT => 1,
        CURLOPT_RETURNTRANSFER => 0,
        CURLOPT_FORBID_REUSE => 1,
        CURLOPT_TIMEOUT => 4,
        CURLOPT_POSTFIELDS => http_build_query($post)
    );

    $ch = curl_init();
    curl_setopt_array($ch, ($options + $defaults));
    if( ! $result = curl_exec($ch))
    
        trigger_error(curl_error($ch));
    
    curl_close($ch);
    return $result;

curl_post("https://www.paypal.com/cgi-bin/webscr",$_POST);

更新:将 CURLOPT_RETURNTRANSFER 更改为 0。OP 想要导航到 paypal 页面,而不仅仅是发帖。

【讨论】:

;( 它不会重定向到 https://www.paypal.com/cgi-bin/webscr。它会重新加载并与表单保持在同一页面上 ;(。这是为什么呢? 我尝试添加 exit();在curl_post("https://www.paypal.com/cgi-bin/webscr",$_POST); 之后是curl_post("https://www.paypal.com/cgi-bin/webscr",$_POST); exit(); 但现在它是白屏并且仍然与我的表单在同一页面上。没有发生重定向,只是由于 exit() 屏幕是白色的;知道为什么重定向到贝宝网址不起作用吗?我尝试了不同的网址,但仍然无法正常工作;(。如何将浏览器重定向到带有帖子信息的新网址? 一定有什么东西阻止了重定向。你知道那是什么吗? 将 CURLOPT_RETURNTRANSFER 更改为 0

以上是关于PHP 而不是 HTML 中的 <form> 从脚本发送表单并停留在重定向页面上?的主要内容,如果未能解决你的问题,请参考以下文章

php获取form表单数据

php获取form表单数据

如何将html表单中的数组发送到php

验证 PHP 表单并更改提交按钮而不是重定向到状态页面

html 表单返回空对象而不是输入数据| Vue

form中的标签例子