如何使用CodeIgniter处理表单

Ram*_*esh 13 php codeigniter

我是CodeIgniter的新手.我需要处理一个表格.我在视图中有一个form.html页面

<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>
Run Code Online (Sandbox Code Playgroud)

并形成控制器

class Form extends Controller {

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

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

}
Run Code Online (Sandbox Code Playgroud)

我有一个视图文件search.php但是当它被处理它显示页面未找到...

Sea*_*ira 32

中号 .odel V .iew Ç .ontroller设置像笨的视图是用户界面元素.他们不应该解析结果.

如果我没有弄错的话,你要做的就是将数据传递www.yoursite.com/index.php/formwww.yoursite.com/index.php/search

在非结构化的php中,你可能有form.html一个表单动作search.php.用户将导航到可能yoursite.com/form.html会调用的yoursite.com/search.php,可能会重定向到yoursite.com/results.php.

在笨(和,据我了解,在任何MVC系统,无论何种语言的)的控制器,Form要求其加载的功能form.html 查看 到自身,然后运行它.该视图生成用户与交互的代码(通常HTML,但不一定).当用户发出View无法处理的请求(请求更多数据或其他页面)时,它会将该请求传递回Controller,后者会加载更多数据或另一个View.

换句话说,视图决定了数据的显示方式.Controller将请求映射到Views.

当您希望在视图中显示复杂和/或更改的数据时,它会稍微复杂一些.为了保持MVC要求的关注点分离, CodeIgniter还为您提供了模型.

模型负责任何Web应用程序中最困难的部分 - 管理数据流.它们包含读取数据,写入数据的方法,最重要的是确保数据完整性的方法.换句话说,模型应该:

  • 确保数据格式正确.
  • 确保数据不包含任何可能破坏其目标环境的内容(恶意或其他).
  • 拥有用于方法Ç .reating,- [R .eading,ù .pdating,和d在上述约束内.eleting数据.

Akelos有一个很好的图形布局MVC的组件:

请求 - 响应http://svn.akelos.org/trunk/docs/images/akelos_mvc.png

话虽这么说,最简单的(阅读"最简单",而不是"最可扩展")方式来完成你想做的事情是:

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);
}
Run Code Online (Sandbox Code Playgroud)

  • +1 - 我乐观的Upvote.这很清楚,很吸引人.我没有足够的技巧来评估它是多么真实,但我会看看我是否可以用它来变成这样. (3认同)
  • @b_dubb - `search`是*field*的名称:`<input type ="text"name ="search">`. (2认同)

Don*_*nia 10

如果没有控制器加载和显示它,查看文件就没用了.您必须创建一个控制器来接收表单数据,处理它,然后显示处理结果.

您可以使用表单助手来设置表单开放标记,以及关闭标记:

<?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(); ?>
Run Code Online (Sandbox Code Playgroud)

不使用表单助手,您仍然可以这样写:

<form action="<?php echo site_url('form/search'); ?>">
Run Code Online (Sandbox Code Playgroud)

然后将search方法添加到form控制器:

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

请记住,CI仅帮助您使用基本代码组织并提供有用的库和帮助程序.但是您仍然需要在您的站点中编写该过程的算法.

不要忘记阅读下载的codeigniter包中附带的用户指南.你可以从那里的例子中学到很多东西.不要犹豫,在这里问你不知道的事情,很多stackoverflow会员会帮助你.