Part I: Creating and Reading of MySQL Data Using OOP Approach in PHP

This tutorial I will show you on how to perform Object Oriented Programming using PHP and how easy to manage our source code and deal with objects and update the code easily. Before we move on to writing object-oriented code in PHP, it is important to understand the basic concept of classes, objects, properties, and methods. A Class is like a blueprint of a car. It defines how car created from the blueprint will look and behave, but it still an abstract concept. An Object is like a real car created from the blueprint. It has a real properties (such as how fast it’s going on), and real behaviors (like “accelerate” and “brake”). An object properties are closely tied to the object. Although all objects created from a given class have the same properties, one object properties can have different values of other object properties. A Method is simply a function that is defined inside the class is a method and used as an object. Where they can contain many local variables, and they can return values. An object is habitually assumed to be an Instance of a class, and the process of creating an object from a class is called Instantiation. Here’s the final output looks like for this tutorial. crud Now let’s begin the tutorial, this course contains this directory with PHP files.
Usercrud
	images
	includes
		config.php
                database.php
                functions.php
                initialize.php
                user.php
        layouts
	        Header.php
        stylesheets
	         Protect.css
        create_user.php
        index.php
Our database to be used:
  1. CREATE TABLE IF NOT EXISTS `users` (
  2.   `user_id` INT(11) NOT NULL AUTO_INCREMENT,
  3.   `users_name` VARCHAR(30) NOT NULL,
  4.   `uname` VARCHAR(30) NOT NULL,
  5.   `u_pass` VARCHAR(60) NOT NULL,
  6.   `utype` VARCHAR(30) NOT NULL,
  7.   PRIMARY KEY (`user_id`)
  8. ) ENGINE=MyISAM  DEFAULT CHARSET=latin1 AUTO_INCREMENT=1234571 ;
This time we're going to start our coding for config.php, database.php, functions.php, initialize.php and user.php. The config.php file will handle the settings for server, user, password and the database to be used for example I will used "jokendb". And here’s the code.
  1. <?php
  2. //Database Constants
  3. defined('DB_SERVER') ? null : define("DB_SERVER","localhost");
  4. defined('DB_USER') ? null : define("DB_USER","root");
  5. defined('DB_PASS') ? null : define("DB_PASS","");
  6. defined('DB_NAME') ? null : define("DB_NAME","jokendb");
  7. ?>
For our database.php class.
  1. <?php
  2. /**
  3. * Description:  The main class for Database.
  4. * Author:               Joken Villanueva
  5. * Date Created: May 18, 2013
  6. * Revised By:          
  7. */
  8.  
  9. require_once(LIB_PATH.DS."config.php");
  10. class Database {
  11.         var $sql_string = '';
  12.         var $error_no = 0;
  13.         var $error_msg = '';
  14.         private $conn;
  15.         public $last_query;
  16.         private $magic_quotes_active;
  17.         private $real_escape_string_exists;
  18.        
  19.         function __construct() {
  20.                 $this->open_connection();
  21.                 $this->magic_quotes_active = get_magic_quotes_gpc();
  22.                 $this->real_escape_string_exists = function_exists("mysql_real_escape_string");
  23.         }
  24.         //openning the connection
  25.         public function open_connection() {
  26.                 $this->conn = mysql_connect(DB_SERVER,DB_USER,DB_PASS);
  27.                 if(!$this->conn){
  28.                         echo "Problem in database connection! Contact administrator!";
  29.                         exit();
  30.                 }else{
  31.                         $db_select = mysql_select_db(DB_NAME,$this->conn);
  32.                         if (!$db_select) {
  33.                                 echo "Problem in selecting database! Contact administrator!";
  34.                                 exit();
  35.                         }
  36.                 }
  37.  
  38.         }
  39.        
  40.         function setQuery($sql='') {
  41.                 $this->sql_string=$sql;
  42.         }
  43.        
  44.         function executeQuery() {
  45.                 $result = mysql_query($this->sql_string, $this->conn);
  46.                 $this->confirm_query($result);
  47.                 return $result;
  48.         }      
  49.        
  50.         private function confirm_query($result) {
  51.                 if(!$result){
  52.                         $this->error_no = mysql_errno( $this->conn );
  53.                         $this->error_msg = mysql_error( $this->conn );
  54.                         return false;                          
  55.                 }
  56.                 return $result;
  57.         }
  58.        
  59.         function loadResultList( $key='' ) {
  60.                 $cur = $this->executeQuery();
  61.                
  62.                 $array = array();
  63.                 while ($row = mysql_fetch_object( $cur )) {
  64.                         if ($key) {
  65.                                 $array[$row->$key] = $row;
  66.                         } else {
  67.                                 $array[] = $row;
  68.                         }
  69.                 }
  70.                 mysql_free_result( $cur );
  71.                 return $array;
  72.         }
  73.        
  74.         function loadSingleResult() {
  75.                 $cur = $this->executeQuery();
  76.                        
  77.                 while ($row = mysql_fetch_object( $cur )) {
  78.                         $data = $row;
  79.                 }
  80.                 mysql_free_result( $cur );
  81.                 return $data;
  82.         }
  83.        
  84.         function getFieldsOnOneTable( $tbl_name ) {
  85.        
  86.                 $this->setQuery("DESC ".$tbl_name);
  87.                 $rows = $this->loadResultList();
  88.                
  89.                 $f = array();
  90.                 for ( $x=0; $x<count( $rows ); $x++ ) {
  91.                         $f[] = $rows[$x]->Field;
  92.                 }
  93.                
  94.                 return $f;
  95.         }      
  96.  
  97.         public function fetch_array($result) {
  98.                 return mysql_fetch_array($result);
  99.         }
  100.         //gets the number or rows      
  101.         public function num_rows($result_set) {
  102.                 return mysql_num_rows($result_set);
  103.         }
  104.  
  105.         public function insert_id() {
  106.     // get the last id inserted over the current db connection
  107.                 return mysql_insert_id($this->conn);
  108.         }
  109.  
  110.         public function affected_rows() {
  111.                 return mysql_affected_rows($this->conn);
  112.         }
  113.        
  114.          public function escape_value( $value ) {
  115.                 if( $this->real_escape_string_exists ) { // PHP v4.3.0 or higher
  116.                         // undo any magic quote effects so mysql_real_escape_string can do the work
  117.                         if( $this->magic_quotes_active ) { $value = stripslashes( $value ); }
  118.                         $value = mysql_real_escape_string( $value );
  119.                 } else { // before PHP v4.3.0
  120.                         // if magic quotes aren't already on then add slashes manually
  121.                         if( !$this->magic_quotes_active ) { $value = addslashes( $value ); }
  122.                         // if magic quotes are active, then the slashes already exist
  123.                 }
  124.                 return $value;
  125.         }
  126.         //closing of connection
  127.         public function close_connection() {
  128.                 if(isset($this->conn)) {
  129.                         mysql_close($this->conn);
  130.                         unset($this->conn);
  131.                 }
  132.         }
  133.        
  134. }
  135. $mydb = new Database();
  136. ?>
Next the function.php.
  1. <?php
  2.         function strip_zeros_from_date($marked_string="") {
  3.                 //first remove the marked zeros
  4.                 $no_zeros = str_replace('*0','',$marked_string);
  5.                 $cleaned_string = str_replace('*0','',$no_zeros);
  6.                 return $cleaned_string;
  7.         }
  8.         function redirect_to($location = NULL) {
  9.                 if($location != NULL){
  10.                         header("Location: {$location}");
  11.                         exit;
  12.                 }
  13.         }
  14.         function output_message($message="") {
  15.        
  16.                 if(!empty($message)){
  17.                 return "<p class=\"message\">{$message}</p>";
  18.                 }else{
  19.                         return "";
  20.                 }
  21.         }
  22.         //this function will autoload our classess available
  23.         function __autoload($class_name) {
  24.                 $class_name = strtolower($class_name);
  25.                 $path = LIB_PATH.DS."{$class_name}.php";
  26.                 if(file_exists($path)){
  27.                         require_once($path);
  28.                 }else{
  29.                         die("The file {$class_name}.php could not be found.");
  30.                 }
  31.                                        
  32.         }
  33.        
  34.         function include_layout_template_public($template="") {
  35.                 include(SITE_ROOT.DS.'layouts'.DS.$template);
  36.  
  37.                 }
  38. ?>
Next for initialize.php.
  1. <?php
  2. /**
  3. * Description:  This includes for basic and core configurations.
  4. * Author:               Joken Villanueva
  5. * Date Created: May 19, 2013
  6. * Revised By:          
  7. */
  8.  
  9. //define the core paths
  10. //Define them as absolute peths to make sure that require_once works as expected
  11.  
  12. //DIRECTORY_SEPARATOR is a PHP Pre-defined constants:
  13. //(\ for windows, / for Unix)
  14. defined('DS') ? null : define('DS', DIRECTORY_SEPARATOR);
  15.  
  16. defined('SITE_ROOT') ? null : define ('SITE_ROOT', $_SERVER['DOCUMENT_ROOT'].DS.'usercrud');
  17.  
  18. defined('LIB_PATH') ? null : define ('LIB_PATH',SITE_ROOT.DS.'includes');
  19.  
  20. // load config file first
  21. require_once(LIB_PATH.DS."config.php");
  22. //load basic functions next so that everything after can use them
  23. require_once(LIB_PATH.DS."functions.php");
  24. require_once(LIB_PATH.DS."database.php");
  25. ?>
And lastly the user.php class.
  1. <?php
  2. /**
  3. * Description:  user class.
  4. *                               Return list of users, Single user.
  5. * Author:               Joken E. Villanueva
  6. * Date Created: May 24,2013
  7. * Date Modified:June 8, 2013           
  8. */
  9.  
  10. require_once(LIB_PATH.DS.'database.php');
  11. class User {
  12.  
  13.         protected static $tbl_name = "users";
  14.         /*-Comon SQL Queries-*/
  15.         function db_fields(){
  16.                 global $mydb;
  17.                 return $mydb->getFieldsOnOneTable(self::$tbl_name);
  18.         }
  19.        
  20.         function allUsers(){
  21.                 global $mydb;
  22.                 $mydb->setQuery("SELECT * FROM users");
  23.                 $cur = $mydb->loadResultList();
  24.                 return $cur;
  25.         }
  26.         function userFilter($id=0,$uname=''){
  27.                         global $mydb;
  28.                         $mydb->setQuery("SELECT * FROM ".self::$tbl_name." Where user_id= {$id} OR uname= {$uname}");
  29.                         $cur = $mydb->loadResultList();
  30.                         return $cur;
  31.         }              
  32.         function singleUser($id=0){
  33.                 global $mydb;
  34.                 $mydb->setQuery("SELECT * FROM ".self::$tbl_name." WHERE user_id={$id} LIMIT 1");
  35.                 $row = $mydb->loadSingleResult();
  36.                 return $row;
  37.         }
  38.        
  39.         static function Authenticate($uname="", $h_upass=""){
  40.                 global $mydb;
  41.                 $mydb->setQuery("SELECT * FROM `users` WHERE `uname`='". $uname ."' and `u_pass`='". $h_upass ."'");
  42.                 $rows = $mydb->loadSingleResult();
  43.                         $_SESSION['user_id']    = $rows->user_id;
  44.                         $_SESSION['username']   = $rows->users_name;
  45.                         $_SESSION['usersname']  = $rows->uname;
  46.                         $_SESSION['userpass']   = $rows->u_pass;
  47.                         $_SESSION['usertype']   = $rows->utype;
  48.                         return true;   
  49.         }      
  50.         /*---Instantiation of Object dynamically---*/
  51.         static function instantiate($record) {
  52.                 $object = new self;
  53.  
  54.                 foreach($record as $attribute=>$value){
  55.                   if($object->has_attribute($attribute)) {
  56.                     $object->$attribute = $value;
  57.                   }
  58.                 }
  59.                 return $object;
  60.         }
  61.        
  62.         /*--Cleaning the raw data before submitting to Database--*/
  63.         private function has_attribute($attribute) {
  64.           // We don't care about the value, we just want to know if the key exists
  65.           // Will return true or false
  66.           return array_key_exists($attribute, $this->attributes());
  67.         }
  68.  
  69.         protected function attributes() {
  70.                 // return an array of attribute names and their values
  71.           global $mydb;
  72.           $attributes = array();
  73.           foreach($this->db_fields() as $field) {
  74.             if(property_exists($this, $field)) {
  75.                         $attributes[$field] = $this->$field;
  76.                 }
  77.           }
  78.           return $attributes;
  79.         }
  80.        
  81.         protected function sanitized_attributes() {
  82.           global $mydb;
  83.           $clean_attributes = array();
  84.           // sanitize the values before submitting
  85.           // Note: does not alter the actual value of each attribute
  86.           foreach($this->attributes() as $key => $value){
  87.             $clean_attributes[$key] = $mydb->escape_value($value);
  88.           }
  89.           return $clean_attributes;
  90.         }
  91.        
  92.        
  93.         /*--Create,Update and Delete methods--*/
  94.         public function save() {
  95.           // A new record won't have an id yet.
  96.           return isset($this->id) ? $this->update() : $this->create();
  97.         }
  98.        
  99.         public function create() {
  100.                 global $mydb;
  101.                 // Don't forget your SQL syntax and good habits:
  102.                 // - INSERT INTO table (key, key) VALUES ('value', 'value')
  103.                 // - single-quotes around all values
  104.                 // - escape all values to prevent SQL injection
  105.                 $attributes = $this->sanitized_attributes();
  106.                 $sql = "INSERT INTO ".self::$tbl_name." (";
  107.                 $sql .= join(", ", array_keys($attributes));
  108.                 $sql .= ") VALUES ('";
  109.                 $sql .= join("', '", array_values($attributes));
  110.                 $sql .= "')";
  111.         echo $mydb->setQuery($sql);
  112.        
  113.          if($mydb->executeQuery()) {
  114.             $this->id = $mydb->insert_id();
  115.             return true;
  116.           } else {
  117.             return false;
  118.           }
  119.         }
  120.  
  121.         public function update($id=0) {
  122.           global $mydb;
  123.                 $attributes = $this->sanitized_attributes();
  124.                 $attribute_pairs = array();
  125.                 foreach($attributes as $key => $value) {
  126.                   $attribute_pairs[] = "{$key}='{$value}'";
  127.                 }
  128.                 $sql = "UPDATE ".self::$tbl_name." SET ";
  129.                 $sql .= join(", ", $attribute_pairs);
  130.                 $sql .= " WHERE user_id=". $id;
  131.           $mydb->setQuery($sql);
  132.                 if(!$mydb->executeQuery()) return false;        
  133.                
  134.         }
  135.  
  136.         public function delete($id=0) {
  137.                 global $mydb;
  138.                   $sql = "DELETE FROM ".self::$tbl_name;
  139.                   $sql .= " WHERE user_id=". $id;
  140.                   $sql .= " LIMIT 1 ";
  141.                   $mydb->setQuery($sql);
  142.                  
  143.                         if(!$mydb->executeQuery()) return false;        
  144.        
  145.         }
  146. }
  147. ?>
And for our header.php this is the code.
  1. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
  2. <html xmlns="http://www.w3.org/1999/xhtml">
  3. <head>
  4. <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
  5. <title>User Information Management System</title>
  6. <link rel="stylesheet" href="dropdown/dropdown.css" type="text/css" />
  7. <script type="text/javascript" src="dropdown/dropdown.js"></script>
  8. <link href="stylesheets/protec.css" media="all" rel="stylesheet" type="text/css" />
  9.  
  10. </head>
  11. <body>
  12. <div id="titlebar_m">
  13.         <div id="titlebar_l">
  14.         <div id="titlebar_r">
  15.                         <table border="0" cellpadding="0" cellspacing="0" width="100%" id="titlebar_frame">
  16.                                 <tr>
  17.                                         <td width="50%" align="left" id="system-title">User Management System</td>
  18.                                           <td align="right">
  19.                                
  20.                                         <table border="0" cellpadding="0" cellspacing="0" 'id="welcome-and-logout"'>
  21.                                             <tr>
  22.                
  23.                                                 <td id="welcome-user"></strong></td>
  24.                
  25.                                                 <td width="30">&nbsp;</td>
  26.                
  27.                                                 <td>
  28.                
  29.                                                 </td>
  30.                
  31.                                             </tr>
  32.                
  33.                                         </table>
  34.                                 </td>
  35.                                 </tr>
  36.                         </table>
  37.        
  38.        
  39.         </div>
  40.     </div>
  41. </div>
  42. <link rel="stylesheet" type="text/css" href="javascripts/tools/calendar/css/calendar-win2k-cold-1.css" />
  43. <link rel="stylesheet" type="text/css" href="javascripts/tools/monthpicker/css/monthpicker.css" />
  44. <link rel="stylesheet" type="text/css" href="javascripts/tools/popup/popup_win.css" />
  45. <link rel="stylesheet" type="text/css" href="modules/mod_custommod/css/custommod.css" />
  46. <script type="text/javascript" language="javascript" src="javascripts/application.js"></script>
  47. <script type="text/javascript" language="javascript" src="javascripts/tools/calendar/calendar.js"></script>
  48. <script type="text/javascript" language="javascript" src="javascripts/tools/calendar/lang/calendar-en.js"></script>
  49. <script type="text/javascript" language="javascript" src="javascripts/tools/calendar/calendar-setup.js"></script>
  50. <script type="text/javascript" language="javascript" src="javascripts/tools/monthpicker/monthpicker.js"></script>
And we need to add this code for index.php.
  1. <?php
  2. /**
  3. * Description:  Listing of user.
  4. * Author:               Joken E. Villanueva
  5. * Date Created: May 24,2013
  6. * Date Modified:June 6, 2013           
  7. */
  8.         require_once("includes/initialize.php");
  9.         include_layout_template_public('header.php');
  10. ?>
  11.  
  12. <div id="module-name">List of users
  13. </div>
  14.                        
  15.                
  16. <div id="content">
  17. <Table class="app_listing" style="width:100%;">
  18.                 <tr>
  19.              
  20.                        
  21.                         <th align="left">Name of user</th>
  22.                         <th align="left">Username</th>
  23.                         <th align="left">User Type</th>
  24.                         <th align="center">Option</th>
  25.                        
  26.         </tr>
  27. <?php
  28.                 //it declare $user as new User class
  29.                 //$user->allUser it simply calls the allUser() function that will return all user found in the database table
  30.                          $user = new User();
  31.                          $cur = $user->allUsers();
  32.                         //this loadObject() is a function where we loop all the return user by $user->allUsers() function.             
  33.                          loadObject();
  34.                        
  35.                 function loadObject(){
  36.                         global $cur;   
  37.                         foreach ($cur as $object){     
  38.                                
  39.                                                 echo (@$odd == true) ? ' <tr class="odd_row" > ' : ' <tr class="even_row"> ';
  40.                                                 @$odd = !$odd;
  41.                                                
  42.                                                 echo ' <td> ';
  43.                                                 echo '<a href="#.php'" class="app_listitem_key">'.$object->users_name.'</a>';                  
  44.                                                 echo ' <td> ';
  45.                                                 echo $object->uname;
  46.                                                 echo ' <td> ';
  47.                                                 echo $object->utype;
  48.                                                
  49.                                                 echo ' <td align="center"> ';
  50.                                                 echo '<a href="#.php" class="app_listitem_key">[Edit Entry]</a>';      
  51.                                                 echo '<a href="#.php'" class="app_listitem_key">[Delete Entry]</a>';
  52.                         }
  53.                 }                      
  54.  
  55.                 ?>
  56.  
  57. </table>
  58. <table class="app_listing" style="width:100%;">
  59.         <tr align="center">
  60.                 <td>
  61.                 <a href="create_user.php" class="app_listitem_key">[New Entry]</a>
  62.                 </td>
  63.         </tr>
  64. </table>
This time when the [New Entry] is clicked, it will call the create_user.php.
  1. <?php
  2. /**
  3. * Description:  Create user.
  4. * Author:               Joken E. Villanueva
  5. * Date Created: May 24,2013
  6. * Date Modified:June 6, 2013           
  7. */
  8.         require_once("includes/initialize.php");
  9.         include_layout_template_public('header.php');
  10.         ?>
  11.  
  12. <div id="module-name">New User
  13. </div>
  14. <?php
  15. //it check if submit button is set
  16.         if (isset($_POST['submit'])){
  17.                 //form has been submitted1
  18.                 $name   = trim($_POST['user_name']);
  19.                 $uname  = trim($_POST['uname']);
  20.                 $upass  = trim($_POST['upass']);
  21.                 $utype  = trim($_POST['utype']);
  22.                
  23.                 if($name == ''){
  24.                         echo 'Name is not Valid!';
  25.                         exit;
  26.                 }elseif($uname == ''){ 
  27.                         echo 'Username is not Valid!';
  28.                         exit;
  29.                 }elseif($upass == ''){ 
  30.                         echo 'Password is not Valid!';
  31.                         exit;
  32.                
  33.                 }else{
  34.                         //instantiation of objects
  35.                          $user = new User();
  36.                          $user->users_name              = $name;
  37.                          $user->uname                   = $uname;
  38.                          $user->u_pass                  = sha1($upass);
  39.                          $user->utype                   = $utype;
  40.                          //it save the data and if successfully saved it redirected back into index.php
  41.                          $istrue = $user->create();
  42.                          if($istrue){?>
  43.                                 <script type="text/javascript">
  44.                                         alert("New user has successfully added!");
  45.                                         window.location = "index.php";
  46.                                 </script>
  47.                                 <?php
  48.                         }else{
  49.                                  echo "Inserting Failed!";
  50.                          }
  51.                 }      
  52.         }else{
  53.                 $name   = "";
  54.                 $uname  = "";
  55.                 $upass  = "";
  56.                 $utype  = "";
  57.         }
  58.  
  59. ?>
  60.  
  61. <div id="content">
  62.  
  63. <form  method="post" action="create_user.php">
  64.  
  65.  
  66. <table class="app_listing" width="50%">
  67.         <tr>
  68.                 <th > <div class="app_title" align="left">&nbsp;&nbsp;User Details</div></th>
  69.         </tr>
  70.         <tr class="form">
  71.                 <td class="form">
  72.                         <table class="app_form">
  73.                                
  74.                                 <tr>
  75.                                    <td class="label" width="120">Name :: </td>
  76.                                   <td >
  77.                                          <input type="text" name="user_name" id="user_name"  class="txtbox" />
  78.                                         </td>
  79.                                 </tr>                          
  80.                                 <tr>
  81.                                    <td class="label">Username :: </td>
  82.                                   <td>
  83.                                          <input type="text" name="uname" id="uname"  class="txtbox" />
  84.                                         </td>
  85.                                 </tr>
  86.                                 <tr>
  87.                                    <td class="label">Password :: </td>
  88.                                   <td>
  89.                                          <input type="password" name="upass" id="upass"  class="txtbox" />
  90.                                         </td>
  91.                                 </tr>
  92.                                 <tr>
  93.                                    <td class="label">User Type :: </td>
  94.                                   <td>
  95.                                          <select name="utype" id="utype" >
  96.                                           <option value="Administrator">Administrator</option>
  97.                                           <option value="Registrar">Registrar</option>
  98.                                           <option value="Teacher">Teacher</option>
  99.                                           <option value="Student">Student</option>
  100.                                          
  101.                                   </select>
  102.                                         </td>
  103.                                 </tr>          
  104.                                   <tr>
  105.                                         <td class="label"></td>
  106.                                         <td>
  107.                                          
  108.                                           <input type="submit" name="submit" value="Save" class="app_button">  
  109.                                    </td>
  110.                                   </tr>
  111.                                          
  112.                                
  113.                         </table>       
  114.                 </tr>          
  115. </table>
  116. </form>
That's it for now folks you can download the full source code together with images and css file included in this topic. My next will be the continuation of this topic that will tackle the editing and updating of user.

Add new comment