#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 исправлено