Codeigniter: передача данных формы из представления в контроллер - PullRequest
3 голосов
/ 07 января 2010

Что правильно? обратите внимание, во втором варианте я передаю значения формы с помощью переменной $ _POST. Принимая во внимание первый вариант, я вызываю и назначаю переменные для каждого поля формы.

Я видел это ...

<validation code> ....

$todo = array(
      'name'=>$this->input->post('title'),
      'description'=>$this->input->post('description')
);

$this->Todo_model->add($todo); 

Но я также видел следующее ...

$records['email']    = "trim|required|min_length[4]|xss_clean";
...
...    

$this->validation->set_rules($records);

if ($this->validation->run())
{
   $this->account_model->saveAccountSettings("sam", $_POST);
   $this->session->set_flashdata('message', 'Done!');            

   redirect('account/settings');
} else {
...
} 

Ответы [ 3 ]

3 голосов
/ 07 января 2010

Я склонен использовать смесь двух ваших примеров. Я почти уверен, что такие вещи, как обрезка, не изменят фактические данные поста, поэтому вы можете воспользоваться ими только в том случае, если вы пройдете через систему проверки для получения данных. Я на самом деле никогда больше не получаю доступ к POST напрямую с помощью CI.

Кроме того, я бы побеспокоился в вашем втором примере о том, чтобы просто вставить POST в мою модель. Что произойдет, если кто-то умный добавит «фамилию» к отправленным данным поста, и ваш столбец БД будет иметь то же имя? Даже если вы не ожидали обработки этих данных, теперь поступают непроверенные данные. Вот почему я использую часть вашего первого примера и вручную вытаскиваю элементы, которые хочу сохранить в массив.

Так что я бы порекомендовал гибрид.

Обычно мой код выглядит примерно так:

$fields['email']    = "trim|required|valid_email|min_length[4]|xss_clean";
...
...    

$this->validation->set_rules($fields);

if ($this->validation->run())
{
   $account = new array();
   $account['id'] = $accountId; //wherever you get the Id from
   $account['email'] = $this->validation->email;

   $this->account_model->save($account);
   $this->session->set_flashdata('message', 'Done!');            

   redirect('account/settings');
} else {
...
} 
0 голосов
/ 16 сентября 2010

Какая реальная польза от использования

$account['email'] = $this->validation->email;

Вместо

$account['email'] = $this->input->post('email');
0 голосов
/ 07 января 2010

Первый вариант лучше читается или прослеживается Передача значений с использованием почтовых переменных - лучший вариант

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