2016-05-16 189 views
1

我有一個web應用程序的投票,我建設PHP,我正在尋找一個簡單的解決方案,這個簡單的問題(很有趣的問題,我想!):提交多個表單提交值

的投票表格要求您輸入您的電子郵件地址進行投票。我需要每個投票選項都是提交按鈕。

在僞HTML它應該是這樣的:

<form> 
    <input type=email> 
    <input type=submit name=voteOption1 value=VOTE> 
    <input type=submit name=voteOption2 value=VOTE> 
    <input type=submit name=voteOption3 value=VOTE> 
</form> 

這個工程除了一件事罰款:你會注意到,value每個提交按鈕是VOTE - 這不能改變 。所以,我從服務器獲取如下:

[email] => [email protected] 
[voteOption1] => VOTE 

我需要知道他們投票支持(如voteOption1)的選項。 是的,HTML可以改變。

你會如何解決這個問題?

+0

他們投了票voteOption1,這是傳遞給你的表單處理程序的關鍵。這是最直接的答案,不是嗎? – WillardSolutions

+0

問題是,代碼是如何生成的?動態無疑,所以你可能需要發佈。你可能可以使用一個鍵來數組方法。如果它不是動態生成的,那麼爲什麼不設置不同的值呢?這裏不清楚。 –

回答

1

使用HTML 4提交按鈕而非HTML 3.2提交按鈕。然後你可以有不同的值並顯示文字。

<button name="vote" value="Option 1"> 
    VOTE 
</button> 
+0

是真的,但是如果它們的表單是動態生成的呢?這個問題到目前爲止還不清楚。 –

-2
<input type=submit name=voteOption1 value=VOTE1> 
<input type=submit name=voteOption2 value=VOTE2> 

etc ..?

+0

我相信他們的代碼是動態完成的,他們沒有顯示它。我確信他們想到了這一點,但它需要動態構建。否則,他們不會發布這個問題。 –

+0

這不是我downvote這裏順便說一句。 –

+0

我討厭downvotes沒有評論解釋。 我發佈它的原因是因爲它沒有在問題中說什麼可以改變,也不能改變。 – Loek

0

我錯了,還是實際需要檢查點擊了哪個提交按鈕?

if (isset($_POST['voteOption1']) { 
    // VoteOption1 Clicked 
} elseif (isset($_POST['voteOption2']) { 
    // VoteOption2 Clicked 
} elseif (isset($_POST['voteOption3']) { 
    // VoteOption3 Clicked 
} 
+0

我以前的解決方案與此類似,但它非常難看難以維護。 –

+0

當然它很醜,但它是這個問題的直接解決方案。 – smozgur

+0

但是,如果其中一個選項發生變化,那就不好了。 –

1

感謝您的回答。解決這個問題的另一種方法是發送表單數組。例如:

<form> 
    <input type=email> 
    <input type=hidden name=voteOption1[option] value=voteOption1> 
    <input type=submit name=voteOption1[submit] value=VOTE> 
    <input type=hidden name=voteOption2[option] value=voteOption2> 
    <input type=submit name=voteOption2[submit] value=VOTE> 
    <input type=hidden name=voteOption3[option] value=voteOption3> 
    <input type=submit name=voteOption3[submit] value=VOTE> 
</form> 

,所以我得到了來自服務器的以下內容:

[email] => [email protected] 
[voteOption1] => Array 
    (
     [option] => voteOption1 
     [submit] => VOTE 
    ) 

[voteOption2] => Array 
    (
     [option] => voteOption2 
    ) 

[voteOption3] => Array 
    (
     [option] => voteOption3 
    ) 

然後,你可以簡單地查找遞交:

foreach ($submittedForm as $data) { 
    if (array_key_exists ('submit', $data)) { 
     $request->option = $data['option']; 
     break; 
    } 
} 

這樣做的缺點是,所有的元素已提交,但在這種情況下,這不是問題。

+0

哪種類似於我在那裏建議的;-) –

+0

@ Fred-ii-是的,我打這個答案,因爲你顯然寫你的評論:) –

+0

總是很高興知道它是有用的;-) *乾杯查克* –