如何在PHP中发布关联数组

时间:2012-12-27 07:08:28

标签: php html associative-array

我有以下表格:

<form action="options.php" method="post">
    <input type="text" name="deptid" id="deptid" />
    <input type="text" name="deptname" id="deptname" />
    <input type="submit" name="submit" id="submit" value="save" />
</form>

修改

是否可以将这两个值传递给一个关联数组 BEFORE 提交? 我想以这种形式传递它:

array('deptid'=>'deptname')

我需要这个,因为我避免修改目标php文件的脚本(options.php)

感谢。

7 个答案:

答案 0 :(得分:23)

这是一种使用纯HTML的方法,它使您几乎完全符合您的目标,并且只使用HTML:

<form action="options.php" method="post">
    <input type="text" name="options[deptid]" id="deptid" />
    <input type="text" name="options[deptname]" id="deptname" />
    <input type="submit" name="submit" id="submit" value="save" />
</form>

哪个会在PHP中提供:

$post_options = array(
    'options' => array(
        'deptid '=> '[that input element value]',
        'deptname' => '[that input element value]'
    )
);

然后您可以(包括清理)访问权限,例如:

$post_options = array('options');

if (is_numeric($post_options['deptid'] && $post_options['deptid'] > 0) {
    // Do whatever 
}

if (is_string($post_options['deptname'] && strlen($post_options['deptname'] > 2)) {
    // Do whatever 
}

修改

或者......您想引用deptid属性中的input name并使用它来修改部门名称的行?这似乎表明了这样的事情:

<?php

$deptid = 1;
$deptname = 'Department of Silly Walks';

?><input type="hidden" name="options[<?=$deptid?>]" value="<?=$deptname?>">

哪个输出:

<input type="hidden" name="options[1]" value="Department of Silly Walks">

http://codepad.org/DtgoZGe7

这个问题是$deptid值变成了一个实际上没有直接命名或引用的值。我认为这可能有问题,因为从服务器到客户端和后面的值的抽象,所以我建议我在顶部而不是。这在实践中并没有多大区别,但它或多或少都是自我记录的。

注意,如果你想序列化一个部门列表,那就有点棘手了。例如,您可以尝试这样做:

<input type="text" name="options[][deptid]" id="deptid" />
<input type="text" name="options[][deptname]" id="deptname" />

这会为每个input添加一个索引值。然而......他们不是直接关联的。因此,您将获得每个密钥的两个零索引数组。

在这种情况下,我建议使用Javascript添加每个新部门的input元素,这样您就可以为每个元素添加如下数字:

<input type="text" name="options[0][deptid]" id="deptid" />
<input type="text" name="options[0][deptname]" id="deptname" />
<br/>
<input type="text" name="options[1][deptid]" id="deptid" />
<input type="text" name="options[1][deptname]" id="deptname" />
<br/>
<input type="text" name="options[2][deptid]" id="deptid" />
<input type="text" name="options[2][deptname]" id="deptname" />
<br/>
<input type="text" name="options[3][deptid]" id="deptid" />
<input type="text" name="options[3][deptname]" id="deptname" />

或者使用旧式POSTBACK方法并使用PHP来计算$POST['options']并“手动”添加具有相同索引的新“输入”行。这是一个常见的陷阱,所以如果这是你在某些时候所追求的,你只需要考虑它。

答案 1 :(得分:6)

$_POST已经是一个关联数组我建议你不要复杂之外的事情因为 $_POST已经拥有数据来自你的表格

$myassoc = $_POST;
print_r($myassoc);

并且您将收到的关联数组在表单中的输入元素的name属性中组织并命名为相同(包括textarea)

其他见解

当我看到您的代码时,您希望将deptname数据放到deptid,因为它到达PHP服务器端代码。那么你可以做的就是将它分配给键deptid

$_POST['deptid'] = $_POST['deptname'];
$myassoc = $_POST;
print_r($myassoc);

答案 2 :(得分:3)

<form method="post">
    <input type="text" name="formdata['deptid']" />
    <input type="text" name="formdata['deptname']" />
    <input type="submit" />
</form>

<?php
    if(isset($_POST['formdata']))
    {
       $deptid = $_POST['formdata']['deptid'];
       $deptname = $_POST['formdata']['deptname'];
    }
?>

答案 3 :(得分:1)

使用适当的结构构建JS对象,使用JSON.stringify()将其转换为JSON,POST它,然后执行json_decode($_POST['data'],true)

您将拥有从JS对象到PHP关联数组的精确副本。删除true的第二个参数以获取PHP对象。

答案 4 :(得分:0)

$_POST已经是一个关联数组。

只需将$_POST分配给变量

,即可重建所需表单的数组
$myarray = $_POST;

现在$ myarray就是你所需要的。做var_dump($myvar);

答案 5 :(得分:-1)

你为什么要那样做? 但是,您可以通过以下形式发送“数组”:

<form method="post">
    <input type="text" name="textboxes[]" />
    <input type="text" name="textboxes[]" />
    <input type="submit" />
</form>

<?php
    if(isset($_POST['textboxes']))
        var_dump($_POST['textboxes']);
?>

答案 6 :(得分:-1)

$deptid = $_POST['deptid'];
$array = array($$deptid => $_POST['deptname']);
print_r($array);