2015-10-22 49 views
1

我發現這個問題How do I use two submit buttons, and differentiate between which one was used to submit the form?的答案,使用兩個不同的名稱按鈕在多步驟php表單中處理無按鈕被按下的情況?

<input type="submit" name="publish" alt="Publish" value=""/> 
<input type="submit" name="save" alt="Save" value=""/> 

,然後檢測其被

<?php 
    if (isset($_POST['publish'])) { 
     // Publish-button was clicked 
    } 
    elseif (isset($_POST['save'])) { 
     // Save-button was clicked 
    } 
?> 

我在這個答案的問題How can I tell which button was clicked in a PHP form submit?的再發現按下一個應該不這樣做,因爲它可能發生沒有按鈕被點擊。

提交表單其它方式存在,一些瀏覽器/版本決定 沒有任何在其中的一些 情況提交按鈕發送名稱/值。例如,當光標/焦點位於文本字段上時,許多用戶通過按Enter 鍵提交表單。表單也可以是通過javascript提交的 ,以及一些更晦澀的方法。

和一個應該還是用

if ($_SERVER['REQUEST_METHOD'] === 'POST') { 
    //something posted 

    if (isset($_POST['publish'])) { 
     // Publish-button was clicked 
    } else { 
     // Assume Save-button was clicked 
    } 
} 

1.問:哪個瀏覽器,如果你按在窗體的一個文本框輸入實際上並不發送一個提交按鈕的名稱?我剛剛用Mozilla檢查過它,並在這個瀏覽器中發送了提交按鈕的名稱。

2.問題:我想在php中構建一個從頁面1到頁面3的多步表單。所有頁面都在同一個php文件中,並且我從按鈕中檢測到我想要的頁面去旁邊,結構類似於這樣:

<?php 
    if(isset($_POST['button1'])) 
    { 
    include 'page2.php'; 
    } 
    elseif(isset($_POST['button2'])) 
    { 
     include 'page3.php'; 
    } 
    else 
    { 
     include 'page1.php'; 
    } 
    ?> 

因爲我有前進和後退按鈕,我想存儲在$ _SESSION中[「CURRENT_PAGE」]的用戶目前網頁,而當表單提交時沒有按鈕值,那麼我會進入下一頁。但是,這對我來說似乎有點複雜。有一個更短的解決方案嗎?

回答

1
  1. 正如筆者建議,任何數量的機器人的,鮮爲人知的用戶 劑,實驗客戶,腳本,腳本小子,程序員通過調試工具 測試功能,和阿德里安·拉莫的。

  2. 我想你可以引入隱藏變量;或者,您可以通過GET傳遞狀態。可能是最好要做的事情 將引入的Javascript會強制(幾乎所有有效) 用戶推動其中一個按鈕,並讓服務器產生一個 錯誤頁面提交沒有正確的按鈕的任何請求。 或者,也許更好,還有更多的Web 2.0,不要使用多個頁面表單,而是在客戶端進行魔術(通過隱藏和隱藏表單的部分等),然後將 「多部分」形式在一個操作中由服務器驗證。

+0

使用JavaScript意味着你只需要在最後一個階段提交一個按鈕。 – Burgi

+0

關於問題1:我不想阻止腳本小子破解我的表單。我只關心在使用過時瀏覽器時嘗試通過表單的人是否會遇到困難。在文本字段中輸入時實際上是否有瀏覽器沒有傳遞按鈕名稱/值?我認爲使用Javascript並不能防止腳本小子侵入表單。我只知道如何隱藏/取消隱藏的東西與JavaScript,但不是每個人都是啊JS啓用。 – Adam

相關問題