मैं अपनी छवियों से संबंधित कुछ सूचनाओं को एक बार में अपडेट करना चाहता हूं लेकिन मुझे जिस समस्या का सामना करना पड़ रहा है उसका पता नहीं लगा सकता।

यह मेरा विचार है:

<form action="my_controller_path" method="post">
    <?php foreach ($my_images as $mi) { ?>
        <div>
            <div class="img">
                <img src="<?php echo base_url($mi->image_path); ?>" />
            </div>

        <div class="other-infos">
            <div class="title">Image Text:</div>

                <input type="text" class="form-input" name="image_text[]" value="<?php echo $mi->image_info;?>"/>

            <div class="title">Order</div>
               <input type="number" value='<?php echo $mi->image_order; ?>' name="image_order[]">

            <div class="title">Color</div> 
                <input type="text" value='<?php echo $mi->image_color; ?>' name="image_color[]">

           <input type="hidden" name="image_id[]" class="image_id" value="<?php echo $mi->image_id;?>">
    </div>
<?php } ?>

<button>Update</button>

</form>

यह मेरा नियंत्रक है:

    public function update_image_infos(){
  
   $image_id = $this->request->getVar('image_id');
    
   $number = count($image_id);

    $db      = \Config\Database::connect();
    $builder = $db->table('product_images');

$data  = [];
    
        $image_text = $this->request->getVar('image_text');
        $image_color = $this->request->getVar('image_color');
        $image_order = $this->request->getVar('image_order');
        
        for($i=0; $i<$number; $i++){
            
        $data[] = [
                'image_text' => $image_text[$i],
                'image_color' => $image_color[$i],
                'image_order' => $image_order[$i]
            ];
    }

//print_r($data);

$builder->where('image_id',$image_id);
$builder->update($data);

etc. etc.   return redirect()->to($_SERVER['HTTP_REFERER']);

}

मेरा print_r मुझे सरणी देता है, लेकिन अपडेट नहीं कर सकता। मुझे त्रुटि हो रही है:

mysqli_sql_exception #1064 आपको अपने SQL सिंटैक्स में त्रुटि है; '0 = ('इन्फो ए', 'ग्रीन', '2'), 1 = ('अन्य जानकारी', 'ब्राउन', '1' के पास उपयोग करने के लिए सही सिंटैक्स के लिए आपके मारियाडीबी सर्वर संस्करण से मेल खाने वाले मैनुअल की जांच करें। ) जहां `image_id...' लाइन 1 पर है

0
demyr 16 अप्रैल 2021, 11:52

1 उत्तर

$builder->update() एक आयामी सरणी के साथ प्रयोग किया जाता है और आपका $data सरणी बहुआयामी है। तो आपको इसे लूप के लिए अंदर उपयोग करने की आवश्यकता है;

for($i=0; $i<$number; $i++){
    
    $data = [
            'image_text' => $image_text[$i],
            'image_color' => $image_color[$i],
            'image_order' => $image_order[$i]
        ];

    $builder->where('image_id',$image_id);
    $builder->update($data);
}

आप $builder->updateBatch() का भी उपयोग कर सकते हैं, लेकिन फिर आपको $data सरणी का पुनर्गठन करना होगा। दस्तावेज़ीकरण पर एक नज़र डालें।

0
mail2bapi 16 अप्रैल 2021, 15:46