ОБНОВЛЕНИЕ нескольких данных с использованием цикла while - PullRequest
0 голосов
/ 12 июня 2018

Я хочу обновить все данные внутри цикла while.Но проблема только в том, что данные обновляются.Например:

Представьте, что у меня есть 3 данных в моем 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);

 ?>

1 Ответ

0 голосов
/ 12 июня 2018

Вы отображаете несколько полей ввода с одним и тем же именем, и поэтому PHP не знает, какое поле ввода соответствует какому идентификатору комнаты.Ваш текущий код будет выводить что-то вроде этого:

<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}"] будет нулевым, так как все ваши данные хранятся под тем же именем.

Вместо этого вам нужно предоставить уникальный * 1016Атрибуты * 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
)

Затем вы можете извлечь значения из POST, используя следующий цикл for:

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}"])

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...