помощь в хранении postdata с помощью codeigniter

#php #codeigniter

#php #codeigniter

Вопрос:

Вот мой сценарий, я создаю форму с помощью codeigniter, я понимаю, как заполнять поля моделями и тому подобным. У меня есть макет формы. Теперь он запускается из моей индексной функции. Я хочу сохранить все данные, предоставленные этой форме, и получить к ним доступ в массиве postdata, где каждый индекс является именем значения. Пожалуйста, помогите. CodeIgniter, PHP

Ответ №1:

вы создаете форму

 echo form_open('mycontroller/mymethod'); 
// rest of form functions

or  <form name="myform" method="post" action="<?php echo site_url('mycontroler/mymethod');?>" >  // rest of html form

then, in Mycontroller:

   function mymethod()
   {
     $postarray = $this->input->post();

    // you can pass it to a model to do the elaboration , see below
    $this->myloadedmodel->elaborate_form($postarray)
   }   

Model:

  function elaborate_form($postarray)
  {
    foreach($postarray as $field)
    {
      \ do your stuff
    }
  }
  

Если вам нужна фильтрация XSS, вы можете передать значение TRUE в качестве второго параметра в $this->input->post() вызове. Ознакомьтесь с руководством пользователя по библиотеке ввода

Ответ №2:

Смотрите класс ввода code igniter

Одним из примеров того, как сформировать ваш код, было бы:

 public function add_something()
  {
    if (strtolower($_SERVER['REQUEST_METHOD']) == 'post') { // if the form was submitted
      $form = $this->input->post(); 
      // <input name="field1" value="value1 ... => $form['field1'] = 'value1'
      // you should do some checks here on the fields to make sure they each fits what you were expecting (validation, filtering ...)

      // deal with your $form array, for exemple insert the content in the database

      if ($it_worked) {
        // redirect to the next page, so that F5/reload won't cause a resubmit
        header('Location: next.php');
        exit; // make sure it stops here
      }

      // something went wrong, add whatever you need to your view so they can display the error status on the form
    }

    // display the form
  }
  

Таким образом, ваша форма будет отображена, и в случае отправки ее содержимое будет обработано, в случае возникновения ошибки вы сможете сохранить отправленные значения, чтобы предварительно ввести их в форму, отобразить сообщение об ошибке и т.д… И если это работает, пользователь перенаправляется на это, он может безопасно перезагрузить страницу, не отправляя ее несколько раз.

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

1. Вы должны использовать redirect('next','refresh') вместо header (используя form_validation-> run() для проверки и повторного заполнения формы), а не использовать $_SERVER[‘REQUEST_METHOD’], иначе половина возможностей CI не используется, ИМХО

2. Вероятно, вы правы, я уже довольно давно не использовал code igniter, поэтому я дал очень общий ответ, который помог ему получить хорошую идею о том, как это структурировать