Вечер,
Я немного застрял здесь. Я сделал логин для наших сотрудников, чтобы легко создать новый счет-фактуру (это датский, хотя, извините), и почти все завершено. Но я не могу понять, как это сделать, это удалить материал (материал на датском языке) из цикла 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, у которого есть некоторые улучшения, которые вы, возможно, захотите узнать. Эти моменты включают:
add_slashes
)