Я новичок в codeigniter. Я пытаюсь вставить несколько новостей, содержащих некоторый флажок, где его значения зацикливаются из базы данных. Но я не знаю, что должен писать код для этого в контроллере и модели для вставки значений. Может ли кто-нибудь предложить или помочь мне написать код?
view – content.php :
//category name <?php foreach($result as $aresult) { ?> <input type="checkbox" name="category_name[]" value="<?php echo $aresult->category_name;?>" /> <?php echo $aresult->category_name;?> <?php } ?>
контроллер – новости :
public function savecontent() { $data=array(); foreach($this->input->post('category_name') as $category_name) { $data[] = array('category_name' => $category_name); } $data['content_headline']=$this->input->post('content_headline',true); $this->co_model->save_content($data); }
Модель:
public function save_content($data) { $this->db->insert('content',$data); }
Структура базы данных:
id(auto incr.), category_name(varchar 50), content_headline(varchar 100)
теперь, что я должен изменить, чтобы вставить несколько строк, используя флажок? здесь есть еще одно текстовое поле / столбец, которые также вставляются в базу данных. но только имя категории (значение флажка) должно быть изменено для всех значений.
Прежде всего вам необходимо настроить структуру базы данных. По-видимому, существует связь M: N между content
и category
. Более подходящей схемой будет:
create table content ( id int not null auto_increment primary key, content_headline varchar(100) not null ); create table category ( id int not null auto_increment primary key, caregory_name varchar(100) not null ); create table content_category ( content int not null references content, category int not null references category, primary key (content,category) );
Затем вам нужно настроить свой код, чтобы отразить новую схему.
Предположим, что вы получаете $result
из select * from category
, ваше представление сводится к:
<label> Headline: <input type='text' name='headline'> </label> <?php foreach($result as $aresult): ?> <label> <input type="checkbox" name="category[<?php echo $aresult->id; ?>]"> <?php echo $aresult->category_name; ?> </label> <?php endforeach; ?>
Когда вы отправили сообщение, это предоставит вам массив, подобный следующему:
array( 'headline'=>'War and Peace', 'category'=>array( 45=>'on', 6=>'on' ) );
… где 45 и 6 являются проверенными идентификаторами категорий. Обратите внимание, что если ни одна категория не отмечена, массив category
не будет определен.
Таким образом, контроллер становится:
public function savecontent() { $post=$this->input->post(); $selected_cats=(isset($post->category)?array_keys($post->category):array()); $data=array( 'headline'=>$post->headline, 'category'=>$selected_cats ); $this->co_model->save_content($data); }
И, наконец, модель:
public function save_content($data) { $this->db->insert('content',array('content_headline',$data['headline']); $content=$this->db->insert_id(); // what we inserted foreach($data['category'] as $cat) $this->db->insert( 'content_category', array( 'content'=>$content, 'category'=>$cat ) ); }