用变量传递提交按钮名称?

时间:2013-12-22 23:53:12

标签: php html

我有很多不同形式的文件。所有表单都发送到同一个文件,根据提交按钮的名称类型,该文件将包含要使用的正确文件。这是一个例子:

start.php:

<form name="input" action="controller.php" method="post">
    <input type="submit" name="dostuff1" value="SEND1" />
    <input type="submit" name="dostuff2" value="SEND2" />
</form>

Controller.php这样:

if(isset($_POST['dostuff1'])) {
    $action = "dostuff1";

} elseif(isset($_POST['dostuff2'])) {
    $action = "dostuff2";
}

include($action.".php");

现在我正在寻找一种方法来抛弃整个“if else”部分。我想知道的是,是否可以发送一个带有按钮的表单,该按钮的名称中存储有变量,例如:

<input type="submit" name="action["dostuff1"]" value="SEND" />

注意:我仍然是一个菜鸟(显然),我正在处理的应用程序将仅用于私人目的(此处不担心安全性)。

2 个答案:

答案 0 :(得分:3)

首先...

  

<input type="submit" name="action["dostuff1"]" value="SEND" />

丢失额外的报价

<input type="submit" name="action[dostuff1]" value="SEND">

现在,为什么不只是拥有一个文件名映射关键字数组,例如

$incs = [
    'dostuff1' => 'dostuff1.php',
    'dostuff2' => 'dostuff2.php',
    // and so on
];

然后,您可以检查该数组中的条目,例如

if (isset($_POST['action']) && is_array($_POST['action'])) {
    $keys = array_keys($_POST['action']);
    $key = reset($keys);
    if (!array_key_exists($key, $incs)) {
        throw new UnexpectedValueException('Bad key');
    }

    include $incs[$key];
}

答案 1 :(得分:1)

您可以使用array_keys

include(array_keys($_POST)[0] . ".php");

现在,显然,这对安全性来说是一个糟糕的想法,但你确实这么说:

  

我正在处理的应用程序将仅用于私人目的(此处不担心安全性)

安全性(以及一般情况下)更好的想法是:

$files = array("dostuff1", "dostuff2");
foreach ($files as &$file) {
    if (isset($_POST[$file])) {
        include($file . ".php");
        break;
    }
}
unset($file);