Intereting Posts
Лучший способ разбора недопустимого HTML в PHP Woocommerce получает пользовательские значения полей выбора на странице благодарности Magento – программно создавать пользовательский атрибут продукта через установочный скрипт htaccess переписать URL php параметры Как сгенерировать следующий номер автоматического увеличения в mysql, используя php? POST FormData для php с использованием javascript и XMLHTTPRequest исправление кода скребка изображений php, чтобы быть более гибким в разных ситуациях Laravel5.1: проверять поле времени (время начала должно быть больше конечного времени) Как изменить корень документа в поведении веб-сервера? Добавить элементы в отношение Phalcon Many-to-Many Удаление строки таблицы mySQL с помощью jQuery Ajax Получение имени файла из текстового файла после сопоставления строк – PHP Скрипт php: word proximity? Как преобразовать строку запроса PHP в косой чертой? почему ini_set ('session.gc_maxlifetime', 60) не работает?

Функция PHP MySQL Удалить во время цикла

Вечер,

Я немного застрял здесь. Я сделал логин для наших сотрудников, чтобы легко создать новый счет-фактуру (это датский, хотя, извините), и почти все завершено. Но я не могу понять, как это сделать, это удалить материал (материал на датском языке) из цикла while. У меня есть форма с циклом while внутри, который отображает все материалы, и рядом с полями ввода материала я создал небольшую ссылку href, которая должна удалить поле с некоторой помощью из javascript. Он отлично удаляет поле, но не удаляет данные из нашей базы данных mysql. Поэтому каждый раз, когда я обновляю страницу, данные возвращаются. Обновление и вставка не проблема. Код выглядит так:

$ct_update = 0; foreach ($_POST['beskrivelse_update'] as $k => $value) { $beskrivelse_update = addslashes($value); $enhed_update = addslashes($_POST['enhed_update'][$ct_update]); $stk_update = addslashes($_POST['stk_update'][$ct_update]); $vejl_eks_moms_update = addslashes($_POST['vejl_eks_moms_update'][$ct_update]); $update_id = (int)$_POST['update_id'][$ct_update]; $db->query("UPDATE faktura_materialer SET beskrivelse = '$beskrivelse_update', enhed = '$enhed_update', stk = '$stk_update', vejl_eks_moms = '$vejl_eks_moms_update', subtotal = '$stk_update' * '$vejl_eks_moms_update' WHERE id = '$update_id' LIMIT 1"); $ct_update++; } $ct_ny = 0; if(isset($_POST['beskrivelse_ny'])){ foreach ($_POST['beskrivelse_ny'] as $k => $value) { $beskrivelse_ny = addslashes($value); $enhed_ny = addslashes($_POST['enhed_ny'][$ct_ny]); $stk_ny = addslashes($_POST['stk_ny'][$ct_ny]); $vejl_eks_moms_ny = addslashes($_POST['vejl_eks_moms_ny'][$ct_ny]); $db->query("INSERT INTO faktura_materialer (faktura_id, beskrivelse, enhed, stk, vejl_eks_moms, subtotal) VALUES ('".$_faktura->faktura_id."', '".$beskrivelse_ny."', '".$enhed_ny."', '".$stk_ny."', '".$vejl_eks_moms_ny."', '".$stk_ny."' * '".$vejl_eks_moms_ny."')"); $ct_ny++; } } 

Надеюсь, вы понимаете, что я хочу делать, иначе просто комментируем. Приятного вечернего взгляда 🙂

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

Я хочу, чтобы запрос на удаление отправлялся, когда пользователь нажимает кнопку отправки «Сохранить изменения». Это мой код javascript:

 <script type="text/javascript"> function myFunction() { var table = document.getElementById("produkter_rows"); var row = table.insertRow(-1); var cell1 = row.insertCell(0); var cell2 = row.insertCell(1); var cell3 = row.insertCell(2); var cell4 = row.insertCell(3); var cell5 = row.insertCell(4); cell1.innerHTML = '<td><input style="width:450px;" class="text-input" type="text" name="beskrivelse_ny[]" value=""></td>'; cell2.innerHTML = '<td><input style="width:60px;" class="text-input" type="text" name="enhed_ny[]" value=""></td>'; cell3.innerHTML = '<td><input style="width:30px;" class="text-input" type="text" name="stk_ny[]" value=""></td>'; cell4.innerHTML = '<td><input style="width:205px;" class="text-input" type="text" name="vejl_eks_moms_ny[]" value=""></td>'; cell5.innerHTML = '<td><a href="#" onclick="removeRow(this)" id="addNew" title="Slet produkt"><img src="images/icons/slet.gif" width="16" alt="Slet" /></a></td>'; } removeRow = function(el) { $(el).parents("tr").remove() } </script> 

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

Второе редактирование:

Это HTML и PHP для обновления текущих данных в базе данных MySQL:

 $materialer_query = $db->query("SELECT faktura_materialer.id as materialer_id, faktura.*, faktura_materialer.* FROM faktura, faktura_materialer WHERE faktura_materialer.faktura_id = faktura.id"); while($mat = $materialer_query->fetch_object()){ ?> <tr> <input type="hidden" name="update_id[]" value="<? print $mat->id; ?>" /> <td><input style="width:450px;" class="text-input" type="text" name="beskrivelse_update[]" value="<? print $mat->beskrivelse; ?>"></td> <td><input style="width:60px;" class="text-input" type="text" name="enhed_update[]" value="<? print $mat->enhed; ?>"></td> <td><input style="width:30px;" class="text-input" type="text" name="stk_update[]" value="<? print $mat->stk; ?>"></td> <td><input style="width:205px;" class="text-input" type="text" name="vejl_eks_moms_update[]" value="<? print $mat->vejl_eks_moms; ?>"></td> <td></td> <td><a href="#" onclick="removeRow(this)" id="addNew" title="Slet produkt"><img src="images/icons/slet.gif" width="16" alt="Slet" /></a></td> </tr> <? } 

Спрятанное поле ввода name="update_id[]" добавляется в форму при обновлении. Надеюсь, это поможет…

Вам нужно сообщить скрипту PHP, что вы хотите удалить запись. Одним из решений было бы использовать скрытый ввод, который устанавливается, когда вы вызываете removeRow, например

 function removeRow(el) { // get the table row var row = $(el).parents('tr:first'); // disable the input fields for the row $('input', row).attr('disabled', 'disabled'); // rename update_id to delete_id and re-enable the field $('input[name="update_id[]"]', row).attr('name', 'delete_id[]').removeAttr('disabled'); // hide the row row.hide(); } 

Этот метод больше не удаляет строку таблицы из DOM. Однако он отключит поля ввода, содержащиеся в строке, и добавит скрытый ввод с именем beskrivelse_delete .

Когда форма будет отправлена, ваш PHP теперь будет иметь возможность узнать, какие записи необходимо удалить.

 foreach ($_POST['delete_id'] as $deleteId) { $deleteId = (int)$deleteId; $db->query("DELETE FROM faktura_materialer WHERE id = $deleteId"); } 

Обновление: я создал phpfiddle, у которого есть некоторые улучшения, которые вы, возможно, захотите узнать. Эти моменты включают:

  • Поддержка удаления, когда JavaScript не включен
  • Использование подготовленных операторов (предпочтительнее add_slashes )
  • Выход с помощью htmlspecialchars
  • Явное определение входных идентификаторов во избежание угадывания на основе инкрементного счетчика