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

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

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

假设我的
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?先生,请帮助我解决此问题:((((@