Php 使用while循环SQL更新多个数据
我想更新while循环中的所有数据。但问题是只有一个数据正在更新。例如: 假设我的Php 使用while循环SQL更新多个数据,php,mysqli,Php,Mysqli,我想更新while循环中的所有数据。但问题是只有一个数据正在更新。例如: 假设我的tbl\u房间中有3个数据 列:id、roomname、容量 数据将在while循环中获取,然后所有文本框将是while循环的三倍原因。然后我想更新while循环中的所有数据。拜托,我需要你们。谢谢 代码如下: $db = mysqli_connect('localhost', 'root', '', 'psbr'); $query = mysqli_query($db, "SELECT * FROM rooms
tbl\u房间中有3个数据
列:id、roomname、容量
数据将在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>
$db=mysqli_connect('localhost','root','psbr');
$query=mysqli\u query($db,“从房间中选择*)
您正在显示多个同名输入字段,因此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>
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 } ?>
或许
$_POST = array(
'room_id' => 3
)
无论哪种方式,$\u POST[“room{$id}”]
都将为空,因为您的所有数据都存储在同一个名称下
您需要做的是为每个字段提供一个唯一的
和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>
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 } ?>
然后,您可以使用以下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($\u POST[“room{$I}]”之类的方法清理用户输入)
您正在显示具有相同名称的多个输入字段,因此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>
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 } ?>
或许
$_POST = array(
'room_id' => 3
)
无论哪种方式,$\u POST[“room{$id}”]
都将为空,因为您的所有数据都存储在同一个名称下
您需要做的是为每个字段提供一个唯一的
和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>
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 } ?>
然后,您可以使用以下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($\u POST[“room{$I}]”)之类的方法清理用户输入)
“问题是只有一个数据正在更新。”…好的,那么1)所有文本框都将具有相同的内容“room_id”名称,您只需返回3个同名变量,因此服务器无法区分它们之间的差异。请参阅本文以了解解决方案:2)你更新的PHP代码在哪里?我们需要检查里面是否也有问题。对不起,先生,我忘了,我已经更新了!@ADysonok,所以按照我第一个链接中的解决方案,允许提交多个相同名称的值。然后在PHP中,你可以循环使用“room_id”POST变量(因为它现在将是一个数组)并对提交的每个项目执行一个更新查询。另外,您的代码当前易受SQL注入攻击-恶意用户可能会输入值,从而使他们能够窃取、损坏或删除您的数据。请参阅以获取解释以及使用PHP/mysqli.sir@ADyson安全编写查询的一些示例。我没有真正获得point在链接中,请帮助我解决此问题。:((并且您的应用程序不应以“root”身份登录MySQL。)“-root可以做任何它想做的事情,包括删除所有数据库等。相反,它可以为应用程序创建一个单独的SQL登录帐户,该帐户只具有它实际工作所需的权限。再加上SQL注入漏洞,这会使您的数据库成为一本开放的书,供黑客使用。”“问题是只有一个数据正在更新。”…好的,因此1)所有文本框都将具有相同的“room_id”名称,您只需返回3个同名变量,因此服务器无法区分它们之间的差异。有关解决方案,请参阅本文:2)你更新的PHP代码在哪里?我们需要检查里面是否也有问题。对不起,先生,我忘了,我已经更新了!@ADysonok,所以按照我第一个链接中的解决方案,允许提交多个相同名称的值。然后在PHP中,你可以循环使用“room_id”POST变量(因为它现在将是一个数组)并对提交的每个项目执行一个更新查询。另外,您的代码当前易受SQL注入攻击-恶意用户可能会输入值,从而使他们能够窃取、损坏或删除您的数据。请参阅以获取解释以及使用PHP/mysqli.sir@ADyson安全编写查询的一些示例。我没有真正获得point在链接中,请帮助我解决此问题。:((并且您的应用程序不应以“root”身份登录MySQL。)"-root可以做任何它想做的事情,包括删除所有数据库等等。相反,为应用程序创建一个单独的SQL登录帐户,该帐户只有它实际工作所需的权限。再加上SQL注入漏洞,这会让你的数据库成为黑客们的一本打开的书。谢谢你,先生!但是问题是,仍然无法工作。我应该如何处理sampleserver.php
这样的问题?先生,我如何使用jquery声明id?先生,请帮助我解决此问题:((((@pacificskybeachresort假设您想从输入字段中的每个房间的容量中减去1,是的。如果您想通过对sampleserver.php的AJAX POST请求来做到这一点,除了JavaScript之外,您可以做几乎相同的事情:@plato,这样,如果文本框和按钮被包装在表单标记中,就更容易了(正如他们通常应该做的那样),并且使用jQuery处理程序处理“submit”事件,那么ajax只需执行data:$(this.serialize())
要获得所有字段,更整洁、更容易谢谢您,先生!但问题是,仍然无法工作。我应该如何处理sampleserver.php
这样的问题?先生,如何使用jquery声明id?先生,请帮助我解决此问题:((((@