2011-07-28 21 views
21

我有這樣的PHP表單。PHP表單動作PHP自我

<form name="form1" id="mainForm" method="post"enctype="multipart/form-data" action="<?php echo $_SERVER['PHP_SELF'];?>"> 

</form 

在窗體操作中,我想使用帶有參數的頁面名稱。像house.php?p_id=10111。但$ _SERVER ['PHP_SELF']只給出house.php(我的頁面完整的網址是house.php?p_id=10111這樣)請幫我解決這個問題。謝謝。

+1

這不是完整的網址。它是url + GET參數。 –

+1

@Alex Ackerman:這是[路徑](http://tools.ietf.org/html/rfc3986#section-3.3)加上[查詢](http://tools.ietf.org/html/rfc3986#section- 3.4)。 – Gumbo

+2

是的。亞歷克斯是對的。我現在使用'$ _SERVER ['PHP_SELF']。「?P_id =」。$ id' –

回答

71

如何讓它爲空,那有什麼問題?

<form name="form1" id="mainForm" method="post" enctype="multipart/form-data" action=""> 

</form> 

此外,您可以省略操作屬性,它將按預期工作。

+1

謝謝你。我認爲這是最簡單也是最好的方法。 –

+11

通過將它留空,中斷w3c驗證(如果您在意) – gadlol

+10

@jBaron是的,HTML5就是這種情況,但您可以完全省略空的'action =「」''屬性。它將驗證並按預期工作。 – Shef

7

將動作值留空將導致表單回傳給自己。

12

您可以將動作空白或使用此代碼:

<form name="form1" id="mainForm" method="post" enctype="multipart/form-data" action="<?php echo $_SERVER['REQUEST_URI'];?>"> 
</form> 
0

這是完美的。試試這個:)

<form name="test" method="post" enctype="multipart/form-data" action="<?php echo $_SERVER['PHP_SELF']; ?>"> 
/* Html Input Fields */ 
</form> 
+1

這允許XSS攻擊,你需要過濾/ sanatize PHP_SELF – Chad

+0

好吧,我明白了。謝謝你,兄弟。這很有用。 –

3

你也可以使用echo快捷鍵代替輸入「echo blah;」如下圖所示:

<form method="POST" action="<?=($_SERVER['PHP_SELF'])?>"> 
+1

這允許XSS攻擊,你需要過濾/ sanatize PHP_SELF – Chad

1

另一個(在我看來正確的)方法是使用__FILE__常量,如果你不喜歡靠$_SERVER變量。

$parts = explode(DIRECTORY_SEPARATOR, __FILE__); 
$fileName = end($parts); 
echo $fileName; 

關於魔術和預定義的常量:12