Обновление отмеченных флажков с использованием CodeIgniter + MySQL - PullRequest
0 голосов
/ 28 апреля 2010

У меня есть около 8 флажков, которые динамически генерируются из моей базы данных.

Это код в моем контроллере

//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

Это код, на мой взгляд.

<?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; ?>

Это создает флажки в форме, а также проверяет соответствующие, как указано в базе данных.

Проблема в их обновлении.

До сих пор я просто удалял все записи-флажки для проекта, а затем заново вставлял все значения в базу данных. Это плохо, потому что 1. Это медленно и ужасно. 2. Я теряю все свои метаданные о том, когда были установлены флажки.

Итак, я думаю, мой вопрос, как мне обновить только те чекбоксы, которые были изменены?

Спасибо, Тим

1 Ответ

1 голос
/ 28 апреля 2010

Сначала у вас есть два запроса к базе данных, а затем вложенный цикл внутри вашего представления.Было бы намного лучше иметь один запрос с оператором соединения - что-то вроде JOIN ON projects_processes.process_id = projects_processes_reg.process_id WHERE process_enabled = 1 AND project_id = $ project_id.

Во-вторых, имена элементов вашей формыэто просто progresscheck [] - вам, вероятно, следует явно назвать номер массива с помощью process_id, чтобы вы могли ссылаться обратно на БД.

Затем обновлять только те флажки, которые были изменены, когда формаPOSTed:
- перезапустить новый одиночный запрос, который вы используете для создания флажков
- выполнить итерацию по результату, проверяя массив $ _POST (или функцию set_value () CI) на предмет измененных значений - запустить оператор обновлениякогда вы найдете измененное значение.

Удачи !!

~ S

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...