iT邦幫忙

0

[php] 更改網址路徑,表單傳值會有問題

各位大大好:
想請問
a.php

<li ><a href="a.php?category=sign">報名</a></li>
<?php
$pageTitle ="null";
if(isset($_GET["category"])) {
   if ($_GET["category"] == 'sign') {
   $pageTitle = file_get_contents('http://www.xx.xx.xx.tw/EExx2019/sign.php');
  }
    else if ($_GET["category"] == 'sign_cmf') {
    $pageTitle = file_get_contents('http://www.xx.xx.xx.tw/EExx2019/sign_cmf.php');
  }

}

echo  $pageTitle;

?>

http://www.xx.xx.xx.tw/EExx2019/a.php?category=sign 表單要送出資料給http://www.xx.xx.xx.tw/EExx2019/a.php?category=sign_cmf
sign.php

<form method="POST" action="a.php?category=sign_cmf" name="f1">

sign_cmf.php

<div class="form-group col-md-6">
      <label for="recipient-name" class="col-form-label" >姓名※:<?php echo $_POST['name'] ?></label>
          </div>

sign_cmf網頁會顯示值有誤,產生姓名※:Notice: Undefined index: name in D:\eexx\EExx2019\sign_cmf.php on line 17
好像替換網址,值會傳不過去,想請問有甚麼方法可以解決呢?

謝謝!

看更多先前的討論...收起先前的討論...
weiclin iT邦高手 4 級 ‧ 2018-08-22 18:38:54 檢舉
參考
https://stackoverflow.com/questions/846020/how-to-access-the-forms-name-variable-from-php
mayyola iT邦新手 2 級 ‧ 2018-08-22 21:34:27 檢舉
w大我有點看不懂他的意思,我用<form method="POST" action="sign_cmf.php" name="f1"> 是可以傳的過去..但<form method="POST" action="a.php?category=sign_cmf" name="f1">就不行..
我認真看了很久沒看懂你的問題
ccutmis iT邦高手 9 級 ‧ 2018-08-23 08:54:26 檢舉
我是在想既然form是用POST方法傳遞資料,那把action裡的網址列參數搬到form裡用POST傳不就好了?
例如:
<form method="POST" action="a.php?category=sign_cmf" name="f1">
改成
<form method="POST" action="a.php" name="f1">
<input type="hidden" name="category" value="sign_cmf" />
...以下略...

接收資料頁a.php 原本接收GET變數的($_GET['cate....'])改寫成接收POST參數($_POST['cate....'])
試試看
mayyola iT邦新手 2 級 ‧ 2018-08-23 10:40:58 檢舉
cc大您好:剛剛試過了~還是會產生收到value的情形 謝謝你
ccutmis iT邦高手 9 級 ‧ 2018-08-23 12:22:58 檢舉
舉個可能跟問題無關的問題,像這個你的變數名命法最好避免:
<?php echo $_POST['name'] ?>
這name表示在傳參數過來的頁面會有一個
<input name='name' ... />
我不確定這會否有問題因爲我會避掉變數跟保留字衝突的狀況,比如我可能會這樣命名
<input name='uName' ... />
接收頁
<?php ... $_POST['uName'] ...; ?>
剛好看到跟您分享個人看法,小細節多留意能避掉很多問題。
mayyola iT邦新手 2 級 ‧ 2018-08-23 13:01:53 檢舉
cc大了解,謝謝你~~
0
weiclin
iT邦高手 4 級 ‧ 2018-08-23 02:50:27
最佳解答

a.php?category=sign POST 到 a.php?category=sign_cmf

你在 a.php 裡面又根據 $_GET["category"] 去執行 file_get_contents("http://.../sign_cmf.php")

最後你說 sign_cmf.php 無法讀取 $_POST,那不是理所當然的嗎?

get_file_contents是送出 GET 請求,你等於是在收到 HTTP POST 之後又發起了另一個 HTTP GET,它並不會自動把你目前的 $_POST 資料轉送過去。

從根本上來講這整個執行流程就是充滿問號,完全不懂你為啥要另外送一個 HTTP Request,直接 include "sign_cmf.php" 不就好了嗎?

看更多先前的回應...收起先前的回應...
mayyola iT邦新手 2 級 ‧ 2018-08-23 08:49:55 檢舉

w大您好:
因為a.php有寫一些語法讓外觀跟menu比較好看所以想說直接action="a.php?category=sign_cmf"所以post 跟get 無法同時存在嗎?

weiclin iT邦高手 4 級 ‧ 2018-08-23 11:35:54 檢舉

可以同時存在啊, 但你的問題不在這裡, 而是你去讀取 sign_cmf.php 的時候是發了另一個 GET Request, 沒有把 POST 資料送過去

你想過為什麼要用 file_get_contents 嗎? 直接 include 不好嗎?

mayyola iT邦新手 2 級 ‧ 2018-08-23 12:04:02 檢舉

w大您好:我改include 就可以了 老實說我不知道 file_get_contents跟include 差別..

weiclin iT邦高手 4 級 ‧ 2018-08-23 12:24:25 檢舉

include 就像把另一個檔案的程式複製貼上到現在這個檔案裡,file_get_contents 是用來讀取檔案文字內容,如果給的是 url 就會像瀏覽器一樣去瀏覽那個網址並取回資料。

mayyola iT邦新手 2 級 ‧ 2018-08-23 13:01:13 檢舉

了解了,謝謝w大解釋~~

0
freessaint
iT邦新手 5 級 ‧ 2018-08-22 22:16:27

有點看不太懂你的問題,
如果你只是單純要在a.php,做報名的資料傳遞,在同樣頁面藉由get參數不同,來顯示頁面資料的話,這樣一個a.PHP就可以解決。

<li ><a href="a.php?category=sign">報名</a></li>
<?php
$pageTitle ="null";
if(isset($_GET["category"])) {
   if ($_GET["category"] == 'sign') {
   	$pageTitle = 
	'<form method="POST" action="a.php?category=sign_cmf">
		<input type="hidden" name="myname1" id="myname1" value="hiddenName">
		<input type="text" name="myname2" id="myname2">
		<input type="submit" value="送出">
	</form>';
  }
    else if ($_GET["category"] == 'sign_cmf') {
    $pageTitle = 
	'<div class="form-group col-md-6">'.
	'<label for="recipient-name" class="col-form-label" >'.
	'隱藏的 myname1※:'.$_POST["myname1"]."<br>".
	'自己輸入的myname2※:'.$_POST["myname2"]."<br>".
	'</label></div>';
  }
}
echo  '<BR>'.$pageTitle;
?>

你上面寫的這個

sign.php
<form method="POST" action="a.php?category=sign_cmf" name="f1">

如果你是要傳遞給a.php?category=sign_cmf
$_POST['name']這個參數,你需要有一個欄位,用來記錄這個資料跟對應的值。

<form method="POST" action="a.php?category=sign_cmf">
	<input type="text" name="name" id="name">
	<input type="submit" value="送出">
</form>

寫法應該是這樣。

看更多先前的回應...收起先前的回應...
Homura iT邦高手 1 級 ‧ 2018-08-22 22:42:19 檢舉

應該是他的form寫法有問題沒錯

mayyola iT邦新手 2 級 ‧ 2018-08-22 22:44:43 檢舉

f大您好:
這個我有寫了,但是傳給a.php?category=sign_cmf
a.php?category=sign_cmf網頁的每個傳遞值會產生
Notice: Undefined index: name in D:\eexx\EExx2019\sign_cmf.php on line 17

若是傳給sign_cmf.php 就會正常..

如果你是要傳遞給a.php?category=sign_cmf
$_POST['name']這個參數,你需要有一個欄位,用來記錄這個資料跟對應的值。

若是傳給sign_cmf.php 就會正常.. <-這應該是相反的吧?

這樣的寫法應該是錯的
<form method="POST" action="a.php?category=sign_cmf" name="f1">

sign_cmf.php檔案裡面應該是沒有收到$_POST['name']參數,所以才會跳出錯誤。

Notice: Undefined index: name
這個就是說,他不知道$_POST['name']指的name是什麼意思。

所以你在表單需要寫一個
<input type="text" name="name" id="name">

mayyola iT邦新手 2 級 ‧ 2018-08-22 22:59:13 檢舉
這樣寫正常
<form method="POST" action="sign_cmf.php" name="f1">
這樣寫錯誤
<form method="POST" action="a.php?category=sign_cmf" name="f1">

我覺得會不會是因為原始檔案就是sign_cmf.php,所以$_POST['name']可以讀,改網址後(a.php?category=sign_cmf)就不行..

你上面這樣寫就是直接傳到sign_cmf.php 這個檔案,跟a.php就完全沒關係。

action="a.php?category=sign_cmf" 這是指說,我傳到a.php檔案,a.php檔案再去藉由參數判斷不同檔案。

action="sign_cmf.php" 直接到sign_cmf.php 檔案,

你在sign_cmf.php 如果程式碼只有這樣:

<div class="form-group col-md-6">
<label for="recipient-name" class="col-form-label" >姓名※:<?php echo $_POST['myname'] ?></label>
</div>

那應該也會出現錯誤

https://ithelp.ithome.com.tw/upload/images/20180822/20102779nUKBtNiBme.jpg

mayyola iT邦新手 2 級 ‧ 2018-08-22 23:18:07 檢舉

f大您好:我的程式碼跟你寫的一樣(當然還有其他數值),但直接到sign_cmf.php 檔案會是可以讀到值的,不會有您上述的情形`
姓名※:

你印出 會是有值的@@?

如果你嘗試調整 值會跟著變嗎

mayyola iT邦新手 2 級 ‧ 2018-08-22 23:45:58 檢舉

恩恩,若是直接打sign_cmf.php 是直接會印出值,一直key不同的值都會正常顯示
如果打下面的連結,才會像你的圖一樣@@

action="a.php?category=sign_cmf"
0

雖說知識不用深究,但基本了解還是要有的,幾個部份先釐清吧…

  1. 究竟流程是a.php -> a.php,還是a.php -> sign_cmf.php 和 a.php -> sign.php,如果是後者,這段話是有問題的:
    你的例子:
    http://www.xx.xx.xx.tw/EExx2019/a.php?category=sign
    表單要送出資料給http://www.xx.xx.xx.tw/EExx2019/a.php?category=sign_cmf

2.一般不會在form上寫name這個屬性,寫name屬性是指要傳值,如對應$_POST['f1'],但form上面不會有value這個屬性,如想傳值又不想顯示在畫面上,可以用

<input type="hidden" name="category" value="sign_cmf">

這種方式,而不是放在url上面,雖然get和post是可以同時傳到後端的,但沒有特殊需求,一般都會寫在form裡以簡化url,請參考:http://www.webtech.tw/info.php?tid=96
你的例子:
sign.php

<form method="POST" action="a.php?category=sign_cmf" name="f1">

3.所以如果你要傳到sign_cmf.php 和 sign.php,讓它避免出現Notice: Undefined index: name in ,就是要加上:

<input type="text" name="name" value="你要傳的值">
看更多先前的回應...收起先前的回應...
mayyola iT邦新手 2 級 ‧ 2018-08-23 10:46:30 檢舉

1.應該是後者
2.剛剛有試過cc大的方式還是不行
3.還是說要將a.php的語法全部寫在sign_cmf.php這應該是比較快的方式@ @

請參考上面作法~

mayyola iT邦新手 2 級 ‧ 2018-08-23 11:10:41 檢舉

我有在 sign.php加上<input type="text" name="name"> 因為是輸入欄所以沒加value,然後用第2點傳遞值到sign_cmf.php但還是無法傳值過去..謝謝

你是a.php 要傳到 sign_cmf.php吧,那應該是在a.php加才對,如果不是,請問到底是哪個頁面要傳到哪個頁面,先說清楚吧…
/images/emoticon/emoticon10.gif

mayyola iT邦新手 2 級 ‧ 2018-08-23 11:32:56 檢舉

我是透過a.php去抓取sign.php(網址會變a.php?category=sign)表單然後透過post到a.php?category=sign_cmf(從a.php去解析category=sign_cmf轉換到sign.php)確認表單的資料,所以我在sign.php加這段後姓名的輸入值還是無法傳遞,這樣應該沒錯吧?

<form method="POST" action="a.php">
<input type="hidden" name="category" value="sign_cmf">
姓名:<input type="text" name="name"> 

我是透過a.php去抓取sign.php,那用a include sign.php就好,為何要弄成這樣?如果沒有弄懂就不該亂用

froce iT邦大師 4 級 ‧ 2018-08-23 12:05:08 檢舉

你應該沒弄清楚前端後端的關係,你原本的CODE看起來是:

a.php=>檢查GET['category'],如果是sig,那段顯示sign.php裡,如果是sign_cmf,顯示sign_cmf.php。

但是你要的是:

a.php=>sign.php=>sign_cmf.php

對吧?

mayyola iT邦新手 2 級 ‧ 2018-08-23 13:00:31 檢舉

F大您好,其實我要的是第一個你寫的,因為我需要其他a.php的語法
若用第2個那sign_cmf.php就無法讀到a.php語法了..謝謝

所以是a.php 包含 sign.php 或 sign_cmf.php,然後又要POST給 sign.php 或 sign_cmf.php 這樣?

mayyola iT邦新手 2 級 ‧ 2018-08-23 13:35:33 檢舉

應該是說用a.php去解析網頁a.php?category=sign 然後從sign.php post a.php?category=sign_cmf 再到a.php去解析出sign_cmf.php

雖然知道你的問題所在,不過都結案了,所以不想再深究

我要發表回答

立即登入回答