使用while循环SQL更新多个数据

时间:2018-06-12 19:22:49

标签: php mysqli

我想更新while循环中的所有数据。但问题是只有一个数据正在更新。例如:

想象一下,我的tbl_rooms

中有3个数据

columns: id, roomname, capacity

并且数据将在while循环中获取,然后所有文本框将是while循环的三倍。然后我想更新while循环内的所有数据。我需要你们。谢谢!

以下是代码:

$db = mysqli_connect('localhost', 'root', '', 'psbr'); 
$query = mysqli_query($db, "SELECT * FROM rooms")
<script src = "http://code.jquery.com/jquery-1.9.1.js"></script>

  <?php while ($row = mysqli_fetch_array($query)) { ?>
  <input type="text" name="room_id" id="room_id" value="<?php echo $row['id']; ?>">
  <?php } ?>
  <input type="submit" name="submit" onclick="return chk()">

<script type="text/javascript">

function chk()
{
var roomid = document.getElementById('room_id').value;
var dataString = 'roomid='+ roomid;
$.ajax({
  type: "post",
  url: "sample_server.php",
  data:dataString,
  cache:false,
  success: function(html){
    alert("success!");
  }
});
return false;
}


</script>

// sample_server.php

<?php 
$db = mysqli_connect("localhost", "root", "", "psbr");

$roomid = $_POST['roomid'];

    $update_status = "UPDATE rooms SET capacity = capacity - 1 WHERE id = '$roomid'";
    mysqli_query($db, $update_status);

 ?>

1 个答案:

答案 0 :(得分:2)

您正在显示多个具有相同名称的输入字段,因此PHP不知道哪个输入字段与哪个房间ID相对应。您当前的代码将输出如下内容:

<input type="text" name="room_id" id="room_id" value="1"></input>
<input type="text" name="room_id" id="room_id" value="2"></input>
<input type="text" name="room_id" id="room_id" value="3"></input>

因此,如果您将表单提交给PHP,它将收到:

$_POST = array(
    'room_id' => 1,
    'room_id' => 2,
    'room_id' => 3
)

或者

$_POST = array(
    'room_id' => 3
)

无论哪种方式,$_POST["room_{$id}"]都将为空,因为您的所有数据都以相同的名称存储。

您需要做的是为每个字段提供 唯一 nameid属性,如下所示:

while($row = mysqli_fetch_assoc($query)) { ?>
    <input type="text" name="room_<?php echo $row['id'] ?>" id="room_<?php echo $row['id'] ?>" value="<?php echo $row['id'] ?>"></input>
<?php } ?>

这将输出:

<input type="text" name="room_1" id="room_1" value="1"></input>
<input type="text" name="room_2" id="room_2" value="2"></input>
<input type="text" name="room_3" id="room_3" value="3"></input>

这意味着您的$_POST数组将如下所示:

$_POST = array(
    'room_1' => 1,
    'room_2' => 2,
    'room_3' => 3
)

然后,您可以使用以下for循环从POST检索值:

for($i = 1; isset($_POST["room_{$i}"]); $i++) {
    mysqli_query($db, "UPDATE rooms SET capacity = capacity - 1 WHERE id={$i}");
    // Or whatever you want to do
}

我建议使用复选框或其他内容而不是文本字段,如果您按固定金额或数字字段递减(但是您需要使用类似intval($_POST["room_{$i}"])的内容来清理用户输入