簡體   English   中英

如果表單有兩個按鈕,如何知道單擊了哪個按鈕

[英]How to know which button was clicked if a form has two buttons

我有兩種形式,一種具有登錄名,另一種具有注銷名,它們都使用相同的controller/form處理器,我正在使用

$_SERVER['REQUEST_METHOD'] 

查看表單是否已提交。

但是我怎么知道是否單擊了登錄或注銷。

$_POST['action'] == 'login'

$_POST['action'] == 'logout' 

不工作。

好的,這是完整的表格:

<?php

$test = 'default';
if( $_SERVER['REQUEST_METHOD'] == 'POST' && $_POST['action'] == 'login' ){
    //do some stuff
    $test = 'login';
}elseif( $_SERVER['REQUEST_METHOD'] == 'POST' && $_POST['action'] == 'logout' ){
    //do other stuff
    $test = 'logout';
}
?><?php echo $test; ?>
            <form method="post" action="">

                    <p>
                    <input type="text" name="username" placeholder="Username" value="">
                    </p> 

                    <p>
                    <input type="password" name="password" value="" placeholder="Password">
                    </p>

                    <p>
                    <input type="submit" name="login" value="Log In">
                    </p>                                                               


            </form>

            <form method="post" action="">
                <input type="submit" name="logout" value="Log Out">
            </form>

但是$test不會改變。

為按鈕指定不同的名稱

如果您具有類型為submitinput元素,則將獲得一個按鈕,該按鈕本身會發布一個值。 給它命名和一個值,該值將與發布數據一起發布:

<input type="submit" name="button1" value="Click me">
<input type="submit" name="button2" value="Or me">

該值通常是本地化的,我想您不想進行檢查,但是您可以只檢查post變量中Button1Button2的存在,以查看單擊了哪個按鈕,無論它們的值是多少。

給按鈕(僅)提供不同的值

另外,如果您知道按鈕值很有用(它包含一個ID或名稱,而不是模板中的本地化文本),則可以為兩個按鈕賦予相同的名稱(例如“ action”),然后檢查post變量的值。 在這種情況下,兩個按鈕的行為或多或少像一組單選按鈕。 不是我的偏愛,但肯定是可能的並且可以接受。

<input type="submit" name="action" value="Action 1">
<input type="submit" name="action" value="Action 1">

或者,您可以在這種情況下使用button標簽,這是一個相似但略有不同的元素。 它還具有名稱和值屬性,但是您可以將文本指定為元素的內容,因此可以將值與顯示給用戶的文本分離。 這將比使用上面的輸入版本更好。

<button type="submit" name="action" value="Action 1">Click me for action 1!</button>
<button type="submit" name="action" value="Action 2">Secondary action</button>

請注意, type="submit"是按鈕的默認設置,因此,只要不需要支持IE7,就可以忽略它。

檢查點擊了哪一個

無論選擇哪種解決方案,都不要忘記進行徹底檢查。 還有其他提交表單的方法, 例如通過單擊enter ,因此請確保正確處理未單擊兩個按鈕的情況。

if (array_key_exists('button1', $_POST)) {
  // Button 1 was clicked
} elseif (array_key_exists('button2', $_POST)) {
  // Button 2 was clicked
} else {
  // Neither was clicked. 
}

或替代

if (array_key_exists('action', $_POST)) {

  switch ($_POST['action') {
    case 'Action 1': 
      // Button 1 was clicked
      break;
    case 'Action 2': 
      // Button 2 was clicked
      break;
    default:
      // An unknown button was clicked!
      break;
  }

} else {
  // Neither was clicked. 
}

為按鈕分配名稱:

<input type="submit" name="Add" value="Add" />
<input type="submit" name="Delete" value="Delete" />

並驗證將哪個設置為:

if (isset($_POST['Add'])) {
    // add
} elseif (isset($_POST['Delete'])) {
    // delete
}

您可以通過isset函數識別:

if(isset($_POST['action']) && $_POST['action']=="login"){
  //Login Button Logic
} else if(isset($_POST['action']) && $_POST['action']=="logout"){
  //Logout Button Logic
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM