簡體   English   中英

PHP MySQL在while循環中刪除函數

[英]PHP MySQL Delete function in while loop

晚間,

我有點被困在這里。 我已經登錄了我們的員工輕松創建新發票(雖然這是丹麥語,抱歉),幾乎所有內容都已完成。 但有一點我無法弄清楚如何做,就是從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中的數據庫。

第二次編輯:

這是用於更新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的情況下刪除
  • 使用add_slashes 准備語句 (首選add_slashes
  • 使用htmlspecialchars轉義輸出
  • 明確定義輸入id以避免基於增量計數器進行猜測

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM