表單用 POST 方式傳送資料到 A.php 頁面,A.php 頁面用 $_POST 接收資料後,要如何再用 POST 方式把 $_POST 資料傳送到 B.php 頁面?
謝謝!
( 我只要用 POST 方式,不要用新表單傳送資料,也不要用 GET、SESSION )
=======================================================
謝謝大家的回覆,
我發現我沒說清楚我想要的東西,
我想要的程式流程如下:
步驟 1.
在 form.php 用 POST 方式送出表單資料到 A.php
步驟 2.
在 A.php 接收 $_POST,並作一些處理後,
會判斷要留在 A.php 並顯示頁面,
還是要把 $_POST 資料重新傳送到 B.php,同時跳轉到 B.php 並顯示頁面
而我想問的是步驟 2,
如果我要跳轉到 B.php 的情況時,
該怎麼把 $_POST 資料重新傳送過去,並顯示頁面?
其實並不太清楚你真的需要的。
如果你是要發送POST然後轉到B.php上。
基本並不太可能不使用表單。
但如果只是單純的拿頁面資料。而不轉到 B.PHP 的話。
是可以用 CURL的方式來處理。如 Felix 教你的那樣。
但看到你自已寫的還加上了
header( "location: B.php" );
代表你其實是想要轉頁的。
但認真來說,你用了 location 。原本跑的CURL就沒意義了。
但其實可以利用一下PHP輸出JS的方式。來去生成表單。
也就是由A.PHP去生成好的資料後,再去用JS去觸發 submit 事件。
倒也是可以做到。
但這樣子其實又違反了你說不想用表單的方式。
所以....再不清楚你真正要的東西。目前實在沒辦法給你有效的答案。
謝謝您的回覆,
我原本的問題沒表達清楚,
我在最上方重新整理了,
請您再看一下,
謝謝。
土法鍊鋼法
在 A.PHP
用如下的方式寫法。
<form id="myForm" action="B.php" method="POST">
<?php foreach($_POST AS $key=>$value):?>
<input type="text"
name="<?php echo $key;?>"
value="<?php echo $_POST['pizza'];?>"
/>
<?php endforeach;?>
</form>
<script>
window.addEventListener('load', function() {
var form = document.getElementById('myForm');
form.submit(); // 触发表单的 submit 事件
});
</script>
我猜你是要處理某個遊戲的表單傳送方式。
基本上來說。如果真的需要POST到B.PHP。
表單處理是避免不了的。
但可以用PHP來生成表單資料並自動發送。
我不知道他為什麼有這種要求
但如果在意的是那個網址好像可以:
以前我有串過類似的(某個遊戲廠商的API)
其實B.PHP並不是他做的,而是某個類似API的應用。
所以它需要POST到B.PHP上
但可能需要先在A.PHP事前做一些事。才能POST到B.PHP
才需要這樣的要求。
我那時的做法是建立了一個VIEW給A.PHP讀取。
VIEW裏面其實就是FROM跟SUBMIT的自動發送。
那只要傳送URL及要POST的資料給這個VIEW就行了。
當然,我只是猜測這樣的可能性,要不然如果不是。
我也搞不懂為何要這樣做就是了。
我是要做一個銷貨程式,
簡化的程式碼如下:
product.php
列出所有產品讓使用者選擇
<form action="edit.php" method="POST">
<input type='checkbox' name='id[]' value='1' />p1
<input type='checkbox' name='id[]' value='2' />p2
<input type='checkbox' name='id[]' value='3' />p3
<input type='checkbox' name='id[]' value='4' />p4
<input type='checkbox' name='id[]' value='5' />p5
<input type="submit" />
</form>
edit.php
如果使用者在 product.php 選擇 p1、p2 產品,
這邊就列出來並讓使用者輸入數量,
但是設置了 2 個 submit 按鈕
<form action="complete.php" method="POST">
p1<input type='text' name='qty[]' />
p2<input type='text' name='qty[]' />
<input type="submit" value='完成' />
<input type="submit" value='加入產品' />
</form>
complete.php
在這邊要判斷使用者按下的是 "完成" 還是 "加入產品"。
如果使用者按下 "完成",
那就顯示此頁面,
這邊沒問題。
有問題的是,
如果使用者按下 "加入產品",
就要把目前已有的產品數據 p1、p2,
轉傳給 product.php,
並在 product.php 設定隱藏欄位記錄這些原本的產品,
這樣使用者加入其他產品後 ( 例如 p5 ),
送出表單到 edit.php,
可以取得 p1、p2、p5 的數據。
所以想要知道如何從 complete.php 轉傳 $_POST 到 product.php
雖然你這不一定是結帳,但我直接用結帳比喻了:
我倒是覺得你把流程弄簡單點,都只留加入產品這功能...
畢竟是要花錢,讓客戶花錢時能多確認一下商品訂購的對不對。
要不然你就是得弄個購物車頁面,加入商品的功能用ajax去做,直接結帳再用傳統的post後跳轉。
謝謝大家的回覆,問題已解決囉
不要新表單的話,就只能讓 A.php
代為發送請求:
<?php
$body = http_build_query($_POST);
$curl = curl_init();
curl_setopt($curl, CURLOPT_URL, 'B.php');
curl_setopt($curl, CURLOPT_HEADER, false);
curl_setopt($curl, CURLOPT_POST, 1);
curl_setopt($curl, CURLOPT_POSTFIELDS, $body);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
$data = curl_exec($curl);
curl_close($curl); # 關閉資源
謝謝您的回答!
不過我試了之後,B.php 沒辦法抓到 A.php 送出的 $_POST,請問哪裏有錯誤呢?
以下是我的程式碼:
form.php
<form action="A.php" method="POST">
<input type="text" name="food" value="pizza" />
<input type="text" name="drink" value="water" />
<input type="text" name="color" value="yellow" />
<input type="submit" value="確定" />
</form>
A.php
<?php
$body = http_build_query( $_POST );
$curl = curl_init();
curl_setopt( $curl, CURLOPT_URL, 'B.php' );
curl_setopt( $curl, CURLOPT_HEADER, false );
curl_setopt( $curl, CURLOPT_POST, 1 );
curl_setopt( $curl, CURLOPT_POSTFIELDS, $body );
curl_setopt( $curl, CURLOPT_RETURNTRANSFER, 1 );
$data = curl_exec( $curl );
curl_close( $curl );
header( "location: B.php" );
?>
B.php
<?php
echo '<pre>' . print_r( $_POST, 1 ) . '</pre>';
// 我要在這 B.php 內,處理 $_POST 資料
?>
你多了 header( "location: B.php" );
謝謝大家的回覆,問題已解決囉