你能在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>
元素中会包含多个提交按钮,我需要知道哪个被点击以及它将被使用的操作对于。对不起,如果不清楚,但我不认为我应该得到任何方式的支持......
答案 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)。