Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/295.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 如果窗体有两个按钮,如何知道单击了哪个按钮_Php_Forms - Fatal编程技术网

Php 如果窗体有两个按钮,如何知道单击了哪个按钮

Php 如果窗体有两个按钮,如何知道单击了哪个按钮,php,forms,Php,Forms,我有两个表单,一个是登录表单,另一个是注销表单,它们都使用相同的controller/form处理器, 我正在使用 $_SERVER['REQUEST_METHOD'] 查看表单是否已提交 但我如何知道是否单击了登录或注销 $_POST['action'] == 'login' if (array_key_exists('button1', $_POST)) { // Button 1 was clicked } elseif (array_key_exists('button2',

我有两个表单,一个是登录表单,另一个是注销表单,它们都使用相同的
controller/form
处理器, 我正在使用

$_SERVER['REQUEST_METHOD'] 
查看表单是否已提交

但我如何知道是否单击了登录或注销

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

你不工作了

好的,这是完整的表格:

<?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
不会改变。

为按钮指定不同的名称

如果您有一个类型为
submit
input
元素,您将得到一个按钮,该按钮本身会发布一个值。给它一个名称和一个值,该值将与post数据一起发布:

<input type="submit" name="button1" value="Click me">
<input type="submit" name="button2" value="Or me">
或者您可以在这种情况下使用
按钮
标记,这是一个类似但略有不同的元素。它还有一个name和value属性,但是可以将文本指定为元素的内容,这样就可以将值与呈现给用户的文本分离。这比使用上面的输入版本要好

<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>
或者作为替代方案

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. 
}

为按钮指定不同的名称

如果您有一个类型为
submit
input
元素,您将得到一个按钮,该按钮本身会发布一个值。给它一个名称和一个值,该值将与post数据一起发布:

<input type="submit" name="button1" value="Click me">
<input type="submit" name="button2" value="Or me">
或者您可以在这种情况下使用
按钮
标记,这是一个类似但略有不同的元素。它还有一个name和value属性,但是可以将文本指定为元素的内容,这样就可以将值与呈现给用户的文本分离。这比使用上面的输入版本要好

<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>
或者作为替代方案

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" />

为按钮指定名称:

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

您可以通过
isset
功能识别:

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

您可以通过
isset
功能识别:

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

你能把整个文件都寄出去吗?我相信如果我们能够看到整个上下文,我们将能够提供更好的帮助。现在您发布了整个文件,您正在检查
$\u POST['action']
,但您没有发布名为action的值。按钮的名称是
登录
注销
。顺便说一句,由于您有单独的表单,您还可以向表单的
操作
属性添加一些内容,因此信息已经在其中。感谢@GolezTrol,我意识到并正在使用
isset($\u POST['login'])
isset($\u POST['logout'])
现在可以发布整个文件了吗?我相信如果我们能够看到整个上下文,我们将能够提供更好的帮助。现在您发布了整个文件,您正在检查
$\u POST['action']
,但您没有发布名为action的值。按钮的名称是
登录
注销
。顺便说一句,由于您有单独的表单,您还可以向表单的
操作
属性添加一些内容,因此信息已经在其中。感谢@GolezTrol,我意识到并正在使用
isset($\u POST['login'])
isset($\u POST['logout'])
现在。“给按钮(仅)不同的值”这是我比较喜欢的方法,也有很好的例子,但这要视情况而定。例如,当我在商店中将“addtobasket”更改为“addtocart”时,我不希望我的代码失败,因为它会检查文本。在这种情况下,我更喜欢使用按钮的“内部”名称,而不是按钮上的文本。但是,如果我呈现一个显示所有颜色的按钮的形式,我可以选择,我可以考虑使用这个值,虽然在这种情况下,我也不想太多地依赖于我呈现给用户的文本。当然,当使用
标记时,这是不同的,因为它的值可能不同于它的文本。是的,按钮标记是一种方法。谢谢。我在回答中补充了这一点。“给按钮(仅)不同的值”将是我的首选方法,这方面有很好的案例,但这取决于具体情况。例如,当我在商店中将“addtobasket”更改为“addtocart”时,我不希望我的代码失败,因为它会检查文本。在这种情况下,我更喜欢使用按钮的“内部”名称,而不是按钮上的文本。但是,如果我呈现一个显示所有颜色的按钮的形式,我可以选择,我可以考虑使用这个值,虽然在这种情况下,我也不想太多地依赖于我呈现给用户的文本。当然,当使用
标记时,这是不同的,因为它的值可能不同于它的文本。是的,按钮标记是一种方法。谢谢。我在答案中加了这个。