晚上,
我有点被困在这里了。我已经为我们的员工登录,以便轻松创建新发票(虽然是丹麦语,抱歉),几乎一切都已完成。但有一件事我不知道该怎么做,就是从 while 循环中删除 Material (丹麦语为 Materiale)。我有一个带有 while 循环的表单,它显示所有 Material ,在 Material 输入字段旁边我创建了一个小的 a 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>
当用户单击 Material 旁边的删除图标时,该 Material 将被删除。它确实删除了输入字段,但不是从 mysql 的数据库中删除。
第二次编辑:
这是用于更新 MySQL 数据库中当前数据的 HTML 和 PHP:
$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 的情况下删除
- 使用prepared statements (首选
add_slashes
) - 使用 htmlspecialchars 转义输出
- 显式定义输入 ID 以避免基于增量计数器进行猜测
关于javascript - PHP MySQL while 循环中的删除函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21801512/