CodeIgniter + MySQL kullanarak Güncelleniyor Kontrol Kutularını

1 Cevap php

Benim veritabanından dinamik olarak oluşturulan yaklaşık 8 onay kutuları var.

Bu benim denetleyicisi kodu

//Start Get Processes Query
    $this->db->select('*');
    $this->db->from('projects_processes');
    $this->db->where('process_enabled', '1');
    $data['getprocesses'] = $this->db->get();
    //End Get Processes Query

    //Start Get Checked Processes Query
    $this->db->select('*');
    $this->db->from('projects_processes_reg');
    $this->db->where('project_id', $project_id);
    $data['getchecked'] = $this->db->get();
    //End Get Processes Query

Bu benim görünümünde kodudur.

<?php if($getprocesses->result_array()) { ?>
<?php foreach($getprocesses->result_array() as $getprocessrow): ?>
<tr>
    <td><input <?php if($getchecked->result_array()) { foreach($getchecked->result_array() as $getcheckedrow): if($getprocessrow['process_id'] == $getcheckedrow['process_id']) { echo 'checked'; } endforeach; }?> type="checkbox" name="progresscheck[]" value="<?php echo $getprocessrow['process_id']; ?>"><?php echo $getprocessrow['process_name']; ?><br>
    </td>
</tr>
<?php endforeach; ?>

Bu forma kutularını oluşturur ve veri tabanı tarafından belirtildiği gibi aynı zamanda uygun olanları kontrol eder.

The problem is updating them.

Ne kadar yapıyor, sadece proje için tüm onay kutusu girişleri silme ve ardından veritabanına tüm değerleri yeniden takmadan edilir. Bu yavaş ve korkunç çünkü 1. Bu kötü. 2.. Ben onay kutularını kontrol edildi zaman benim tüm meta verileri kaybedersiniz.

So I guess my question is, how do I update only the checkboxes that have been changed?

Thanks, Tim

1 Cevap

Öncelikle, iki veritabanı sorgularını var ve iç görünüm daha sonra iç içe bir döngü. Bu katılmak deyimi ile bir sorgu olması çok daha iyi olurdu - ON JOIN gibi bir şey projects_processes.process_id = projects_processes_reg.process_id WHERE = 1 process_enabled VE project_id = $ project_id.

İkincisi, form elemanlarının isimleri sadece [] progresscheck - Eğer geri DB-başvuru çapraz böylece muhtemelen açıkça Process_ID ile dizi numarasını isim olmalıdır.

Then, to update only checkboxes that have been changed, when the form is POSTed:
- Re-run the new, single query you use to generate the checkboxes
- Iterate through the result, checking the $_POST array (or CI's set_value() function) for changed values - Run an update statement when you find a changed value.

İyi şanslar!

-S