【问题标题】:How to send array with various submit buttons?如何使用各种提交按钮发送数组?
【发布时间】:2013-05-15 19:30:40
【问题描述】:

你能在 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 发送数组,但这不是我的问题。如果我使用隐藏输入,无论我单击哪个提交按钮,它们都会被发送,一个&lt;form&gt; 元素中将包含多个提交按钮,我需要知道单击了哪个以及它将用于什么操作。抱歉,如果不清楚,但我认为我不应该投反对票......

【问题讨论】:

  • 这可能已经被回答了,因为它的要求不同here

标签: php html arrays forms optimization


【解决方案1】:

试试这个:

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

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

【讨论】:

  • 请查看我的编辑,这将不起作用,因为所有内容都将在一个表单下,并且会有多个具有不同操作和不同 ID 的“提交”按钮。抱歉,如果不清楚。
  • 在这种情况下,您可能最适合当前的设置。
  • 该死的,相当严厉的回应!对不起,我分享了这个问题,哈哈,我只是希望有一种不同的方式。感谢您的努力,Kolink。
【解决方案2】:

我知道这个问题很老了。我仍然想回答这个问题,因为我目前正在实现类似的东西。

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

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);
}

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-01-24
    • 1970-01-01
    • 1970-01-01
    • 2017-02-01
    • 2018-11-27
    相关资源
    最近更新 更多