Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/267.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP foreach循环用最后一条记录覆盖所有项_Php_Mysql_Pdo_Foreach - Fatal编程技术网

PHP foreach循环用最后一条记录覆盖所有项

PHP foreach循环用最后一条记录覆盖所有项,php,mysql,pdo,foreach,Php,Mysql,Pdo,Foreach,我正在尝试更新一个mysql表,我不知道为什么,但所有记录都用最后一个条目填充 以下是我的PHP代码: [...] if (isset($_POST['update'])){ $doorNumber = $_POST['doorNumber']; //array $doorDescription = $_POST['doorDescription']; //array //update data $pdo = Database::connect(); $pdo->setAttribu

我正在尝试更新一个mysql表,我不知道为什么,但所有记录都用最后一个条目填充

以下是我的PHP代码:

[...]

if (isset($_POST['update'])){

$doorNumber = $_POST['doorNumber']; //array
$doorDescription = $_POST['doorDescription']; //array

//update data
$pdo = Database::connect();
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);


foreach($doorNumber as $key => $val){
  $door = $pdo->prepare("UPDATE doors SET number = ?, description = ? WHERE acc_id = ?");
  $door->execute(array($doorNumber[$key], $doorDescription[$key], $id));
}

Database::disconnect();
header('Location: index.php');

[...]
以下是相关的html:

[...]

<table class="table">
            <thead>
                <tr class="text-uppercase">
                  <th></th>
                  <th>Door #</th>
                  <th>Description</th>
                </tr>
            </thead>
            <tbody>                        
                <?php
                    foreach ($rooms as $row){
                        echo '<tr class="text-left text-capitalize">';
                        echo '<td><input type="checkbox" name="chk[]" checked="checked"</td>';
                        echo '<td><input type="number" class="form-control" id="doorNumber[]" name="doorNumber[]" value=' .$row['number']. '></td>';
                        echo '<td><textarea rows="1" class="form-control" id="doorDescription[]" name="doorDescription[]">' .$row['description']. '</textarea></td>';
                        echo '</tr>';
                    }
                ?>
            </tbody>
          </table>
[...]
[…]
门#
描述
[...]
该表位于一个表单中,通过$\u GET['id']请求从mysql数据库获取记录(从而为变量$id设置一个值)。每当我更新记录时,在提交时(即$_POST['update'])表都会正常更新,但所有记录都将等于最后一次输入

非常感谢您的帮助


提前感谢。

如果html表格列出了属于acc\u id的所有门和门描述,则每个update语句都会更新属于某个帐户的所有门编号和描述,因为在where条件中仅提供acc\u id

如果要单独维护门号,则必须将其包含在where条件中,并使用其原始值(假设给定帐户不能有重复的门号):

我将向html表单添加一个隐藏控件:


echo“您的
表单
标记是否包装了表中的所有行?Shadow,非常感谢您的建议。这真的成功了!同样感谢您的清晰解释。在这种情况下,请将答案标记为已接受,以便其他观看此问题的人知道问题已解决。
UPDATE doors SET number = ?, description = ? WHERE acc_id = ? and number=?
$originaldoorNumber = $_POST['originalnumber']; //array
$door->execute(array($doorNumber[$key], $doorDescription[$key], $id, $originaldoorNumber[$key]))