Как получить insertBatch() с флажком в codeigniter 4

#php #codeigniter-4

#php #codeigniter-4

Вопрос:

Как получить данные флажка? Это мое мнение

 <form method="post" action="<?= current_url();?>" >
<?php foreach($checklist as $item) : ?>
<ul>
  <li>
     <input type="hidden" name="name[]" value="<?= $item->name; ?>">
     <div>
        <label><?= $item->name; ?><label>
        <input type="hidden" value="0" name="status=[]>
        <input type="checkbox" value="1" name="status[]">
     </div>
  </li>
</ul>
  <button type="submit">Submit</button>

</form>
  

это мой контроллер

 public function checklist() {
if($this->request->getMethod() === 'post') {
$name = $this->request->getPost('nama');
$status = $this->request->getPost('status');
 foreach($name as $key => $value) {
  $checklist[] = [
   'name' => $name[$key],
   'status' => $status[$key] 
  ];
}
$this->model->insertBatch($checklist);

return view('data',$data);
}
  

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

Комментарии:

1. Сначала вы захотите проверить все свои опечатки … т.е. name{] неверно и должно быть name[] . Отсутствует окончательная двойная кавычка в name=»status=[]>. Этот код даже не должен запускаться.

2. И $thhis неверно — пожалуйста, прочитайте свой код и исправьте эти очевидные ошибки, прежде чем отправлять вопрос.

3. я исправил свои опечатки.

Ответ №1:

Я предполагаю, что это список из нескольких элементов с ключом элемента. Я предполагаю, что $item[‘id’] является уникальным ключом.

Вид

 <?php
    $checklist = [['id'=>1,'name'=>'Test name 1','status'=>1],
                ['id'=>2,'name'=>'Test name 2','status'=>0],
                ['id'=>3,'name'=>'Test name 3','status'=>1],
                ['id'=>4,'name'=>'Test name 4','status'=>0],
                ['id'=>5,'name'=>'Test name 5','status'=>0]];
?>
<pre>
<?=print_r($checklist)?>
</pre>
<form method="post" action="<?= current_url()?>" >
    <ul>
        <?php foreach($checklist as $item) : ?>
        <li>
            <input type="hidden" name="name[<?=$item['id']?>]" value="<?=$item['name']?>">
            <div>
                <label><?=$item['name']?><label>
                <input type="checkbox" value="1" name="status[<?=$item['id']?>]"<?=$item['status']?' checked':''?>>
            </div>
        </li>
        <?php endforeach;?>
    </ul>
    <button type="submit">Submit</button>
</form>
getPost
<pre>
<?php 
    if(isset($getPost))
        print_r($getPost);
?>
</pre>
return
<pre>
<?php 
    if(isset($return))
        print_r($return);
?>
</pre>
  

Контроллер

 public function index()
{
    $checklist = [];
    if($this->request->getPost()) {
        $getPost = $this->request->getPost();
        $status = $this->request->getPost('status');
        foreach($getPost['name'] as $key => $value) {
              $checklist['return'][] = [
               'name'   => $value,
               'status' => isset($status[$key])?1:0];
        }
        $checklist['getPost'] = $this->request->getPost();
        // $this->Model->insertBatch($checklist);
    }
    return view('test',$checklist);
}
  

Изображение конечного результата