13

我有以下表格:

<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>

编辑

是否可以在提交之前将这两个值传递到一个关联数组中?我想以这种形式传递它:

array('deptid'=>'deptname')

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

谢谢。

4

7 回答 7

26

这是一种使用纯 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 
}

编辑

或者... 您想deptidinput 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']并“手动”添加具有相同索引的新“行”输入。这是一个常见的陷阱,所以如果这是你在某个时候所追求的,你只需要考虑一下。

于 2012-12-27T07:12:40.000 回答
6

$_POST已经是一个关联数组我建议您不要使事情复杂化,因为$_POST已经包含来自您的表单的数据

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

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

其他见解

当我看到您的代码时,您希望在deptname数据deptid到达 PHP 服务器端代码时将其放入其中。好吧,您可以做的就是将其分配给键deptid

$_POST['deptid'] = $_POST['deptname'];
$myassoc = $_POST;
print_r($myassoc);
于 2012-12-27T07:10:21.550 回答
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'];
    }
?>
于 2012-12-27T07:14:11.973 回答
1

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

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

于 2013-06-27T15:16:34.760 回答
0

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

您可以通过分配$_POST给一个变量来重建您需要的形式的数组

$myarray = $_POST;

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

于 2012-12-27T07:23:48.220 回答
-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']);
?>
于 2012-12-27T07:10:55.243 回答
-1
$deptid = $_POST['deptid'];
$array = array($$deptid => $_POST['deptname']);
print_r($array);
于 2012-12-27T07:13:15.613 回答