如何一次获取和处理PHP多个$_POST记录


How can I fetch and process PHP multiple $_POST records at once?

我正在设计一个管理界面,管理员可以一次修改网站的成员(批量编辑)。我们已经有了一个单独的编辑,但他们希望能够一次编辑所有用户,我想这样做,所以只有一个"提交"按钮。然后,PHP代码应该遍历每个记录,查找更改并根据需要进行更新。我知道如何做每件事,但循环浏览记录。我尝试过创建一个数组,计算posts记录,但我对数组或多维数组的处理还不够。以下是我在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注入,并在最终版本中进行清理。我只是想弄清楚这里的逻辑。

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

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

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

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