【问题标题】:Updating multiple MYSQL rows with one submit button [duplicate]使用一个提交按钮更新多个 MYSQL 行[重复]
【发布时间】:2019-11-08 22:34:53
【问题描述】:

我试图用一个提交按钮更新多个 MYSQL 行,

之前我曾经为每一行创建提交,但由于我现在有很多行,我需要一起更新它们

index.php

<?php
if (mysqli_num_rows($row){
while($row1= mysqli_fetch_assoc($row){


id<input  type="text" value="<?php echo $row["id"];?>"  name='id' id="id"  >
id<input  type="text" value="<?php echo $row["name"];?>"  name='name' id="name"  >
}
<button type="submit" formaction="update.php">
         submit
      </button>

}

更新.php


$id= $_POST['id'];
$name= $_POST['name'];

$sql = "UPDATE `$tabelname` SET  
name='$name' 
WHERE id='$id'";

它只更新第一行

【问题讨论】:

  • 我很难相信您的代码使用if (mysqli_num_rows($row) 运行会导致解析错误。这是您的实际代码还是您不小心错过了丢失的括号? while($row1= mysqli_fetch_assoc($row) 也一样。
  • 加上这个while($row1 $row1但没有使用它。你使用了$row。另外$tabelname 是在哪里以及如何定义的?
  • 那么你有id&lt;input 这也会导致另一个错误,这是一个未定义的常量通知。您的问题不清楚。
  • 这不是实际代码。一切正常,>>当我单击更新时,我想使用同一个按钮一起更新所有行
  • 每一行的输入都有相同的名称。只有一个$_POST['id'],它将从最后一行开始。

标签: php mysql loops form-submit


【解决方案1】:

假设id是主键,

在您的 html 中,您需要在名称中使用一个数组。这允许表单将其作为数组发送,而不是只取最后一个值:

<?php while($row1= mysqli_fetch_assoc($row): ?>
    <div>
        <label>Name: </label>
        <input type="text" value="<?=$row["name"]?>"  name="name[<?= $row["id"] ?>]" id="name-"<?= $row["id"] ?> " />
    </div>
<?php endwhile; ?>

这里的关键是name=“name[]”。方括号使它成为一个数组。我使用 id 作为索引。 (注意&lt;?= 只是写&lt;?php echo 的一种更简洁的方式)

然后,在您的 php 脚本中,向您展示的最简单方法是遍历数组并每次更新:

$row = $_POST[‘name’];
foreach($row as $id => $name) {
    // This is a big No-No!
    // $sql = "UPDATE `$tabelname` SET name='$name' WHERE id='$id'";

    // use prepared statements. Always. 
    $sql = "UPDATE `$tabelname` SET name=? WHERE id=?"; // assuming “tabelname” is not user-provided

    // database connection up to you
    $stmt = $db->prepare($sql);
    $stmt->execute( [$name, $id] );
}

【讨论】:

    猜你喜欢
    • 2011-04-14
    • 2014-10-08
    • 2012-01-23
    • 2017-05-03
    • 2016-04-06
    • 1970-01-01
    • 2013-12-18
    • 1970-01-01
    相关资源
    最近更新 更多