2013-06-19 22 views
0

我目前正在潛入php和html,並且只是爲了通過url顯示數據庫內容而進行簡單的重定向。header vs表單動作

我知道你可以通過兩種方式產生的URL,也許更多,但這些兩個是爲什麼我開始這個問題的原因:

PHP:

<?php 
    header('Location: example.php?parameter'); 
?> 

HTML:

<form action="example.php" method="post"> 
<!--input fields etc --> 
<input type="submit"> 

但現在我想知道「關於這兩種選擇的最佳做法是什麼」。這僅僅是一種個人意見,你最喜歡的是什麼,在某種情況下最適合的方式是什麼,或者有什麼我可以忽略的東西。

我不想在這裏開始討論,只是對'正常/常用'使用什麼感興趣。

在此先感謝!

+0

是的,我知道,這不是我問的原因。我寧願用php而不用html來做這件事,但是對於我正在使用的這種方法有什麼缺點。我可以理解,當您在使用此方法時需要使用重定向時,除此之外,這是不可能的。還有其他原因嗎? –

回答

2

這兩段代碼做了根本不同的事情,即使在某些情況下,用戶觀察到的行爲可能非常相似。

這是一個服務器啓動重定向:

<?php 
    header('Location: example.php?parameter'); 
?> 

基本上這是告訴它應該瀏覽到其他位置瀏覽器的服務器的方式。 (瀏覽器可以忽略它,但實際上沒有理由忽略它。)可以在響應中添加其他詳細信息,告訴瀏覽器此重定向是臨時還是永久的,或者有其他相關條件。但最簡單的是,服務器只是說「我在這裏沒有任何東西給你,請在那裏爲你提供信息。」

這是客戶端發起的表單POST:

<form action="example.php" method="post"> 

嘛,「客戶端發起的」以張貼形式的實際行動來自於瀏覽器。服務器可能會將該HTML標籤提供給客戶端,告訴它這樣做,但客戶端可以根據需要隨意更改它。 (儘管如此,沒有理由這麼做。)這裏的要點是,這是客戶端發送數據到example.php的一種方式。它與重定向無關,只是將數據發送到服務器上的特定資源。

服務器可以使用重定向,渲染頁面或任何其他響應來響應該數據。

這些可能以多種方式聯合使用。假設您有page1.phppage2.php。在page1有一個表格,然後提交表格,你希望用戶看到page2。這是用戶觀察結果可能無法區分的地方。

page1可以發帖到page2page2可以處理提交的數據然後顯示。 page1可以回發到page1,處理提交的數據,並重定向到page2。對於最終用戶來說,基本上沒有區別。主要區別在於如何組織代碼。在這方面,當然,個人喜好會起作用。但是,這不是其中任何一種工具被採用的唯一情況。例如,出於完全不同的原因,您可能希望將值提交給完全不同的頁面,或者在頁面請求上重定向某些服務器端原因,而客戶端完全不瞭解這些原因。

隨着您開發更復雜的Web應用程序,您會發現某些模式在某些情況下運行良好,個人偏好將開始符合這些模式。最後,這些只是執行操作的工具(將客戶端重定向到其他位置,將數據發送到服務器),而您的總體模式和實踐只是簡單地使用這些工具。

+0

謝謝。這正是我正在尋找的那種答案。我對這兩種「方法」背後的機制有了更多的瞭解! –

1

HTTP location標題和HTML表單實際上沒有可比性。

如果您希望在執行PHP期間創建重定向,則應使用標頭。如果要從客戶端(瀏覽器)向服務器端提交用戶輸入,應使用該表單。

HTML錨提供一個網頁上的鏈接的最佳方式:

<a href="example.php?parameter">Click</a> 
+0

好吧,我明白了。唯一的問題是錨點方法在想要重定向而不點擊時不適合。另一方面,填寫表格時,您必須單擊或按Enter鍵。 –

+2

使用最適合和最適合該任務的任何內容。儘量不要去尋找一種適合所有人的方法,而是看看可用方法的優點和侷限性,並根據這些方法做出決定。 – MrCode

1

在大多數情況下,你使用HTML表單或鏈接。 header()主要用於在代碼執行後要重定向用戶(例如成功登錄後或未被授權訪問受限頁面時)