2010-02-17 39 views
13

Tôi mới sử dụng CodeIgniter. Tôi cần phải xử lý một biểu mẫu. Tôi có một trang form.html theo quan điểmCách xử lý biểu mẫu với CodeIgniter

<html> 
    <head> 
    <title>Search</title> 
    </head> 
    <body> 
    <form action="search"> 
     <input type="text" name="search" value="" size="50" /> 
     <div> 
     <input type="submit" value="Submit" /> 
     </div> 
    </form> 
    </body> 
</html> 

và hình thức điều khiển

class Form extends Controller { 

    function Form() { 
    parent::Controller(); 
    } 

    function index() {  
    $this->load->view('form'); 
    } 

} 

và tôi có một search.php xem tập tin nhưng khi nó được xử lý nó cho thấy Trang không tìm thấy ...

Trả lời

10

Xem tệp là vô ích nếu không có bộ điều khiển tải và hiển thị tệp. Bạn phải tạo một bộ điều khiển để nhận dữ liệu biểu mẫu, xử lý nó, sau đó hiển thị kết quả quá trình.

Bạn có thể sử dụng một helper hình thức để thiết lập các thẻ mở hình thức, cũng là thẻ đóng:

<?php echo form_open('form/search'); ?> 
<input type="text" name="search" value="" size="50" /> 
<div><input type="submit" value="Submit" /></div> 
<?php echo form_close(); ?> 

Nếu không sử dụng hình thức trợ giúp, bạn vẫn có thể viết nó theo cách này:

<form action="<?php echo site_url('form/search'); ?>"> 

Sau đó, thêm phương pháp search vào form bộ điều khiển:

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

Rem ember rằng CI chỉ giúp bạn với tổ chức mã cơ bản và cung cấp một thư viện và trợ giúp hữu ích. Nhưng bạn vẫn cần phải viết các thuật toán của quá trình trong trang web của bạn.

Đừng quên đọc hướng dẫn sử dụng được bao gồm trong gói trình mã hóa được tải xuống. Bạn có thể học nhiều chất liệu từ ví dụ trong đó. Đừng ngại hỏi những điều bạn không biết ở đây, nhiều thành viên của stackoverflow sẽ giúp bạn.

0

Hãy thử sử dụng trình viết mã 'site_url' trong hành động của bạn để đảm bảo bạn đang trỏ đến đúng địa điểm. Hành động trong ví dụ của bạn sẽ đi tới bộ điều khiển 'tìm kiếm' thay vì bộ điều khiển 'biểu mẫu'.

<html> 
<head> 
<title>Search</title> 
</head> 
<body> 
<form action="<?= site_url('form/process_search') ?>"> 
<input type="text" name="search" value="" size="50" /> 
<div><input type="submit" value="Submit" /></div> 
</form> 
</body> 
</html> 

chỉ số chỉ được sử dụng trong điều khiển của bạn khi không có gì khác được truyền .. Vì vậy, trong trường hợp ví dụ của tôi ở trên, bạn sẽ muốn một cái gì đó như thế này:

function Form() 
{ 
    parent::Controller(); 
} 

function process_search() 
{ 

    print "<pre>"; 

    print_r($_POST); 

    print "</pre>"; 
} 
31

Trong M .odel V .iew C thiết lập .ontroller như CodeIgniter Views là những yếu tố giao diện người dùng. Họ không nên phân tích cú pháp kết quả.

Nếu tôi không nhầm, những gì bạn đang tìm kiếm để làm là dữ liệu đường chuyền từ www.yoursite.com/index.php/form để www.yoursite.com/index.php/search

Trong php không có cấu trúc, bạn có thể có một form.html với một hình thức hành động của search.php. Người dùng sẽ điều hướng đến yoursite.com/form.html, gọi số yoursite.com/search.php, có thể chuyển hướng đến yoursite.com/results.php.

Trong CodeIgniter (và, theo như tôi được biết, trong bất kỳ hệ thống MVC, bất kể ngôn ngữ) của bạn Controller, Form gọi một chức năng mà tải các form.htmlViewvào chính và sau đó chạy nó. View tạo mã (thường là HTML, nhưng không nhất thiết) mà người dùng tương tác với. Khi người dùng thực hiện một yêu cầu mà View không thể xử lý (yêu cầu cho nhiều dữ liệu hơn hoặc một trang khác), nó sẽ chuyển yêu cầu đó trở lại Controller, nó sẽ nạp nhiều dữ liệu hơn hoặc một View khác.

Nói cách khác, Chế độ xem xác định cách dữ liệu sẽ được hiển thị. Bộ điều khiển ánh xạ yêu cầu Chế độ xem.

Sẽ phức tạp hơn một chút khi bạn muốn có dữ liệu phức tạp và/hoặc thay đổi được hiển thị trong chế độ xem. Để duy trì separation of concerns mà MVC yêu cầu CodeIgniter cũng cung cấp cho bạn Models.

Mô hình chịu trách nhiệm cho phần khó nhất của bất kỳ ứng dụng web nào - quản lý luồng dữ liệu. Chúng chứa các phương thức để đọc dữ liệu, ghi dữ liệu và quan trọng nhất là các phương thức để đảm bảo tính toàn vẹn dữ liệu. Nói cách khác Mô hình nên:

  • Đảm bảo rằng dữ liệu có định dạng đúng.
  • Đảm bảo rằng dữ liệu không chứa gì (độc hại hoặc cách khác) có thể phá vỡ môi trường được định trước.
  • Chiếm hữu phương pháp C .reating, R .eading, U .pdating, và D .eleting dữ liệu trong các khó khăn trên.

Akelos có đồ họa tốt đẻ ra các thành phần của MVC:

Request - Response http://svn.akelos.org/trunk/docs/images/akelos_mvc.png

Nói như vậy, đơn giản nhất (đọc "dễ nhất", không phải "mở rộng nhất") cách để thực hiện những gì bạn muốn làm là:

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); 
} 
+3

+1 - Upvote tối ưu của tôi. Nó rõ ràng và hấp dẫn.Tôi không đủ kỹ năng để đánh giá nó thật sự như thế nào, nhưng tôi sẽ xem liệu tôi có thể sử dụng nó để trở thành như vậy không. – Smandoli

+0

'$ term = $ this-> input-> post ('search');' here ... 'search' là tên của biểu mẫu, đúng không? –

+2

@b_dubb - 'search' là tên của trường *: * '. –

0

thay thế này <form action="search"> với <?php echo form_open('form/search');?> và tập tin autoload.php thêm $autoload['helper'] = array('form');

và sau đó tập tin không sử dụng tập tin search.php chỉ thêm mã search.php của bạn vào tập tin điều khiển của bạn như đây

class Form extends Controller { 

    function Form() { 
    parent::Controller(); 
    } 

    function index() {  
    $this->load->view('form'); 
    } 

function search(){ 
//your code here 
} 
} 
1

Đây là hình thức xác nhận và nộp tại bộ điều khiển cả My lớp điều khiển

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'); 


      } 
    } 

    <?php 

    if (!defined('BASEPATH')) 
     exit('No direct script access allowed'); 

    class Article extends MY_Controller { 

     function __construct() { 
      parent::__construct(); 
      $this->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('<p class="alert alert-danger"><a class="close" data-dismiss="alert" href="#">&times;</a>', '</p>'); 


      if ($this->form_validation->run() == TRUE) { 

       $article = array(
         'title'   => $this->input->post('title'), 
         'description' => $this->input->post('description'), 
         'created'  => date("Y-m-d 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); 
      } 
     } 

    } 

Chúng tôi có thể sử dụng dạng html bình thường như thế này.

  <?php echo $message; ?> 

      <form method="post" action="article/add" id="article" > 
       <div class="form-group"> 
        <label for="title">Article Title</label> 
        <input type="text" class="form-control" id="title" name="title" value="<?php echo $article['title']; ?>" > 
       </div> 
       <div class="form-group"> 
        <label for="description">Description</label> 
        <textarea class="form-control" rows="13" name="description" id="description"><?php echo $article['description']; ?></textarea> 
       </div> 

       <button type="submit" class="btn btn-default">Submit</button> 
      </form>  
     </div> 
    </div> 
Các vấn đề liên quan