【问题标题】:How can I fetch and process PHP multiple $_POST records at once?如何一次获取和处理 PHP 多个 $_POST 记录?
【发布时间】:2016-03-14 22:29:31
【问题描述】:

我正在设计一个管理界面,管理员可以在其中一次性修改网站成员(批量编辑)。我们已经有一个编辑,但他们希望能够一次编辑所有用户,我想这样做,所以只有一个“提交”按钮。然后 PHP 代码应该循环遍历每条记录,查找更改并根据需要进行更新。我知道如何做所有事情,除了循环浏览记录。我尝试创建一个数组,计算帖子记录,但我对数组或多维数组的使用还不够。这是我在 POST 页面上的现有代码:

<?php  $i = 0;
  while($member_list = mysql_fetch_array($getmembers)){  									 
  ?>
              <tr style="vertical-align:top;">
                    <td><input type="text" name="userid[<?=$i?>]" readonly value="<?php echo $id; ?>" style="width:40px;"></td>
                    <td><input type="text" name="username[<?=$i?>]" value="<?php echo $member_list['mem_username']; ?>" onchange='changes=true;' style="width:90px;"></td>
                    <td><input type="text" name="firstname[<?=$i?>]" value="<?php echo $member_list['first_name']; ?>" onchange='changes=true;' style="width:90px;"></td>
                    <td><input type="text" name="lastname[<?=$i?>]" value="<?php echo $member_list['last_name']; ?>" onchange='changes=true;' style="width:90px;"></td>
                    <td><input type="text" name="email[<?=$i?>]" value="<?php echo $member_list['email']; ?>" onchange='changes=true;'></td>
                    <td><textarea name="notes[<?=$i?>]" cols="20" rows="2" onchange='changes=true;'><?php echo $member_list['admin_notes']; ?></textarea></td>
              </tr>
<?php 	$i = $i + 1;	 } ?>

它发布到:

$user_records = array(count($_POST['userid'])); // create the array

foreach ($user_records as $value) {  // go through array
    $user_records[] = array( // Go through the array
        $username => $_POST['username'.$i],
        $firstname => $_POST['firstname'.$i],
        $lastname => $_POST['lastname'.$i],
        $email => $_POST['email'.$i],
        $notes => $_POST['notes'.$i],
        );

        echo $username . ' | ' . $firstname; //this line is for testing to display only
        // Then posting comparison occurs and is updates as needed  
}

所以,简而言之 - 当我运行上面的示例时,我得到 5 个管道(6 个字段的分隔符数量),但没有得到任何数据,并且它不会循环遍历任何其他记录。我知道我遗漏了一些东西,只是无法全神贯注地看到它。非常感谢任何建议。

注意:显然我会在最终版本中阻止 SQL 注入并清理内容。我只是想弄清楚这里的逻辑。

【问题讨论】:

  • var_dump($_POST); 返回什么?
  • 返回帖子中的所有数据。您想查看返回的数据样本吗?
  • 显然有,贴在这里。
  • array(7) { ["submit"]=> string(8) "全部保存" ["userid"]=> array(74) { [0]=> string(3) " 201" [1]=> 字符串(1) "9" [2]=> 字符串(3) "192" [3]=> 字符串(3) "185" [4]=> 字符串(3) "215" [5]=> 字符串(3) "171" [6]=> 字符串(3) "159" [7]=> 字符串(3) "204" [8]=> 字符串(3) "164" [9 ]=> 字符串(3) "156" [10]=> 字符串(3) "147" [11]=> 字符串(1) "2" [12]=> 字符串(3) "208" [13]= > 字符串(3)“202”[14]=>字符串(3)“209”[15]=>字符串(3)“178”[16]=>字符串(3)“203”[17]=>字符串(3) “177”
  • 它可以让我发布很多...但这是一个很小的示例

标签: php html arrays post


【解决方案1】:

您从未在处理循环中定义 $i,因此您正在访问未知/未定义的数组键。

由于您已经通过 userid[$i] 内容在 html 中定义了显式键,因此您的循环应该是:

foreach($_POST['userid'] as $key => $userid) {
    $username = $_POST["username"][$key];
    $firstname = $_POST["firstname"][$key]; 
    etc...

请注意您的每个用户名/名字/等...如何自己变成数组。访问该特定字段的不是username42,而是username[42]

【讨论】:

  • 嗯,好点。让我尝试使用它。谢谢你。我会告诉你结果的。
  • 就是这样!完美的!非常感谢马克 B!
猜你喜欢
  • 1970-01-01
  • 2017-01-11
  • 2018-03-03
  • 2019-09-20
  • 2012-12-18
  • 2020-04-22
  • 1970-01-01
  • 2013-04-29
  • 1970-01-01
相关资源
最近更新 更多