USE PLURAL NAMES for Database TABLES, CONTROLLERS. USE SINGULAR NAMES for MODELS.
Each model is a class models/post.php --singular version
class Post extends CI_Model{
function get_posts($num=20,$start=0){
$this->db->select('*')->from('posts')->where('active',1)-order_by('date_added','desc')->limit($num,$start);
$query=$this->db->get();
return $query->result_array(); // <--returns an array
return $query->result(); // <--returns an object
}
}
controllers/posts.php --plural version
class Posts extends CI_controller{
function index(){
$this->load->model('post');
$data['posts'] = $this->post->get_posts();
$echo "<pre>"; print_r($data['posts']);echo"</pre>";
$this->load->view('post_index',$data);
}
}
views/post_index.php
<?php
foreach($posts as $row){
?>
<h2><?php echo $row['title'] ?></h2>
<?php
}
?>
####CONFIGURE ROUTES
application>config>routes.php
$route['default_controller']='posts';
#####REMOVING THE INDEX.PHP FILE IN URLs
.htaccess
RewriteEngine on
RewriteCond $1 !ˆ(index\.php!images|robots\.txt)
RewriteRule ˆ(.*)$ index.php/$1 [L]
####ACTIVE RECORD
class Post extends CI_Model{
function get_posts($num=20,$start=0){
$this->db->select('*');
$this->db->from('posts');
$this->db->where('active',1);
$this->db->where(array('active >='=>1));
$this->db->order_by('date_added','desc');
$this->db->limit($num,$start);
$this->db->join('users','users.userID=posts.userID','left');
$query=$this->db->get();
return $query->result_array();
}
}
#####GET WHERE
class Post extends CI_Model{
function get_posts($num=20,$start=0){
$this->db->order_by('date_added','desc');
$query=$this->db->get_where('posts'array('active'=>1),$num,$start);
return $query->result_array();
}
}
#####INSERT
class Post extends CI_Model{
function insert_post($data){
$date=array(
'title'='this is a test',
'description'=>'this is the description'
);
$this->db->insert('posts',$data);
return $this->db->insert_id();
}
}
#####UPDATE
class Post extends CI_Model{
function update_post($postID,$data){
$this->db->where('postID',$postID);
$this->db->update('posts',$data);
}
}
#####DELETE
class Post extends CI_Model{
function delete_post($postID,$data){
$this->db->where('postID',$postID);
$this->db->delete('posts',$data);
}
}
#####COMPLEX QUERIES
class Post extends CI_Model{
function query(){
$this->db->query('SELECT....');
}
}
###EXAMPLE ####MODELS
function get_post($postID){
$this->db->select()->from('posts')->where(array('active'=>1,'postID'=>$postID))->order_by('date_added','desc');
$query=$this->db->get();
return $query->first_row('array'); // return an object
}
function insert_post($data){
$this->db->insert('posts',$data);
return $this->db->insert_id();
}
function update_post($postID,$data){
$this->db->where('postID',$postID);
$this->db->update('posts',$data);
}
function delete($postID,$data){
$this->db->where('postID',$postID);
$this->db->delete('posts');
}
####CONTROLLERS
class Posts extends CI_Controller{
function __construct(){
parent::__construct();
$this->load-model('post');
}
function index(){
$data['posts']=$this->post->get_posts();
$this->load->view('post_index',$data);
}
function post($postID){
$data['post']=$this->post->get_post($postID);
$this->load->view('post',$data);
}
function new_post(){
if($_POST){
$data=array(
'title'=>$_POST['title'],
'post'=>$_POST['post'],
'active'=>1
);
$this->post->insert_post($data);
redirect(base_url().'posts/');
}else{
$this->load->view('new_post')}
}
function editpost($postID){
$data['success']=0;
if($_POST){
$data_post=array(
'title'=>$_POST['title'],
'post'=>$_POST['post'],
'active'=>1
);
$this->post->update_post($postID,$data);
$data['success']=1;
}
$data['post']=$this->post->get_post($postID);
$this->load->view('edit_post',$data);
}
function deletepost($postID){
$this->post->delete_post($postID);
redirect(base_url());
}
}
####VIEWS
//post.php
<?php if(!isset($post)){ ?>
<p>This page was accesed incorrecly.</p>
<?php }else{ ?>
<h2><?=$post['title']?></h2>
<?php } ?>
//new_post.php
<form action="<?=base_url?>posts/new_post" method="post">
<p>Title: <input name="title" type="text"/></p>
<p>Description: <textarea name="post"></textarea></p>
<p><input type="submit" value="Add Post"></p>
</form>
//edit_post.php
<?php if($success===1){ ?>
<div>This post has been updated!</div>
<?php } ?>
<form action="<?=base_url?>posts/editpost/<?=$post['postID']?>" method="post">
<p>Title: <input name="title" type="text" value="<?=$post['title']?>"/></p>
<p>Description: <textarea name="post"><?=$post['post']?></textarea></p>
<p><input type="submit" value="Edit Post"></p>
</form>
###PAGINATOR
class Posts extends CI_Controller{
function __construct(){
parent::__construct();
$this->load-model('post');
}
function index($start=0){
$data['posts']=$this->post->get_posts(5,$start);
$this->load->library('pagination');
$config['total_rows']=$this->post->get_posts_count();
$config['per_page']=5;
$this->pagination->initialize($config);
$data['pages']=$this->pagination->create_links();
$this->load->view('post_index',$data);
}
}
class Post extends CI_Model{
function get_posts_count(){
$this->db-select('postID')->from('posts')where(array('active'=>1,'postID'=>$postID));
$query=$this->db->get();
return$query->num_rows();
}
}
###USER MVC #####MODEL
class User Extends CI_MODEL{
function create_user($data){
$this->db->insert('users',$data);
}
function login($username,$password){
$where=array(
'username'=>$username,
'password'=>sha1($password)
);
$this->db->select()->from('users')->where($where);
$query-$this->db->get();
return $query->first_row('array');
}
}
#####CONTROLLER
class User Extends CI_Controller{
function login(){
$data['error']=0;
if($_POST){
$this->load->model('user');
$username=$this->input->post('username', true);
$password=$this->input->post('password', true);
$user=$this->user->login($username,$password);
if(!$user){
$data['error']=1;
} else {
$this->session->set_userdata('userID',$user['userID']);
$this->session->set_userdata('user_type',$user['user_type']);
redirect(base_url().'posts');
}
}
$this->load->view('header');
$this->load->view('login',$data);
$this->load->view('footer');
}
function logout(){
$this->session->sess_destroy();
redirect(base_url().'posts');
}
}
####VIEWS
//login.php
<?php if($error==1){?>
<p>Your username / password did not match.</p>
<? } ?>
<form action="<?=base_url()?>users/login" method="post">
<p>Username: <input type="text" name="username"/></p>
<p>Password: <input type="text" name="password"/></p>
<p><input type="submit" value="Login"/></p>
</form>
//post_index.php
<?php if($this->session->userdata('userID')){?>
<p>You are logged in!</p>
<p><a href="<?=base_url()?>users/logout">Logout</a>
<? } else{ ?>
<p><a href="<?=base_url()?>users/login">Login</a>
<? } ?>
###FORMS #####CONTROLLER
function register(){
if($_POST){
$config = array(
array(
'field'=>'username',
'label'=>'Username',
'rules'=>'trim|required|min_length[3]|is_unique[users.username]'
),
array(
'field'=>'password',
'label'=>'Password',
'rules'=>'trim|required|min_length[5]|max_length[15]'
),
array(
'field'=>'password2',
'label'=>'Password confirmed',
'rules'=>'trim|required|min_length[5]|matches[password]'
),
array(
'field'=>'email',
'label'=>'Email',
'rules'=>'trim|required|is_unique[users.email]|valid_email'
)
);
$this->load->library('form_validation');
$this->form_validation->set_rules($config);
if($this->form_validation->run() ==FALSE){
$data['errors'] =validation_errors();
} else {
$data=array(
'username'=>$_POST['username'],
'password'=>sha1($_POST['password']),
'user_type'=>$_POST['user_type']
);
$this->load->model('user');
$userid=$this->user->create_user($data);
$this->session->set_userdata('userID',$userid);
$this->session->set_userdata('user_type',$_POST['user_type']);
redirect(base_url().'posts');
}
}
$this->load->helper('form');
$this->load->view('header');
$this->load->view('register_user');
$this->load->view('footer');
}
#####VIEW
<h2>Register User</h2>
<?php if($errors){?>
<div>
<?=$errors ?>
</div>
<? } ?>
<?php echo form_open(base_url().'users/register'); ?>
<p>Username: <?php
$data_form=array(
'id'=>'username',
'name'=>'username',
'size'=>50,
'class'=>'blackborder',
'value'=>set_value('username')
);
echo form_input($data_form);
?></p>
<p><?=form_label('Email','email');?>:<?php
$data_form=array(
'id'=>'email',
'name'=>'email',
'size'=>50,
'class'=>'blackborder',
'value'=>set_value('email')
);
echo form_input($data_form);
?></p>
<p><?=form_label('Password','password'); ?>:
<?php
$data_form =array(
'id'=>'password',
'name'=>'password',
'size'=>50,
'class'=>'blackborder',
'value'=>set_value('password')
);
echo form_password($data_form);
?>
</p>
<p><?=form_label('Password Confirmed','password2'); ?>:
<?php
$data_form =array(
'id'=>'password2',
'name'=>'password2',
'size'=>50,
'class'=>'blackborder'
);
echo form_password($data_form);
?>
</p>
<p>User Type:<?
$options=array(
''=>'--',
'admin'=>'Admin',
'author'=>'Author',
'user'=>'User'
);
$js='onchange="alert(\'hi\');" class="blackborder" id="user_type"';
echo form_dropdown('user_type',$options,'',set_value('user_type','admin'),$js);
?>
</p>
<p><?php echo form_submit('','Register'); ?></p>
<?php echo form_close(); ?>
###UPLOADING FILES #####CONTROLLER
class Upload extends CI_Controller{
function __construct(){
parent::__construct();
$this->load->helper('form');
}
function index(){
$this->load->view('upload_form',array('error'=>''));
}
function do_upload(){
$config['upload_path']='./uploads';
$config['allowed_types']='gif|jpg|png';
$config['max_size']='100';
$config['max_width']='1024';
$config['max_height']='768';
$this->load->library('upload',$config);
if( !$this->upload->do_upload()){
$error = array('error'=>$this->upload->display_errors());
$this->load->view('upload_form',$error);
} else {
//RESIZE THE IMAGE
$data = array('upload_data'=>$this->upload->data());
$this->resize($data['upload_data']['full_path'],$data['upload_data']['file_name']);
$this->load->view('upload_success',$data);
}
}
function resize($path,$file){
$config['image_library']='gd2';
$config['source_image']=$path;
$config['create_thumb']=TRUE;
$config['maintain_ratio']=TRUE;
$config['width']=150;
$config['height']=75;
$config['new_image']='./uploads/'.$file;
$this->load->library('image_lib',$config);
$this->image_lib->resize();
}
}
#####VIEWS
//upload_form.php
<?php echo $error; ?>
<?php echo form_open_multipart('upload/do_upload'); ?><br>
<?php
$data_form=array(
'name'=>'userfile'
);
echo form_upload($data_form);
?>
<?php echo form_close(); ?>
//upload_success.php
<h3>Your file was successfully uploaded!</h3>
<ul>
<?php foreach ($upload_data as $key => $value) { ?>
<li><?=$key ?>: <?=$value ?></li>
<? } ?>
</ul>
<p><a href="<?=base_url()?>upload">Upload another file</a></p>
###CREATING A MAILING LIST ###MODELS
//user.php
<?php
function get_emails(){
$this->db->select('email')->from('users');
$query = $this->db->get();
return $query->result_array();
}
?>
####CONTROLLER
//emails.php
<?php
class Emails Extends CI_Controller{
function email(){
$this->load->model('user');
$emails=$this->user->get_emails();
$this->load->library('email');
$config['mailtype']='html';
$this->email->initialize($config);
foreach ($emails as $row) {
if($row['email']){
$this->email->from('[email protected]','John Doe');
$this->email->to($row['email']);
$this->email->subject('Test Newsletter');
$this->email->messagge('Your email message goes here! <strong>Bold</strong>');
$this->email->send();
$this->email->clear();
}
}
}
}
?>
###COMMENTS ####MODEL
//comment.php
<?php
class Comment Extends CI_Model{
function() add_comment($data){
$this->db->insert('comments',$data);
}
function get_comments($postID){
$this->db->select('comments.*,users.username')->from('comments')->join(
'users','users.userID=comments.userID'
)->where('postID',$postID)->order_by(
'comments.date_added','asc'
);
$query = $this->db->get();
return $query->result_array();
}
}
?>
####CONTROLLERS
//comments.php
<?php
class Comments Extends CI_Controller{
function add_comment($postID){
if(!$_POST){
redirect(base_url().'posts/post'.$postID);
}
$user_type=$this->session->userdata('user_type');
if(!$user_type){
redirect(base_url().'users/login');
}
if(strtolower($this->session->userdata('captcha') != strtolower($_POST['captcha']))){
echo '<p>The captcha code was incorrect! You typed in '.$_POST['captcha'].' and the correct code was '.$this->session->userdata('captcha').'</p>';
}else{
$this->load->model('comment');
$data=array(
'postID'=>$postID,
'userID'=>$this->session->userdata('userID');
'comment'=>$_POST['comment'];
);
$this->comment->add_comment($data);
redirect(base_url().'posts/post/'.$postID)
}
}
}
?>
//posts.php
<?php
class Posts extends CI_Controller{
function post($postID){
$this->load->model('comment');
$data['comments']=$this->comment->get_comments($postID);
$data['post']=$this->post->get_post($postID);
$this->load->helper('captcha');
$vals=array(
'img_path'=>'./captcha/',
'img_url'=>base_url().'captcha/',
'img_width'=>150,
'img_height'=>30
);
$cap = create_captcha($vals);
$this->session->set_userdata('captcha',$cap['word']);
$data['captcha']=$cap['image'];
$this->load->helper('form');
$this->load->view('header');
$this->load->view('post',$data);
$this->load->view('footer');
}
}
?>
####VIEW
//post.php
<?php if(!isset($post)){ ?>
<p>This page was accesed incorrecly.</p>
<?php }else{ ?>
<h2><?=$post['title']?></h2>
<?=$post['post']?>
<hr>
<h2>Comments</h2>
<?php if(count($comments)>0){?>
<?php foreach ($comments as $row) {?>
<p><strong><?=$row['username']?></strong> said at <?=date(
'm/d/Y H:i A',strtotime($row['date_added'])
)?><br><?=$row['comment']?></p>
<hr>
<?php } else{ ?>
<p>There are currently no comments.</p>
<?php } ?>
<?php } ?>
<?php echo form_open(base_url().'comments/add_comment/'.$post[postID]); ?>
<?php
$data_form=array(
'name'=>'comment'
);
echo form_textarea($data_form);
?>
<p>Captcha Code: <?=$captcha?><br></p><?php
$data_form=array(
'name'=>'captcha'
);
echo form_input($data_form);
?>
<p><?php echo form_submit('','Add Comment'); ?></p>
<?php echo form_close(); ?>
<?php } ?>