我有很多不同形式的文件。所有表单都发送到同一个文件,根据提交按钮的名称类型,该文件将包含要使用的正确文件。这是一个例子:
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" />
注意:我仍然是一个菜鸟(显然),我正在处理的应用程序将仅用于私人目的(此处不担心安全性)。
答案 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);