如何使用数组更新mysql php pdo中的多个列

How to update multiple colunms in mysql php pdo using arrays

提问人:Kerub Angel 提问时间:11/9/2023 最后编辑:RiggsFollyKerub Angel 更新时间:11/9/2023 访问量:37

问:

当我单击更新 btn 时,它只更新带有单个列的列,当我选择具有多个列的表单时,它只更新最后一个条目最后一个 id

如果我选择包含更多数据的列,它只会更新数据库中的最后一个 ID,而不是所有内容,但在有一个列的地方,它会毫无问题地更新两个表

这是用于更新的表单,它显示了每张发票的所有 ID

<tbody class="detail">
<?php 
$count= 0; 
foreach ($getdata as $invoices):
    $count++;  
?>
<tr>
    <div class="inputfield">
        <td class="no">1</td>
        <td >
            <textarea name="productname[]" class="productname" id=""  cols="35"  rows="2" >
                <?php echo $invoices->productname; ?>
            </textarea>
        </td>
        <td >
            <input id="quantit" name="quantity[]" class="quantity" 
                    value="<?php echo $invoices->quantity; ?>" 
                    type="text"  onchange="Calc(this);">
        </td>
        <td >
            <input id="prices" name="price[]" class="price" 
                    value="<?php echo $invoices->price; ?>" 
                    type="text" onchange="Calc(this);">
        </td>
        <td >
            <input  name="amount[]" class="amount" 
                    value="<?php echo $invoices->amount; ?>"    
                    type="text"  >
        </td>
        <input type="hidden" name="item_id" value="<?php echo $invoices->item_id; ?>">
    </div>
</tr>

<?php 
endforeach; 
?>

</tbody>

这是发生操作的地方,当我陈词滥调时,这里只显示一个 ID,而不是所有 ID

$invoices_id = $_GET['invoices_id'];
$invoice_fk = $_GET['invoices_id'];

if (isset($_POST['edit_invoice'])) {
    //Creatr Data array
    $data = array();
    $data['invoices_id']    = $_POST['invoices_id'];
    $data['invoice_fk']     = $_POST['invoice_fk'];
    $data['productname']    = $_POST['productname'];
    $data['quantity']       = $_POST['quantity'];
    $data['price']          = $_POST['price'];
    $data['amount']         = $_POST['amount'];
    $data['sub_total']      = $_POST['sub_total'];
    $data['total_tax']      = $_POST['total_tax'];
    $data['total']          = $_POST['total'];
    $data['customer_fk']    = $_POST['customer_fk'];
    $data['item_id']        = $_POST['item_id'];
    $data['companies_fk']   = getCompany()['companies_fk'];
    $data['last_activity']  = date("Y-m-d H:i:s");

    //die(print_r($data['item_id'] = $_POST['item_id']));

    $field_array = array('productname','quantity', 'price');
    if ($validate->isRequired($field_array)) {
        //Update  Invoice
        if ($invoice->updateInvoice($data)){

            redirect('updateinovice.php?invoices_id='.$invoices_id, 'Invoice Edited', 'success');
        } else {
            redirect('updateinovice.php?invoices_id='.$invoices_id, 'Invoice not edited something went   wrong', 'error');
        }
    } else {
        redirect('updateinovice.php?invoices_id='.$invoices_id, 'All fields are required',  'error');
    }
}

这是模型所在位置,并且正在进行更新,已尝试显示 ID,它仅在数据库中显示多个数据的最后一个 ID

public function updateInvoice($data){
    try {
        $this->db->query('UPDATE `tbl_invoice_total` 
                            SET customer_fk = :customer_fk, 
                                companies_fk = :companies_fk, 
                                sub_total = :sub_total ,
                                total_tax = :total_tax,
                                total = :total, 
                                last_activity =:last_activity 
                            WHERE invoices_id = :invoices_id ');

        $this->db->bind(':customer_fk', $data['customer_fk']);
        $this->db->bind(':companies_fk', $data['companies_fk']);
        $this->db->bind(':sub_total', $data['sub_total']);
        $this->db->bind(':total_tax', $data['total_tax']);
        $this->db->bind(':total', $data['total']);
        $this->db->bind(':last_activity', $data['last_activity']);
        $this->db->bind(':invoices_id', $data['invoices_id']);
        $this->db->execute();

        foreach ($data['productname'] as $key => $value) {
            $this->db->query('UPDATE tbl_invoice_items 
                                SET invoice_fk =:invoice_fk, 
                                    productname = :productname ,
                                    quantity = :quantity,
                                    price = :price, 
                                    amount = :amount, 
                                    last_activity =:last_activity 
                                WHERE item_id = :item_id');
            $this->db->bind(':invoice_fk', $data['invoice_fk']);
            $this->db->bind(':productname', $data['productname'][$key]);
            $this->db->bind(':quantity', $data['quantity'][$key]);
            $this->db->bind(':price', $data['price'][$key]);
            $this->db->bind(':amount', $data['amount'][$key]);
            $this->db->bind(':last_activity', $data['last_activity']);
            $this->db->bind(':item_id', $data['item_id']);
            $this->db->execute();
        }
        //die(print_r($data));
        return true;
    } catch (Throwable $e) {
        echo '<div class="error">'.get_class($e).' on line '.$e->getLine().' of '. $e->getFile().': '.$e->getMessage().'</div>';
    }
}

我在谷歌上搜索找不到与我的问题类似的内容

我尝试使用 for each 在它显示的表单上回显 id,但是当我使用 die 回显它时,它只显示最后一个 id

我试图在 youtube 上搜索,但找不到与我的挑战相似的东西

我想要的是,当我单击“更新”时,它必须更新多个列,它必须能够更新所有列,而不仅仅是更新最后一个列

PHP 数组 PDO

评论

2赞 Rob Eyre 11/9/2023
你所有其他的表单字段都是数组,但你item_id不是 - 我建议你改成 ,重新提交你的表单,并做一个检查你是否收到了你所期望的name="item_id"name="item_id[]"print_r($_POST); exit;
0赞 RiggsFolly 11/9/2023
好的代码缩进和布局是终生的,而不仅仅是圣诞节,它会帮助我们阅读代码,更重要的是,它将帮助您调试代码 为了您自己的利益,快速浏览一下编码标准。您可能会被要求在几周/几个月内修改此代码,您会很高兴您最终花时间。
1赞 brombeer 11/9/2023
仅供参考,不允许进入内部,也不允许进入内部。您还有多个带有 and - 的元素,这是无效的,s 必须是唯一的<div><tr><input><tr>id="quantit"id="prices"id
0赞 Kerub Angel 11/9/2023
当然,让我现在就这样做
0赞 Kerub Angel 11/9/2023
它奏效了,我还添加了一个$this->db->bind(':item_id', $data['item_id'][$key]);它奏效了,哇,谢谢,我该如何回答

答: 暂无答案