請問..
我想在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)
是我哪裡寫錯了嗎?或是..有甚麼其他方法可以實行?
這文章給您參考:
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..= =
你需要加強一些基礎的知識...
你現在在寫的php程式,運作大致上分成幾個部分
如果你能正確地把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也不能用~
不知..我這樣講..
算不算得上還有點基礎知識~
如果不算~
還請您指導~
另一個作法是不透過伺服器,直接執行b.php。(ex. system('/usr/bin/php b.php');
)
參考:http://php.net/manual/en/function.system.php
這是我測試的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>
這沒問題.