iT邦幫忙

0

如何以PHP傳送POST參數

  • 分享至 

  • xImage

請問..
我想在a.php執行SQL取值後
已POST方式傳遞參數到另一個b.php網頁
該怎麼做呢?

我有上谷歌大神搜尋
以下是我的CODE

//省略SQL撈值//

        $ch = curl_init();
        curl_setopt($ch, CURLOPT_URL, "b.php");
        curl_setopt($ch, CURLOPT_POST, true); // 啟用POST
        curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query( array(
        "nm_patient"=>$nm_patient,
         "id_patno"=>$id_patno,
         "st_sex"=>$st_sex,
         "dt_birth"=>$dt_birth,
         "st_age"=>$st_age,
         "id_patient"=>$id_patient,
         "id_bed"=>$id_bed,
         "txtInfo"=>$txtInfo,
         "imgInfo"=>$imgInfo,
         "imgDraw"=>$imgDraw,
         "imgSign"=>$imgSign) )); 
        curl_exec($ch); 
        curl_close($ch);

我有做過debugger
確認前面SQL撈值部份可以正常執行
也有撈到我要的值

但執行到$ch = curl_init();
就出現錯誤訊息500 (Internal Server Error)
是我哪裡寫錯了嗎?或是..有甚麼其他方法可以實行?

看更多先前的討論...收起先前的討論...
weiclin iT邦高手 4 級 ‧ 2017-05-17 13:19:08 檢舉
你知道有個東西叫做 $_SESSION 嗎
我知道阿~~
我還知道有個叫LOCAL STORAGE的可以用~^_^

雖然知道~
但我盡量傳值已POST為主~
至少...他比SESSION更不容易被看到~
SESSION按個F12就可以找到了~
直到瀏覽器被關掉才會不見...
(當然我知道可以寫清除程式把SESSION清除)
weiclin iT邦高手 4 級 ‧ 2017-05-17 19:25:39 檢舉
反了吧, POST 才是會被看光的東西, SESSION 只有看得到 SESSION ID, 其他資料都是在伺服器端看不到的
weiclin iT邦高手 4 級 ‧ 2017-05-17 19:29:01 檢舉
回過頭來說, 或許你把那個一開始會造成資料庫無法連線的功能貼出來看看, 把這問題解決就不用這樣繞圈了?
這...很難貼阿...
我只能說...我在做TCPDF
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

2 個回答

2
James
iT邦大師 6 級 ‧ 2017-05-17 09:41:36

先用phpinfo測試
有沒有cURL support enabled 的字樣。

3
bizpro
iT邦大師 1 級 ‧ 2017-05-17 10:25:44

這文章給您參考:
https://davidwalsh.name/curl-post
其中的url是:
$url = 'http://domain.com/get-post.php';

20170517T2331 更正:
500的錯誤發生在cur_init(), 表示您的PHP沒有curl元件.

看更多先前的回應...收起先前的回應...

其實我也有懷疑過curl_setopt是不是只能接收http開頭的url
而不能直接寫同目錄下的檔案..= =

那...請問我該怎麼做?
還是說還有別的方法?

順道一提..
我的a.php與b.php是在同目錄底下
另外..
我最一開始的做法是將SQL撈值的程式寫在b.php
但是..因為b.php內有個功能造成一開始連結資料庫語法無法運作
卻可以用$_POST$_GET取得外部傳進來的參數
這才衍伸出我現在分成a、b兩個php檔的做法

另外..
用GET的方式是很簡單啊..
echo "<script>location.href='b.php?...'</script>"
問號?後面帶參數就成功了..
但..我必須使用POST..= =

fillano iT邦超人 1 級 ‧ 2017-05-17 13:33:14 檢舉

你需要加強一些基礎的知識...

你現在在寫的php程式,運作大致上分成幾個部分

  1. 你寫的php程式
  2. php引擎
  3. 網頁伺服器
  4. 網路
  5. 瀏覽器

如果你能正確地把GET跟POST的過程用這幾個部分畫出循序圖,你應該就有足夠的知識理解你碰到的問題是什麼。

不是很懂fillano大大您指導的意思
因為我自認為我對於POST與GET的傳遞方式與接值方式
還算是蠻清楚的~

例如常看到的HTML
利用<form method="" action="" ... >傳遞
其接值方式在PHP上不外乎就是$_GET或是$_POST
在URL的呈現上..
GET的方式會在URL後面留下傳遞的變數與值
反之..POST不會~

又例如使用javascript的AJAX方式傳遞
當中也有POST與GET的設定方式

這些..我都還蠻常使用..
而且..也都可以成功運作..
逐步學習~摸索各種不同的方法~~

這次的問題..是要從PHP傳值給PHP~
就如我上面所說..
我的a.php與b.php是在同目錄底下
而..最一開始我的做法是將SQL撈值的程式寫在b.php
但是..因為b.php內有個功能造成一開始連結資料庫語法無法運作
卻可以用$_POST$_GET取得外部傳進來的參數
這才衍伸出我現在分成a、b兩個php檔的做法
一個負責SQL搜尋撈值
一個負責接收撈到的值

原本很簡單的..
只要在b.php寫include把a.php放進b.php
可這樣的寫法就如同直接將a.php的內容直接寫進b.php一樣
形同多此一舉了~
而且..就如我上面所說..
b.php因裡面某個功能造成資料庫無法連結
所以..連include也不能用~

不知..我這樣講..
算不算得上還有點基礎知識~
如果不算~
還請您指導~

fillano iT邦超人 1 級 ‧ 2017-05-17 17:15:25 檢舉

另一個作法是不透過伺服器,直接執行b.php。(ex. system('/usr/bin/php b.php');

參考:http://php.net/manual/en/function.system.php

bizpro iT邦大師 1 級 ‧ 2017-05-17 23:22:34 檢舉

這是我測試的a.php和b.php, 我使用的是我建的Nginx系統, 其中請自行修改<my FQDN>:

$ cat b.php 
<html>
<body>
Welcome <?php echo $_POST["name"]; ?><br>
Your email address is: <?php echo $_POST["email"]; ?>
</body>
</html>
$ cat a.php 
<?php
$ch = curl_init();
curl_setopt($ch,CURLOPT_VERBOSE,true);
curl_setopt($ch,CURLOPT_URL,"https://<my FQDN>/test/b.php");
curl_setopt($ch,CURLOPT_POST,1);
curl_setopt($ch,CURLOPT_POSTFIELDS,"name=bizpro&email=bizpro@ithelp.ithome.com.tw");
curl_setopt($ch,CURLOPT_RETURNTRANSFER,true);
curl_setopt($ch,CURLOPT_SSL_VERIFYHOST,0);
curl_setopt($ch,CURLOPT_SSL_VERIFYPEER,0);
$result = curl_exec ($ch);
echo "return code: ".curl_errno($ch)."<br />";
curl_close ($ch);
echo "the result:<br />";
print $result;
?>

這是測試結果:

$ curl -k https://<my FQDN>/test/a.php
return code: 0<br />the result:<br /><html>
<body>
Welcome bizpro<br>
Your email address is: bizpro@ithelp</body>
</html>

也可以啟用PHP內建的web server:

$ php -S localhost:8000

如果是直接取用檔案:
curl_setopt($ch,CURLOPT_URL,"b.php");
會回傳錯誤碼6, 也就是:
Couldn't resolve host. The given remote host was not resolved.

如果是用form的方式:

$ cat form.php 
<html>
<body>
<form action="b.php" method="post">
Name: <input type="text" name="name"><br>
E-mail: <input type="text" name="email"><br>
<input type="submit">
</form>
</body>
</html> 

這沒問題.

我要發表回答

立即登入回答