话说甲大湿手持一把桃木剑,不慌不忙从袋子里抽出一张符文,只见上面写着CodeIgniter几个大字。
众乡亲不解,甲大湿摇摇头,拿过旁边大妈手里的拖把,去旁边的河岸里沾了点水,在地面上洋洋洒洒地写上 今天宜写博客 几个大字。众乡亲恍然大悟,纷纷拍掌欢呼。
咳咳咳,进入今天的正题,闲着无聊,看看机油用ci写的博客,心里痒痒,于是看着ci文档,小菜鸟按照自己理解,写了个十分简单的博客系统,就只有登录注册,curd文章的功能。
来次狗!
首先我们要注册,注册怎么写呢,不就是一个表单提交,然后插入数据库的菊花嘛(咦),等等,注册?我们是不是需要一个user的model呢?
// models\user_model.php
load->database();
}
// user里我们需要创建用户,就4行数据
public function create_user() {
$data = array(
'username' => $this->input->post('username'),
'nickname' => $this->input->post('nickname'),
'password' => $this->input->post('password'),
'email' => $this->input->post('email')
);
return $this->db->insert('users',$data);
}
}
// controllers\user.php
class User extends CI_Controller {
public function __construct() {
parent::__construct();
}
public function register() {
$this->load->helper('form');
$this->load->library('form_validation');
// 这里做表单验证,就是上面的form_validation提供的一些函数,大家可以通过函数名看出这些函数是做什么的,等等,第一个参数是表单的name,第二个是等下提示错误信息用的昵称,第三个就是处理方式
$this->form_validation->set_rules('username','Username','trim|required|xss_clean|is_unique[users.username]');
$this->form_validation->set_rules('password','Password','trim|required|mathes[passconf]|md5');
$this->form_validation->set_rules('passconf','Password Confirmation','required');
$this->form_validation->set_rules('email','Email','required|is_unique[users.email]');
if($this->form_validation->run() === FALSE) {
$data['title'] = "Register";
$this->load->view('templates/header',$data);
$this->load->view('user/register');
$this->load->view('templates/footer');
} else {
// 如果通过验证,那么创建用户
$this->user_model->create_user();
redirect('/login');
}
}
}
```
到这里,我们就能实现一个简单的注册功能,等等,什么?你说你报错? 对了,忘记说了,这位客官有没有发现,config文件夹有一个叫autoload的东西,就是用来自动给我们跑腿的。比如
```php
$autoload['libraries'] = array('database','session');
$autoload['helper'] = array('url');
$autoload['model'] = array('user_model');
```
控制器和模型都写完了,那就可以叫出前台mm了
```php
<!doctype html>
<html lang="zh-cmn-hans">
<head>
<title></title>
</head>
<body><!--views\templates\footer.php-->
<strong>© 2014 By fakefish</strong>
</body>
</html>
<h2>Register</h2>
<input type="text" name="username" placeholder="username" value="<?php echo set_value('username'); ?>">
<br>
<input type="text" name="nickname" placeholder="nickname" value="<?php echo set_value('nickname'); ?>">
<br>
<input type="password" name="password" placeholder="password" value="<?php echo set_value('password'); ?>">
<br>
<input type="password" name="passconf" placeholder="confirm password" value="<?php echo set_value('passconf'); ?>">
<br>
<input type="email" name="email" placeholder="email" value="<?php echo set_value('email'); ?>">
<br>
<input type="submit" name="submit" value="Register">
</form>
<a href="./login">Login</a>
等等,这个set_value()是什么玩意儿,这个就是提交不符合规则页面跳转之后,自动会把之前的值填进来。
注册完成之后,我们就要用登陆了
// controllers\user.php
public function login() {
$this->load->helper('form');
$this->load->helper('url');
$this->load->library('form_validation');
if($this->session->userdata('logged_in')){
redirect('/');
}
// 这里要判断是否已经登录
$this->form_validation->set_rules('username','Username','trim|required|xss_clean');
$this->form_validation->set_rules('password','Password','md5');
$data['title'] = "Login";
if($this->form_validation->run() === FALSE) {
$this->load->view('templates/header',$data);
$this->load->view('user/login');
$this->load->view('templates/footer');
} else {
$username = $this->input->post('username');
$password = $this->input->post('password');
$result = $this->user_model->get_user($username);
if($result && $password == $result->password) {
$this->load->view('user/login-success');
$this->session->set_userdata('uid',$result->id);
$this->session->set_userdata('username',$result->username);
$this->session->set_userdata('nickname',$result->nickname);
$this->session->set_userdata('email',$result->email);
$this->session->set_userdata('logged_in',TRUE);
redirect('/');
} else {
$this->load->view('templates/header',$data);
$this->load->view('user/login');
$this->load->view('templates/footer');
}
}
}
其实如果这位客官看到这里,应该能拓展着写完剩下的开发。
代码不就细给了,讲一些自己碰到的一些东西。
1.数据库连接查询
public function get_list_post($p = FALSE) {
$this->db->select('*');
$this->db->from('posts');
$this->db->join('users','users.id = posts.uid');
$this->db->order_by('pid desc');
if($p === FALSE) {
$this->db->limit(5);
} else {
$this->db->limit($p*5+5,$p*5);
}
$query = $this->db->get();
return $query->result();
}
这里,由于我设计的posts里有一列是uid对应users里的id,每次查文章要把两个并起来查,然后被这个limit()坑了,上面写的是对的,但是我一开始写的是反的,我感觉反着写才更符合人的想法啊。
其实作为一个渣前端,没怎么学过服务器方面的知识,比如默认的路由是只能是/index.php/write,怎么办呢,本地是apache,就修改.htaccess文件咯
RewriteEngine on
RewriteCond $1 !^(index\.php|images|robots\.txt)
RewriteRule ^(.*)$ /ciblog/index.php/$1 [L]
这样就能在路径上自动隐藏index.php啦~
谢谢观看我这个渣文采。
写个破文章还没配图!
其实写完发现已经16号了,看了一下程序员黄历,今天不宜写博客!!就不想写了,突然断尾抱歉各位看客