Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1373576
  • 博文数量: 264
  • 博客积分: 5810
  • 博客等级: 大校
  • 技术积分: 3528
  • 用 户 组: 普通用户
  • 注册时间: 2011-03-13 17:15
文章分类

全部博文(264)

文章存档

2011年(264)

分类: 系统运维

2011-05-03 22:58:53

CI个人笔记心得

时间:2010-10-6

1、   如何将URL地址栏里面的index.php给去掉呢?

http://localhost:8080/ciblog/index.php/blog/index/5  默认的话都有这么一个东西的

步骤一、如何在windows下面创建.htaccess 文件

使用记事本编写规则然后另存的时候选择保存类型(所有文件)然后就直接命名就OK了。

步骤二、开启apacheurl_rewrite功能

LoadModule rewrite_module modules/mod_rewrite.so  #打开rewrite功能

    Options Indexes FollowSymLinks

    AllowOverride All               #将此项设置为All

    Order allow,deny

    Allow from all

第三步:在根目录创建这个文件命名为: .htaccess

配置的内容:

RewriteEngine on  

RewriteCond $1 !^(index\.php|images|robots\.txt)  #对于样式、JS、静态元素是不能rewrite的所以加这一句

RewriteRule ^(.*)$ /nbjproj/index.php/$1 [L]     #注意这里面的nbjproj  表示的是我的项目名称的

#另外要注意这个文件的目录是在nbjproj/目录下面的

第四步:把CI的配置文件修改一下

$config['index_page'] = "";       #ci里面的配置文件修改这一项为空即可

 

2、  如何使用自带的类库

控制器里面:

function __construct()

       {

              parent::Controller();

              $this->load->helper('url');    #将此帮助类库加载进来后面就直接调用

              $this->load->helper('text');

       }

Echo  $this->uri->segment(3);       #直接引入这个对象url然后再去调用类里面的方法

 

3、  如何使用分页类

步骤一、配置数据库驱动信息

$db['default']['hostname'] = "127.0.0.1";           #使用IP不要用域名。localhost

$db['default']['username'] = "hkebao";

$db['default']['password'] = "hkebao";

$db['default']['database'] = "hnebony";            #我是直接使用MSSQL驱动不走ODBC

$db['default']['dbdriver'] = "mssql";

$db['default']['dbprefix'] = "";

$db['default']['pconnect'] = TRUE;

$db['default']['db_debug'] = TRUE;

$db['default']['cache_on'] = FALSE;

$db['default']['cachedir'] = "";

$db['default']['char_set'] = "utf8";

$db['default']['dbcollat'] = "utf8_general_ci";

 

步骤二、控制器分页代码

function index()

     {   

         $this->load->database();                     #加载数据库对象db进来

         $this->load->library('pagination');             #加载分页的对象

         $config['base_url'] = base_url().'/welcome/index';  #前后页链接

         $config['total_rows'] = $this->db->count_all('Radmin');  #辅助函数的一个方法

         $config['per_page'] = '3';

         $this->pagination->initialize($config);

         $data['pages'] = $this->pagination->create_links();   #丢到数组里面呆会渲染用

         $this->load->view('index',$data);   

     }

步骤三、视图

  
               #简单吧

 

 

4、   如何保证视图页面全部的静态元素都能够保证路径正常

HTML标签页面上的所有链接规定默认地址或默认目标。通常情况下,浏览器会从当前文档的 URL 中提取相应的元素来填写相对 URL 中的空白。使用 标签可以改变这一点。浏览器随后将不再使用当前文档的 URL,而使用指定的基本 URL 来解析所有的相对 URL。这其中包括

标签中的 URL

笔记:用了这个之后就能够改变页面中这些标签的URL了。注意这个标签必须要head里面的。

示例:

    #这个值是在配置文件里面定义的

 


5、  数据库查询相关(仅列举MSSQL的操作相关)

5.1 检查用户名与密码是否合法

步骤一、编写用户登录的窗体见下面内容

步骤二、编写数据库校验方法

$username = $_POST["username"];            #接收客户端的参数

$password = $_POST["password"];

$result = $this->Mhome->get_user_num($username,$password); #利用模型进行调用其参数

步骤三、编写数据库模型层代码

function get_user_num($username,$password) {

    $query = $this->db->query("SELECT * FROM radmin where username = '$username' and password='$password'");

      return  $query->num_rows();

}

 

5.2 列出指定一个ID的记录出来。一般应用于编辑窗体里面

步骤一、控制器

function index()

      {

          $this->load->helper(array('form', 'url'));       #一次加载多个帮助方法

          $id=$this->uri->segment(3);

         $this->load->model('Mhome');

         $data['query']=$this->Mhome->getOneNews($id);     

         if (isset($_POST["id"])) {

              //代表的是保存修改操作了

              $data=array(

                                 'a'=>$_POST['a'],

                                 'b'=>$_POST['b'],

                            );

              $this->Mhome->updateNews($_POST['id'],$data);

              echo "ok";            

         }

         $this->load->view('index',$data);

      }

说明:我是为了简单化一点所以将其放在一块了。

步骤二、编写视图

    #还是用它吧!为了方便移植

result() as $row) : ?>

      

a

b

#好像这个遍历方法有点怪怪的。仔细看一下

步骤三、编写模型层

function getOneNews($id) {

         $this->db->where('id',$id);

              $data=$this->db->get('a');

              return $data;

    }       

    function updateNews($id,$data){

              $this->db->where('id',$id);

              $this->db->update('a',$data);

         }

说明:能够直接将一个数组的数据更新过来的。传入一个数组进来然后就直接更新了!

删除操作:

function deleteNews($newsid){

                        $this->db->where('id',$newsid);

                       $data=$this->db->delete(“a”);   #传入一个ID将其记录删除掉   

                       return $data;

                   }

 

-----------------------分页显示数据的整理--------------------------------------------------------------------

遍历的方法

对象形式表现

$query = $this->db->query('SELECT name, title, email FROM my_table');
foreach ($query->result() as $row)
{
    echo $row->title;
    echo $row->name;
    echo $row->email;
}
echo 'Total Results: ' . $query->num_rows();

数组形式表现

$query = $this->db->query('SELECT name, title, email FROM my_table');
foreach ($query->result_array() as $row)
{
    echo $row['title'];
    echo $row['name'];
    echo $row['email'];
}

标准的做法:

$query = $this->db->query("YOUR QUERY");
if ($query->num_rows() > 0)
{
   foreach ($query->result() as $row)
   {
      echo $row->title;
      echo $row->name;
      echo $row->body;
   }
}          #
先判断是否有记录再进行遍历

测试案例

步骤一、修改MSSQL内置函数

function _limit($sql, $limit, $offset)

       {

              $cursorName = 'mi_cursor_'.md5(strtolower($sql));

              $sql = "DECLARE ".$cursorName." CURSOR DYNAMIC READ_ONLY FOR

                  ".$sql."

                  OPEN ".$cursorName."

                  DECLARE @CURSOR AS INT

                  SELECT @CURSOR = CURSOR_HANDLE FROM  MASTER.DBO.SYSCURSORS

                  WHERE CURSOR_NAME = '".$cursorName."'

                  EXEC SP_CURSORFETCH @CURSOR, 32, ".($offset+1).", ".$limit."

                  EXEC SP_CURSORCLOSE @CURSOR";  

                  return $sql;           

       }

原创: 算是CI的一个补丁吧

 

步骤二、编写控制器

function index()

        {

             $this->load->helper('url');

             $this->load->database();                    

              $this->load->library('pagination');            

              $config['base_url'] = base_url().'/form/index';     #分页的时候它自动会有

              $config['total_rows'] = $this->db->count_all('Radmin');

              $config['per_page'] = '3';

              $this->pagination->initialize($config);

              $data['pages'] = $this->pagination->create_links();   #丢到数组里面呆会渲染用

             $this->load->model('Mhome');

              $data['get_comment'] = $this->Mhome->get_comment($this->uri->segment(3), $config['per_page']);

            $this->load->view('index',$data);

       }

$this->uri->segment(3)  这个是分页的时候自动就会有了

步骤三、编写模型层代码

function get_comment($offset,$num)

              {

                     $query = $this->db->get('Radmin',$num,$offset);  #如果有条件就用另外一个

                     return $query->result();              

              }   

步骤四、编写视图

      

     

             

               

username?>

             

password?>

             

             

                     xingming?>

                    

             

             

             

      

                #也可以用括号的!

             

      

 

 

 

6、  表单相关操作

步骤一、编写表单提交视图页面

My Form

  是会把全部当前表单的错误信息打印的。我想单独一个表单项打印一条怎么解决呢?

Username
指定表单项的错误信息显示出来

value=""/>

这个表示如果有验证错误的话就打印出来。如果没有就为空字符串!

使用辅助函数的好处是它为你生成了基于你配置文件中的URL action URL。这是的你的应用在更改URL时更具移植性。当然你也可以手工填写这个action进来的。我发现框架的作用就是为了解决这些个东西。

Username

Password

Password Confirm

Email Address

步骤二、编写验证成功后的页面

My Form

Your form was successfully submitted!

步骤三、编写控制器

class Form extends Controller {

        function index()

        {

         $this->load->helper(array('form', 'url'));     #一次加载多个帮助方法

         $this->load->library('form_validation');        

         if ($this->form_validation->run() == FALSE)  #验证失败

         {

                   $this->load->view('index');

         }

         else

         {

                   $this->load->view('formsuccess');

         }

        }

}

?>

由于你还没有告诉表单验证类验证什么东西。它只是默认的返回了 FALSE (boolean false) run() 方法只在全部成功匹配了你的规则才会返回 TRUE

 

步骤四、添加验证规则

function index()

        {

         $this->load->helper(array('form', 'url'));    

         $this->load->library('form_validation');        

         $this->form_validation->set_rules('username', 'Username', 'required');

         $this->form_validation->set_rules('password', 'Password', 'required');

         $this->form_validation->set_rules('passconf', 'Password Confirmation', 'required');

         if ($this->form_validation->run() == FALSE)

         {

                   $this->load->view('index');

         }

         else

         {

                   $this->load->view('formsuccess');

         }

}

函数set_rules三个参数:

  1. 表单域的名字 - 就是你给表单域取的那个名字。
  2. 一个此表单域的 "人性化" 名字,它将被插入到错误信息中。例如,如果你有一个表单域叫做“user”你可能给它一个人性化名字叫做用户名 注意: 如果你想让表单域的名字保存在一个语言文件里,请参考 .
  3. 为此表单域设置的验证规则。

笔记:有点类似于一个JS验证框架。

更进一步能够对规则设定的更加灵活一些的

$this->form_validation->set_rules('username', 'Username', 'required|min_length[5]|max_length[12]');
$this->form_validation->set_rules('password', 'Password', 'required|matches[passconf]');
$this->form_validation->set_rules('passconf', 'Password Confirmation', 'required');
$this->form_validation->set_rules('email', 'Email', 'required|valid_email');

更加好的一步:可以使用自定义的验证函数

function index()

      {

       $this->load->helper(array('form', 'url'));    

       $this->load->library('form_validation');          

       $this->form_validation->set_rules('username', 'Username', 'callback_username_check');

       if ($this->form_validation->run() == FALSE)

       {

              $this->load->view('index');

       }

       else

       {

              $this->load->view('formsuccess');

       }

      }

      //编写的自定义验证函数

      function username_check($str)

      {

       if ($str == 'test')

       {

        $this->form_validation->set_message('username_check', 'The %s field can not be the word "test"');

        return FALSE;

       }

       else

       {

        return TRUE;

       }

      }

笔记:要学会编写自己定义的校验函数。有一些像序列号之类的可能需要引入数据库校验的。像密码之类就可以先用CI自己提供的方法吧。

 

 

 

7、  其它相关

id,$row->title,array('title' => $row->title))?>

这个函数不错的。

 

表单相关

echo form_open('email/send');

上面的例子会创建一个form提交至你的基础URL加上"email/send" URI片段,像这样:

 

另外就是数据库操作的相关内容是比较多的。有许多好的快速的操作方法可以充分地利用起来

阅读(11715) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~