-2

您可以在 html 中发送具有各种值的数组吗?我想在一个<form>元素中使用各种不同的提交按钮发送不同的数组值。

这是我目前正在做的事情。它可以工作,所以我没有问题,但我找不到任何类似的文档,我真的很好奇是否还有其他方法。

带有我的 *psuedo*array 的按钮

 <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>元素中将包含多个提交按钮,我需要知道哪个被单击以及它将用于什么操作。抱歉,如果不清楚,但我认为无论哪种方式我都不应该投反对票...

4

2 回答 2

3

尝试这个:

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

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

于 2013-05-15T19:33:18.367 回答
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)。

于 2017-03-20T18:17:38.033 回答