#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, поэтому я дал очень общий ответ, который помог ему получить хорошую идею о том, как это структурировать