javascript - PHP MySQL while 循环中的删除函数

标签 javascript php mysql

晚上,

我有点被困在这里了。我已经为我们的员工登录,以便轻松创建新发票(虽然是丹麦语,抱歉),几乎一切都已完成。但有一件事我不知道该怎么做,就是从 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/

相关文章:

javascript - 我可以为我的网站访问者启用 JavaScript 吗?

javascript - 激活事件监听器时删除事件监听器

javascript - 如何在 Selenium 的 html 标签之间添加文本?

php - 在 PHP 中通过安全连接发送 cookie 的含义是什么

php - 如何告诉正则表达式匹配至少 x 个字母数字?

php - 从一个表中获取在另一表中分配的所有记录

javascript - 用 jQuery 动态控制一个旋钮

php - 如何处理从 PHP Mysql API 到 PDO 的转换中的数据类型

MySQL INSERT 未按预期工作

mysql - 是否可以在没有php代码的情况下使用angular js连接mysql db