Cómo procesar un formulario con CodeIgniter

Soy nuevo en CodeIgniter. Necesito procesar un formulario. Tengo una página form.html a la vista

  Search     

y controlador de forma

 class Form extends Controller { function Form() { parent::Controller(); } function index() { $this->load->view('form'); } } 

y tengo un archivo de vista search.php pero cuando se procesa muestra una página no encontrada …

En las configuraciones de controlador de control de .odel V.iew C como CodeIgniter, las Vistas son elementos de la interfaz de usuario. No deben estar analizando los resultados.

Si no me equivoco, lo que está buscando hacer es pasar los datos de www.yoursite.com/index.php/form a www.yoursite.com/index.php/search

En php no estructurado puede tener un form.html con una acción de search.php de search.php . Un usuario yoursite.com/form.html a yoursite.com/form.html , que llamaría yoursite.com/search.php , que podría redirigir a yoursite.com/results.php .

En el CodeIgniter (y, por lo que yo entiendo, en cualquier sistema MVC, independientemente del idioma) su Controlador , el Form llama a una función que carga la vista form.html en sí misma y luego la ejecuta. La Vista genera el código (generalmente HTML, pero no necesariamente) con el que el usuario interactúa. Cuando el usuario realiza una solicitud que la Vista no puede manejar (solicita más datos u otra página), pasa esa solicitud al Controlador, que se carga en más datos u otra Vista.

En otras palabras, la Vista determina cómo se mostrarán los datos. El controlador asigna las solicitudes a vistas.

Se vuelve un poco más complicado cuando desea que se muestren datos complejos o cambiantes en una vista. Para mantener la separación de preocupaciones que MVC requiere, CodeIgniter también le proporciona Modelos .

Los modelos son responsables de la parte más difícil de cualquier aplicación web: administrar el flujo de datos. Contienen métodos para leer datos, escribir datos y, lo que es más importante, métodos para garantizar la integridad de los datos. En otras palabras, los modelos deberían:

  • Asegúrese de que los datos estén en el formato correcto.
  • Asegúrese de que los datos no contengan nada (malicioso o de otro tipo) que pueda romper el entorno para el que está destinado.
  • Poseer métodos para los datos de creación de C , lectura, lectura U y D , dentro de las restricciones anteriores.

Akelos tiene un buen gráfico que presenta los componentes de MVC:

Solicitud – Respuesta http://sofes.miximages.com/codeigniter/akelos_mvc.png

Dicho esto, la forma más sencilla (lo que se puede leer de “más fácil”, no “más ampliable”) de lograr lo que quiere hacer es:

 function Form() { parent::Controller(); } function index() { $this->load->view('form'); } function search() { $term = $this->input->post('search'); /* In order for this to work you will need to change the method on your form. (Since you do not specify a method in your form, it will default to the *get* method -- and CodeIgniter destroys the $_GET variable unless you change its default settings.) The *action* your form needs to have is index.php/form/search/ */ // Operate on your search data here. // One possible way to do this: $this->load->model('search_model'); $results_from_search = $this->search->find_data($term); // Make sure your model properly escapes incoming data. $this->load->view('results', $results_from_search); } 

Ver archivo es inútil sin el controlador para cargarlo y mostrarlo. Debe crear un controlador para recibir los datos del formulario, procesarlos y luego mostrar el resultado del proceso.

Puede usar un asistente de formularios para configurar las tags de formulario abierto, también las tags de cierre:

   

Sin usar el asistente de formularios, aún puedes escribirlo de esta manera:

 

Luego agregue el método de search en el controlador de form :

 function search() { //get form field $search = $this->input->post('search'); // do stuffs here //... } 

Recuerde que CI solo le ayuda con la organización del código básico y proporciona una biblioteca y un ayudante útiles. Pero aún debe escribir el algoritmo del proceso en su sitio.

No olvide leer la guía del usuario incluida en el paquete de codeigniter descargado. Puedes aprender muchas cosas del ejemplo que hay allí. No dude en preguntar cosas que no sabe aquí, muchos miembros de stackoverflow lo ayudarán.

Esta es la validación de formularios y enviar en el controlador Mi clase de controlador completa

  class MY_Controller extends CI_Controller { function __construct() { parent::__construct(); $this->load->library(array('session','form_validation')); $this->load->helper(array('form', 'url', 'date')); //$this->load->config('app', TRUE); //$this->data['app'] = $this->config->item('app'); } } load->model('article_model'); } public function index() { $data['allArticles'] = $this->article_model->getAll(); $data['content'] = $this->load->view('article', $data, true); $this->load->view('layout', $data); } public function displayAll() { $data['allArticles'] = $this->article_model->getAll(); $data['content'] = $this->load->view('displayAllArticles', $data, true); $this->load->view('layout', $data); } public function displayArticle($id) { $data['article'] = $this->article_model->read($id); $data['articleId'] = $id; $data['comment'] = $this->load->view('addComment', $data, true); $data['content'] = $this->load->view('displayArticle', $data, true); $this->load->view('layout', $data); } public function add() { $this->form_validation->set_message('required', '%s is required'); $this->form_validation->set_rules('title', 'Title', 'required|xss_clean'); $this->form_validation->set_rules('description', 'Description type', 'required|xss_clean'); $this->form_validation->set_error_delimiters('

×', '

'); if ($this->form_validation->run() == TRUE) { $article = array( 'title' => $this->input->post('title'), 'description' => $this->input->post('description'), 'created' => date("Ymd H:i:s") ); $this->article_model->create($article); redirect('article', 'refresh'); } else { $data['article'] = array( 'title' => $this->input->post('title'), 'description' => $this->input->post('description'), ); $data['message'] = validation_errors(); $data['content'] = $this->load->view('addArticle', $data, true); $this->load->view('layout', $data); } } }

Podemos usar el formulario html normal como este.

   

Intente usar el codeigniter ‘site_url’ en su acción para asegurarse de que está apuntando al lugar correcto. La acción en su ejemplo habría ido al controlador de “búsqueda” en lugar del controlador de “formulario”.

   Search   

El índice solo se usa en su controlador cuando no se pasa nada más. Entonces, en el caso de mi ejemplo anterior, querría algo como esto:

 function Form() { parent::Controller(); } function process_search() { print "
"; print_r($_POST); print "

"; }

Nettuts tiene un excelente tutorial para CodeIgniter para el formulario de inicio de sesión. Siga el screencast y aclarará sus preguntas.

http://net.tutsplus.com/videos/screencasts/codeigniter-from-scratch-day-6-login/

reemplace este

con y el archivo autoload.php agrega $autoload['helper'] = array('form');

y luego el archivo no use el archivo search.php, simplemente agregue su código search.php a su archivo de Controlador como aquí

 class Form extends Controller { function Form() { parent::Controller(); } function index() { $this->load->view('form'); } function search(){ //your code here } }