2011-10-21 40 views
1

只是一個普遍的問題。就形式動作而言,如果表單提交給它的父頁面,我意識到你可以使用「」或「#」來提交表單。現在的問題是,寫入一個有兩個處理器和我被告知這是最好寫一個表單操作這樣的形式的PHP頁面時:

action="<?php echo $_SERVER['PHP_SELF'] ?>" 
//or 
action="<?php echo $_SERVER['SCRIPT_NAME'] ?>" 

現在爲什麼你需要的,如果你加入這個聯腳本可以使用'#'將表單提交給自己,或者只是不設置表單操作。我只是好奇,因爲增加了PHP創建龐大和凌亂的外觀代碼(這已經是龐大而雜亂的外觀)。

我也明白,備用'#'和「」可以用於你沒有使用PHP的情況,但我想真正的問題是爲什麼添加PHP如果你不需要它(在實例中該表單正在提交到一個PHP頁面)。

感謝, 布羅迪

馬洛傢伙所有響應。我意識到使用PHP代碼生成url可能(在大多數情況下)需要採取的路線,因爲所需要的只是更新瀏覽器或HTML,一般來說「」和「#」無效運營商提交到根頁面。另外我知道'#'是用於在同一頁面上引用一個錨點,但我想我會看到每個人對它的看法。

+7

您可以將操作完全退出 - 表單的默認操作是提交表單的加載地址。 –

+2

嚴格地說,'#'不是一個有效的動作,因爲它引用了本地錨而不是遠程資源。指向'#'的超鏈接不會發送HTTP請求。 –

回答

5

首先是簡單的部分:爲什麼把東西的價值放在首位action

那麼,the HTML 4 spec says(重點煤礦):

行動= URI

該屬性指定表單處理劑。 HTTP URI以外的值的用戶代理行爲是undefined

因此,儘管幾乎所有的瀏覽器將最終提交表單的腳本本身,技術上這是你應該完全不依賴於一個令人高興的巧合。但是,這是not a problem for HTML 5

此外,#本身並不是一個有效的URI按照W3C的定義,因此應當排除爲無效也是如此。

現在爲另一半:如何獲取PHP中的當前網址。

對於基本的使用方法,你可以使用這個的$_SERVER['REQUEST_URI']一個和$_SERVER['PHP_SELF'],取決於如果你想保留當前的任何URL GET參數上(PHP_SELF將不包括他們,但REQUEST_URI會)。

在更高級的場景中(例如使用框架編寫代碼),最好使用框架自己的URL生成實用程序函數爲您生成URL(這會考慮路由等因素,因此更可取)。

更新:我誤讀了HTML 5規範,其中說您可以將操作留空。

1

使用#並不是真正做到這一點的正確方法,儘管它會起作用。您會發現URL末尾的#應該用於將頁面向下滾動到與其匹配的頁面上的錨點。表單應在操作字段中使用URL。這樣做沒有任何錯誤,但它更多的與可訪問性和可用性有關(一些JS圖書館使用#url)

0

tl; dr - 保留空白。

隨着現代框架和網址重寫,這實際上是一個不好的做法。您的php腳本可能與訪問它的URI路徑不同。