как отредактировать конкретный идентификатор в php

#php #mysql

#php #mysql

Вопрос:

У меня есть страница, на которой отображается около 3000 записей. то, что я пытаюсь сделать, это когда я нажимаю на кнопку фильтра, данные только этой записи изменятся. но в настоящее время, когда я нажимаю на кнопку фильтра, данные всех записей меняются.

вот мой код:-

 <?php 
include("config.php");
$sql="SELECT * FROM inventory_details where status ='0' limit 0,100";  
$query=mysqli_query($conn, $sql);

    while($row=mysqli_fetch_assoc($query)){
    $id = $row['id'];
    $inventorybackground = $row['inventorybackground'];
    $inventorycolor = $row['inventorycolor'];
    $firm_name = $row['firm_name'];
    $position = $row['position'];
    $city = $row['city'];
    $catagory_name = $row['catagory_name'];
    $supplier = $row['supplier'];

    if (isset($_POST['update'])){
        $position=$_POST['position'];

        $update_query="UPDATE inventory_details SET position ='$position' WHERE id='$id'";
        $run_update=mysqli_query($conn, $update_query);
    }
  ?>

  <div class="container">
    <div class="row" style="background-color: <?php echo $inventorybackground; ?> !important; color: <?php echo $inventorycolor; ?>; padding-top: 10px;">
      <form class="form-horizontal" method="post" enctype="multipart/form-data">
        <div class="col-md-1 inventory-data">
          <input type="text" class="form-control" id="id" name="id" value="<?php echo $id;?>" disabled>
        </div>

        <div class="col-md-3 inventory-data">
          <input type="text" class="form-control" id="firm_name" name="firm_name" value="<?php echo $firm_name;?>" disabled>
        </div>

        <div class="col-md-1 inventory-data">
          <input type="text" class="form-control" id="position" name="position" value="<?php echo $position;?>">
        </div>

        <div class="col-md-1 inventory-data">
          <input type="text" class="form-control" id="city" name="city" value="<?php echo $city;?>" disabled>
        </div>

        <div class="col-md-2 inventory-data">
          <input type="text" class="form-control" id="catagory_name" name="catagory_name" value="<?php echo $catagory_name;?>" disabled>
        </div>

        <div class="col-md-2 inventory-data">
          <input type="text" class="form-control" id="supplier" name="supplier" value="<?php echo $supplier;?>" disabled>
        </div>

        <div class="col-md-2 inventory-data">
          <button type="submit" name="update" value="update" class="btn btn-primary">Filter</button>
        </div>
      </form>
    </div>
  </div>

  <?php } ?>
  

В настоящее время я только пытаюсь изменить позицию, и я думаю, что эта проблема связана с циклом.

Пожалуйста, помогите мне, заранее спасибо.

Комментарии:

1. Конечно, все записи меняются — потому что вы выполняете ОБНОВЛЕНИЕ для каждой отдельной строки, которую вы просматриваете здесь. Этому ОБНОВЛЕНИЮ изначально не место внутри этого цикла. Вы также не передаете какое-либо конкретное значение идентификатора обратно из вашей формы в скрипт.

2. И идентификаторы должны быть уникальными в HTML-документе, поэтому, выводя это в цикле, вы изначально создаете недопустимый HTML.

3. есть ли способ решить эту проблему? Если да, пожалуйста, помогите мне

4. Вы выполняете обновление в своем цикле списка, ваша кнопка фильтра обновляет страницу только для обновления всего списка.

5. да, чувак, я знаю, пожалуйста, помоги мне решить эту проблему, спасибо

Ответ №1:

Когда вы нажимаете кнопку, весь список обновляется в вашем цикле, чтобы перечислить строки.

Добавьте этот код на свою страницу, чтобы определить форму POST для выполнения обновления:

 if ($_SERVER["REQUEST_METHOD"] === "POST") {     
    // perform update here
    $id = $_POST['id'];
    $position = $_POST['position'];

    $update_query="UPDATE inventory_details SET position ='$position' WHERE id='$id'";
    $run_update=mysqli_query($conn, $update_query);
}
  

Редактировать:

Ваш ввод не может быть отключен, попробуйте использовать input hidden для передачи идентификатора в POST:

 <input type="hidden" id="id" name="id" value="<?php echo $id;?>">
  

Если вам нужно отобразить идентификатор во вводимом тексте, измените имя на другое вместо id , потому что оно будет использоваться из скрытого ввода

Комментарии:

1. отображается ошибка, обратите внимание: Неопределенный индекс: идентификатор в D:xampphtdocssort_inventory.php в строке 18

2. в этой строке $id = $_POST[‘id’];

3. спасибо, чувак, это сработало, и мой код также работает нормально после замены <тип ввода = «текст» класс =»элемент управления формой» id=»id» name =»id» value =»<?php echo $ id;?>» отключено>

4. я даже не думаю, что отключение может вызвать проблему

Ответ №2:

 while($row=mysqli_fetch_assoc($query)){
  

У этого есть конечная скобка в конце. Таким образом, вы в основном перебираете все данные и обновляете все это. Выполните запрос на обновление вне цикла.

     $update_query="UPDATE inventory_details SET position ='$position' WHERE id='$id'";
  

Здесь у вас уязвимость при внедрении SQL, пожалуйста, используйте подготовленные инструкции.
https://www.w3schools.com/php/php_mysql_prepared_statements.asp

Если идентификатор является целым числом, вам не нужно заключать его в кавычки

Комментарии:

1. @dm707 о, извините, я пропустил это: D исправлено