2010-08-22 126 views
3

嗨,我對Web編程非常陌生。過去幾天我一直在學習PHP,但我陷入了一件事。表單中的多個提交按鈕

我在我的代碼中有一個窗體標籤,它有兩個提交按鈕來操作數據。 由於我的表單標籤只能有一個動作定義,因此它只能導向一個頁面。 (不太確定)

現在取決於單擊窗體上的按鈕,我想加載一個不同的頁面。 一種方法是檢查在if-else結構中單擊的按鈕,然後在分支中使用echo'...'並顯示爲不同的頁面。但由於某種原因,這看起來不正確。有人能給我一個更好的解決方案嗎?謝謝。

+1

的問題是,有其他的方法好方法提交表單而不是點擊一個提交按鈕 - 例如,當你按下輸入文本「輸入」時如何?我認爲你應該在最後有一個單選按鈕/選擇/複選框,而不是兩個提交按鈕。 – 2010-08-22 08:10:48

回答

2

一種方法是使用Javascript切換窗體的動作,具體取決於哪個控件被點擊。下面的示例使用jQuery庫:

<form id="theForm" action="foo.php"> 
... 
    <input id="first" type="submit"/> 
    <input id="second" type="submit"/> 
</form>​ 

$(document).ready(function() { 
    $("#theForm input").click(function(e) { 
     e.preventDefault(); 
     if(e.target.id == 'first') { 
      $("#theForm").attr("action", "somePage.php"); 
     } else { 
      $("#theForm").attr("action", "anotherPage.php"); 
     } 
     alert($("#theForm").attr("action")); 
     $("#theForm").submit(); 
    }); 
​});​ 

演示在這裏:http://jsfiddle.net/CMEqC/2/

+0

如果JavaScript不可用,這將徹底破壞(並且有足夠多的人絆倒了一對多的JS炸彈,並在那裏安裝了NoScript,你不應該假設它會)。在服務器端進行分支是正確的方法。 – Quentin 2010-08-22 08:44:03

+0

@大衛 - 這是真的,我應該在答案中說明。我的解決方案只有在他的應用程序*要求用戶擁有Javascript的情況下才有用。 – karim79 2010-08-22 09:05:50

+0

這太棒了!我會在某個時候使用JS!謝謝! 但是現在我暫時只做了兩種形式,以便得到兩個動作。謝謝! – Gooner 2010-08-22 13:41:59

1

但它似乎不適合某些原因。

這是錯誤的假設。
任何其他解決方案將是最糟糕的。

檢查服務器端是唯一可靠的解決方案。
但是echo在分行是沒有必要的。還有很多其他方法。
要使用include語句是最明顯的一個。

+0

當我們談到MVC架構時,我認爲這是不對的,除此之外它是一種蹩腳的做事方式。 – Gooner 2010-08-22 13:42:53

+0

@Gooner LOL這是我見過的最有趣的評論。你不明白你在說什麼:) – 2010-08-22 14:00:52

+0

謝謝你讓我知道:) – Gooner 2010-08-23 12:16:57

-2

基礎上添加@ karim79的另一種解決方案,因爲它標記爲PHP:

<form id="theForm" action="foo.php"> 
... 
    <input id="first" name="button" value="first" type="submit"/> 
    <input id="second" name="button" value="second" type="submit"/> 
</form>​ 
在你的foo.php

,做這樣的事情:

<?php 
$submit = isset($_GET['button']) ? trim($_GET['button']) : ''; 

if($submit == 'first') 
{ 
    header('Location: somePage.php'); 
} 
else if($submit == 'second') 
{ 
    header('Location: anotherPage.php'); 
} 
?> 

摘要: 能夠閱讀您的按鈕(2個提交按鈕),您需要在每個按鈕上添加name。爲了簡單起見,只需在兩者上使用相同的名稱即可。然後,添加不同的value。接下來,您需要通過檢查在特定按鈕上發送的值來知道正在單擊哪個按鈕。

+0

這將丟棄所有的表單數據,當它重定向時,但它與問題描述的方法相同。 – Quentin 2010-08-22 08:45:30

0

只是作爲參考... INT HTML5按鈕可以重新定義表單的操作,方法,類型等http://w3schools.com/html5/tag_button.asp對我來說,這是控制形式:)

+0

在2030年,當沒有實現該功能的瀏覽器可能不足以擔心時,此答案可能會有用。 – Quentin 2010-08-22 08:47:19

+0

我知道..這就是爲什麼我說「作爲參考」...我認爲這是一個很好的功能,雖然 – pleasedontbelong 2010-08-22 08:51:40