Skip to content

Instantly share code, notes, and snippets.

@artieziff
Last active August 29, 2015 13:57
Show Gist options
  • Save artieziff/9351602 to your computer and use it in GitHub Desktop.
Save artieziff/9351602 to your computer and use it in GitHub Desktop.

CODE IGNITER

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('example@example.com','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 } ?>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment