在HTML表单中,指定的数组键被PHP $ _POST数组中的顺序键替换

时间:2013-10-30 09:27:51

标签: php html arrays forms post

我有一个HTML表单,其中包含一个表,其中每一行都是一个数据库条目,并且拥有自己的输入字段和按钮。我使用数组表示法(例如name="edit[<?php echo $entry['id']; ?>]")并将条目的id作为键来确定PHP中应编辑/删除哪个条目。

这就是HTML表单和两个示例行:

<form class="form-inline" action="index.php" method="POST" name="foo_form">
...
<tr>
  <td>14</td>
  <td><input type="text" class="input" placeholder="fooooo" name="headline[14]" value="fooooo"/></td>
  <td><textarea class="input-block-level" rows="2" name="text[14]">lorem ipsum123</textarea></td>
  <td>
    <input name="edit[14]" type="submit" class="btn" value="save changes"/>
    <input name="delete[14]" type="submit" class="btn" value="delete"/>
  </td>
</tr>
<tr>
  <td>15</td>
  <td><input type="text" class="input" placeholder="baaar" name="headline[15]" value="baaar"/></td>
  <td><textarea class="input-block-level" rows="2" name="text[15]">lorem ipsum456</textarea></td>
  <td>
    <input name="edit[15]" type="submit" class="btn" value="save changes"/>
    <input name="delete[15]" type="submit" class="btn" value="delete"/>
  </td>
</tr>
...
</form>

假设我按下id为15的条目的删除按钮,那么这是我在家里的开发服务器上获得的var_dump($_POST)输出(PHP版本5.3.10-1ubuntu3.8)和我的托管vServer(PHP版本5.3.2-1ubuntu4.21):

array(3) {
  ["headline"]=>
  array(2) {
    [14]=>
    string(6) "fooooo"
    [15]=>
    string(5) "baaar"
  }
  ["text"]=>
  array(2) {
    [14]=>
    string(14) "lorem ipsum123"
    [15]=>
    string(14) "lorem ipsum456"
  }
  ["delete"]=>
  array(1) {
    [15]=>
    string(6) "delete"
  }
}

这就是我在共享网站空间(PHP版本5.3.27)上获得的内容,其中脚本必须运行。缺少正确的ID作为数组键,我得到0,1,... n作为数组键:

array(3) {
  ["headline"]=>
  array(2) {
    [0]=>
    string(6) "fooooo"
    [1]=>
    string(5) "baaar"
  }
  ["text"]=>
  array(2) {
    [0]=>
    string(14) "lorem ipsum123"
    [1]=>
    string(14) "lorem ipsum456"
  }
  ["delete"]=>
  array(1) {
    [0]=>
    string(6) "delete"
  }
}

文件完全相同,HTML表单包含正确的数组键。我用firebug检查了发送的POST请求,它也包含正确的密钥。必须有服务器端设置或禁用指定键并用顺序键替换它的东西。希望有人知道解决方案。

0 个答案:

没有答案