如何使用各种提交按钮发送数组?

时间:2013-05-15 19:30:41

标签: php html arrays forms optimization

你能在html中发送一个包含各种值的数组吗?我想在一个<form>元素中发送带有各种不同提交按钮的不同数组值。

这是我目前正在做的事情。它的工作原理我没有遇到任何问题,但我找不到类似的任何文档,如果是另一种方式,我真的很好奇。

我的* psuedo *数组

按钮
 <input type="submit" name="form_action" value="action:new_business,id:0">

解码功能:

$action = explode(',', $_POST['form_action']);
$new = array();
foreach ($action as $v) {
    $t = explode(':',$v);
    $new[$t[0]] = $t[1];
}
print_r($new);

结果:

Array ( [action] => new_business [id] => 0 )

当然,这是有效的,所以我真的很好奇是否已有内置解决方案。

所需的简洁性:

<input type="submit" name="array" value="array('0'=>'foo','1'=>'bar')">

print_r($_POST['array]);

Array ( [0] => foo [1] => bar )

编辑:我知道如何使用html发送数组,但这不是我的问题。如果我使用隐藏的输入,无论我点击哪个提交按钮,它们都会被发送,一个<form>元素中会包含多个提交按钮,我需要知道哪个被点击以及它将被使用的操作对于。对不起,如果不清楚,但我不认为我应该得到任何方式的支持......

2 个答案:

答案 0 :(得分:3)

试试这个:

<input type="hidden" name="form_action[action]" value="new_business" />
<input type="hidden" name="form_action[id]" value="0" />

具有name[key]形式名称的输入将压缩为数组。这也适用于name[],它将成为索引数组的元素。

答案 1 :(得分:0)

我知道这个问题已经过时了。我仍然想回答这个问题,因为我目前正在实施类似的东西。

您确实可以编写语句并将其转换为有效的上下文。通过实施:

if(isset($_POST['array'])){
   eval('$my = '.$_POST['array'].';');
   print_r($my);
}

您将POST连接到字符串格式的有效php表达式并进行评估。然而,这非常危险,因为它允许在没有任何验证的情况下执行任何代码。您不能在公共环境中使用它,因为任何人都可以轻松修改按钮发送的字符串。

安全性和效率方面的最佳解决方案是发送csv格式:

<input type="submit" name="array" value="array('0','foo','1','bar')">

在php中:

$my_assoc = array();            
if(isset($_POST['action'])){
    $my = explode(",",filter_input(INPUT_POST, 'action' , FILTER_SANITIZE_STRING));
    for($i = 0, $num = count($my); $i < $num; $i+=2){ 
        $my_assoc[$my[$i]] = $my[$i+1]; 
    }
    print_r($my_assoc);
}

爆炸功能的复杂性是线性的,没有大的影响。通过过滤csv字符串,您还可以确保其中没有不需要的字符(从不信任传入的数据)。然后,您可以保留索引数组($ my)并将每两个值视为(psydo)键值对,或将其转换为关联数组($ my_assoc)。