如果表单有两个按钮,如何知道单击了哪个按钮

时间:2015-12-09 09:25:23

标签: php forms

我有两种形式,一种是登录,另一种是注销,它们都使用相同的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并没有改变。

3 个答案:

答案 0 :(得分:3)

为按钮指定不同的名称

如果您有input类型的submit元素,您将获得一个自己发布值的按钮。给它一个名称和一个值,该值将与帖子数据一起发布:

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

该值通常是本地化的,我认为您不想检查该值,但您可以检查post变量中是否存在Button1Button2以查看哪个一个被点击,无论它们的价值是什么。

为按钮(仅限)提供不同的值

或者,如果您知道按钮值有用(它包含ID或名称而不是模板中的本地化文本),则可以为两个按钮指定相同的名称(例如&#39; action&#39;)和改为检查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。

检查点击了哪一个

无论您选择哪种解决方案,都不要忘记彻底检查。还有其他方式可以提交表单for instance through clicking 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. 
}

答案 1 :(得分:1)

为按钮指定名称:

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

并验证哪一个设置为:

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

答案 2 :(得分:1)

您可以通过isset功能识别:

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