Как вставить несколько массивов в одну строку базы данных на codeigniter? - PullRequest
0 голосов
/ 31 мая 2018

Извините, если этот вопрос задавался ранее, но я искал и не могу найти то, что ищу.

Это моя структура базы данных

| ID | collection_ID | valuation | postby_ID | post_datetime |

Это моя страница просмотра(для входных данных)

<form action="insert.php" method="post">

<?php $i = 0; ?>

<?php foreach ($significance as $data): ?>

<input type="text" name="var[<?php echo $i; ?>][]" value="<?php echo $data->category; ?>" >
<select name="var[<?php echo $i; ?>][]">
<option value="0"> 0 </option>
<option value="1"> 1 </option>
<option value="2"> 2 </option>
<option value="3"> 3 </option>
</select>
<input type="text" name="var[<?php echo $i; ?>][]">

<?php $i++; ?>

<?php endforeach; ?>

<button type="submit"> Submit </button>
</form>

Это мой Контроллер на данный момент:

$collectionID = $this->input->get('coll_id'); //get from url

$this->form_validation->set_rules('val[]', 'Some text', 'required', array('required'=>'%s required'));

if ($this->form_validation->run == FALSE)
{
  $data = array(
      'page_title' => 'Some Title',
      'part' => 'input-data',
      'detail' => $this->collection_db->get_collection_data($collectionID),
      'significance' => $this->significance_db->get_significance_list()
  );
  $this->load->view('form-registration', $data);
}
else
{
  $db_data = array(
      'collection_ID' => $collectionID,
      'valuation' => json_encode($this->input->post('val)),
      'post_by' => $this->session->userdata('user_ID'),
      'post_datetime => get_datetime_format() //some helper function
  );
  if ($this->significance_db->save_data($db_data) == TRUE)
  {
     'some function here if TRUE';
  }
  else
  {
     'some function here if FALSE;
  }
}

Это моя Модель на данный момент:

function save_data($db_data)
{
   $this->db->insert('table_name', $db_data);
   if ($this->db->affected_rows > 0)
   {
      return TRUE;
   }
   else
   {
      return FALSE;
   }
}

И это мое значение в базе данных столбцов оценка , поскольку цикл foreach создает поле формы 6:

[["variable 1", "1", "description 1"],["variable 2", "0", "description 2"],["variable 3", "3", "description 3"],["variable 4", "3", "description 4"],["variable 5", "2", "description 5"],["variable 6", "0", "description 6"]]

Итак, это хороший пример длярезультат или я делаю неправильное кодирование?потому что на другой странице просмотра я хочу извлечь результат, используя json_decode в цикле foreach, как это:

Variable : variable 1
Score: 1
Description: description 1

Variable : variable 2
Score: 0
Description: description 2

Variable : variable 3
Score: 3
Description: description 3

Variable : variable 4
Score: 3
Description: description 4

Variable : variable 5
Score: 2
Description: description 5

Variable : variable 6
Score: 0
Description: description 6

Другой вопрос: как я генерирую результат json_encode из представления, и контроллер выше выглядит так:

[
   ["variable" => "variable 1", "score" => "1", "description" => "description 1"],
   ["variable" => "variable 2", "score" => "0", "description" => "description 2"],
   [etc...]
]

1 Ответ

0 голосов
/ 01 июня 2018

После стольких проб и ошибок и поиска во многих ресурсах.Наконец я пришел к своему собственному решению.Надеюсь, я смогу помочь другим с моим кодом.Пожалуйста, не стесняйтесь добавлять другое решение для этой проблемы ...

Просмотр страницы для входных данных (form-input.php)

<?php echo form_open('#', array('class'=>'form') ); ?>

   <?php 
       $i = 0;
       if ($valuation != NULL):
   ?>

       // Form field will looping through this as many as foreach result
       <?php foreach ($valuation as $value): ?>

           <input type="text" name="variable[<?php echo $x; >?]" value="<?php echo $value->category; ?>" readonly="readonly">
           <select name="score[<?php echo $x; ?>]">
               <option value=""> — Choose Score — </option>
               <option value="0"> 0 </option>
               <option value="1"> 1 </option>
               <option value="2"> 2 </option>
               <option value="3"> 3 </option>
           </select>
           <textarea name="desc[<?php echo $x; ?>]" rows="5" required="required"></textarea>

       <?php
           $x++;
           endforeach;
       ?>

   <?php
        else:
            echo 'No input field generate';
        endif;
   ?>

<?php
    echo form_button(array('name'=>'submit', 'type'=>'submit', 'content'=>'Save') );
    echo form_close();
?>

Контроллер (Collection.php)

public function save()
{
   // get collection ID from URL
   $collectionID = $this->input->get('coll_id');

   //Form Validation
   $this->form_validation->set_rules('variable[]', 'Variable', 'required', array('required'=>'%s cannot empty'));
   $this->form_validation->set_rules('score[]', 'Score', 'required', array('required'=>'%s cannot empty'));
   $this->form_validation->set_rules('desc[]', 'Description', 'required', array('required'=>'%s cannot empty'));

   if ($this->form_validation->run() == FALSE)
   {
       $data = array(
           'page_title' => 'Add Significance Data for ' . $collectionID,
           'valuation' => $this->significance_db->get_value_list()
       );
       $this->load->view('form-input', $data);
   }
   else
   {
       $count = count($this->input->post('variable'));
       for ($i=0; $i<$count; $i++)
       {
           $json_data[] = array(
               'variable' => $this->input->post('variable')[$i],
               'score' => $this->input->post('score')[$i],
               'description' => $this->input->post('desc')[$i]
           );
       }
       $json_encode_data = json_encode($json_data);

       $db_data = array(
           'collection_ID' => $collectionID,
           'valuation' => $json_encode_data,
           'post_by' => $this->session->userdata('user_ID'),
           'post_datetime' => get_datetime_format()
       );

       if ($this->significance_db->save_data($db_data) == TRUE)
       {
          'some function here if TRUE';
       }
       else
       {
          'some function here if FALSE';
       }
   }
}

Модель (значимость_db.php)

function save_data($db_data)
{
     $this->db->insert('table_name', $db_data);
     if ($this->db->affected_rows() > 0)
     {
         return TRUE;
     }
     else
     {
         return FALSE;
     }
}

Так вот, как вставить данные в мою таблицу базы данных,Он создаст одну строку с содержимым массива (сгенерированным с помощью json_encode) в столбце оценка .

Еще один код ниже - как просмотреть эти данные.Я покажу пример моего контроллера, модели и вида.

Контроллер (тоже внутри Collection.php)

public function show()
{
    //get collection ID from URL
    $collectionID = $this->input->get('coll_id');

    $data = array(
        'page_title' => 'Show Significance Data from ' . $collectionID,
        'significance' => $this->significance_db->get_significance_data($collectionID)
    );
    $this->load->view('view-page', $data);
}

Просмотр страницы дляDiplaying Data (view-page.php)

<?php if ($significance != NULL: ?>

    <div class="row">
        <div class="col-sm-12">
            <div class="card">
                <div class="card-body">

                    <?php foreach ($significance as $value): ?>

                        <?php
                            $data = json_decode($value->valuation); 
                            $count = count($data);
                        ?>

                        <?php for ($i=0; $i<$count; $i++): ?>

                            <ul class="list-inline">
                                <li class="list-inline-item"><?php echo $data[$i]->variable; ?></li>
                                <li class="list-inline-item"><?php echo $data[$i]->score; ?></li>
                                <li class="list-inline-item"><?php echo $data[$i]->description; ?></li>
                            </ul>

                        <?php endfor; ?>

                    <?php endforeach; ?>

                </div>
            </div>
        </div>
    </div>

<?php else: ?>

    <strong> No Data Result. </strong>

<?php endif; ?>

Если вы хотите узнать данные из json_decode ($ value-> valuation) , вы можете проверить с помощью print_r ($ data) или любой другой скрипт, который вы предпочитаете показывать массив.

Наконец.Надеюсь, что это может помочь другим.Если у кого-то есть другой метод, который создает такую ​​же функцию / метод, как этот, пожалуйста, не стесняйтесь комментировать или добавить другой метод.

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