我想更新while循环中的所有数据。但问题是只有一个数据正在更新。例如:
想象一下,我的tbl_rooms
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);
?>
答案 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}"]
都将为空,因为您的所有数据都以相同的名称存储。
您需要做的是为每个字段提供 唯一 name
和id
属性,如下所示:
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}"])
的内容来清理用户输入