PHP Ionic Angularjs Phonegap AJAX Javascript CSS MySQL jQuery Forum

ประยุกต์เข้ารหัส รหัสผ่าน กับระบบสมาชิก และการ login

25 September 2015 By


จากบทความเกี่ยวกับการเข้ารหัสข้อมูลด้วย crypt ในรูปแบบต่างๆ
มาสู่การประยุกต์ และนำมาใช้งานใน codeigniter โปรเจ็คของเรา
ในส่วนของระบบสมาชิกของ admin หรือผู้แลระบบ
 
การใช้งาน crypt สำหรับเข้ารหัสข้อมูลรหัสผ่าน 
http://www.ninenik.com/content.php?arti_id=678 via @ninenik
 
สำหรับเนื้อหาในส่วนการสร้างระบบสมาชิก admin ด้วย codeigniter ดูเพิ่มเติมได้ที่
codeigniter กับ การเชื่อมต่อฐานช้อมูล และการเพิ่ม ลบ แก้ไข แสดงรายการ 
http://www.ninenik.com/content.php?arti_id=666 via @ninenik
 
 

เราจะทำการเข้ารหัสรหัสผ่าน ก่อนทำการบันทึก ทั้งในส่วนของการสร้างผู้ใช้ระบบใหม่ และการอัพเดทข้อมูล

 

ก่อนอื่นเปิดไฟล์ admin_user.php ในโฟลเดอร์ apps > views > admin

 
ดูในส่วนของ $action เท่ากับ create
 
<?php if($action=="create"){?>
<?php
if(isset($_POST['btn_add']) && $_POST['btn_add']!=""){
    $p_username = $this->input->post('username');
    $p_password = $this->input->post('password');
    $v_adddate = date("Y-m-d H:i:s");
    $sql = "INSERT INTO tbl_admin (
        admin_id,
        admin_name,
        admin_pass,
        admin_adddate
    ) VALUES (
        NULL,
        ".$this->db->escape($p_username).",
        ".$this->db->escape($p_password).",
        ".$this->db->escape($v_adddate)."
    )";
    if($this->db->query($sql)){  // เมื่อเพิ่มข้อมูลแล้ว
        redirect('admin/user'); // ไปหน้า user
    }  
}
?>
<a href="<?=base_url('admin/user')?>" class="btn btn-warning btn-sm">< Back</a>
<br><br>
<?php echo form_open('admin/user/create'); ?> 
<table class="table table-bordered">
<thead>
    <tr class="active">
        <th colspan="2">Create User</th>
    </tr>
</thead>
<tbody>
    <tr >
        <th width="120">Username:</th>
        <td>
            <input type="text" name="username">
        </td>
    </tr>
    <tr>
        <th width="120">Password:</th>
        <td>
        <input type="password" name="password" >
        </td>
    </tr>    
    <tr>
        <th></th>
        <td>
            <input type="submit" class="btn btn-success btn-sm" name="btn_add" value="Add User">
        </td>
    </tr>
</tbody>
</table>    
    

        
</form>
<?php } ?>
 
 
จะเห็นว่า รหัสผ่านที่เรารับมาจากผู้ใช้ จะทำการบันทึกลงฐานข้อมูลเลย โดยไม่ได้ทำการ
เข้ารหัสรหัสผ่าน เราจะทำการเข้ารหัสรหัสผ่านก่อนทำการบันทึก ดังนี้
 
เราจะใช้รูปแบบการเข้ารหัสแบบ Blowfish จะได้ในส่วนของการบันทึกข้อมูลเป็นดังนี้
 
$salt = '$2a$04$123456789123456789123$';  
$hashed_password = crypt($password, $salt);
 
จะได้เป็น
 
<?php
if(isset($_POST['btn_add']) && $_POST['btn_add']!=""){
    $p_username = $this->input->post('username');
    $p_password = $this->input->post('password');
    $salt = '$2a$04$123456789123456789123$';  
    $hashed_password = crypt($p_password, $salt);      
    $v_adddate = date("Y-m-d H:i:s");
    $sql = "INSERT INTO tbl_admin (
        admin_id,
        admin_name,
        admin_pass,
        admin_adddate
    ) VALUES (
        NULL,
        ".$this->db->escape($p_username).",
        ".$this->db->escape($hashed_password).",
        ".$this->db->escape($v_adddate)."
    )";
    if($this->db->query($sql)){  // เมื่อเพิ่มข้อมูลแล้ว
        redirect('admin/user'); // ไปหน้า user
    }  
}
?>  
 
จากนั้นให้เราทดสอบการเพิ่มข้อมูลสมาชิกของ admin เข้าไป หากไม่มีอะไรผิดพลาด
ในส่วนของรหัสผ่านของผู้ดูแลระบบ จะถูกเข้ารหัสในรูปแบบ Blowfish ด้วยฟังก์ชั่่น crypt
 
ต่อไปมาดูในส่วนของการแก้ไขรหัสผ่าน ในขั้นตอนนี้ เราจะเพิ่มการตรวจสอบเข้ามาอีกขั้น
ก็คือให้กรอกรหัสผ่านเดิมก่อน ถึงจะทำการแก้ไขข้อมูลได้ นั้นหมายความว่า เราต้องทำการ
ตรวจสอบ รหัสผ่านเดิมที่กรอก ด้วยการเช็คค่ากับ รหัสผ่านที่ถูกเข้ารหัสเดิมก่อน
 
แต่ก่อนอื่นให้เราสร้าง ส่วนการแสดงสถานะ การดำเนินการหรือ process ของการทำรายการ
ในที่นี้คือ การอัพเดทข้อมูล เพื่อแจ้งให้ผู้ใช้ทราบว่า ทำการอัพเดทข้อมูล ได้หรือไม่
โดยให้เพิ่มสวนของ $action มาอีกสองอัน เป็นข้อความแจ้งอย่างง่าย
ประกอบด้วย $action เท่ากับ success กับ error ดังนี้
 
<?php if($action=="success"){?>

<a href="<?=base_url('admin/user')?>" class="btn btn-warning btn-sm">< Back</a>
<br><br>
<div class="bg-success text-center" style="padding:10px;">
    <p class="text-success">Updated data completed</p>
    <a href="<?=base_url('admin/user')?>" class="text-success">< Back > </a>
</div>

<?php } ?>


<?php if($action=="error"){?>
<?php
$previous_url = $this->agent->referrer();          
?>
<a href="<?=$previous_url?>" class="btn btn-warning btn-sm">< Back</a>
<br><br>
<div class="bg-danger text-center" style="padding:10px;">
    <p class="text-danger">Error! please try again.</p>
    <a href="<?=$previous_url?>" class="text-danger">< Back > </a>
</div>

<?php } ?>
 
จะเห็นว่าในส่วนของ $action เท่ากับ error เรามีการเรียกใช้งาน user agent class
เพื่อจะดึง url เพจก่อนหน้า หรือก็คือหน้ารายการที่อัพเดทข้อมูล เพื่อที่จะให้สามารถ
กดลิ้งค์ย้อนกลับมาหน้าเดิมได้ (จริงๆ แล้วสามารถทำได้วิธี แต่ในทีนี้ เราจะเรียกใช้ผ่าน 
user agent class)
 

โดยให้เราสร้างไฟล์ model ชื่อ User_model.php ไว้ในโฟลเดอร์ apps > models > admin

และมีโค้ดอย่างง่ายดังนี้
 
<?php
class User_model extends CI_Model {

    public function __construct()
    {
        parent::__construct();
        $this->load->library('user_agent');
    }

}
 
 
ทีนี้เรามาดูในโฟล์เดิม admin_user.php ดูในส่วนของการ $action เท่ากับ edit
 
<?php if($action=="edit"){?>
<?php
// เมื่อส่งข้อมูลฟอร์มเพื่อแก้ไขข้อมูล
if(isset($_POST['btn_edit']) && $_POST['btn_edit']!=""){
    $p_username = $this->input->post('username');
    $p_password = $this->input->post('password');
    $sql = "UPDATE tbl_admin SET
    admin_name = ".$this->db->escape($p_username).",
    admin_pass = ".$this->db->escape($p_password)."
    WHERE admin_id=".$this->db->escape($id);
    if($this->db->query($sql)){  // เมื่อเพิ่มข้อมูลแล้ว
        redirect('admin/user'); // ไปหน้า user
    }  
}
// แสดงข้อมูลของสมาชิกนั้นๆ ก่อนแก้ไข อ้างอิงจากตัวแปร $id 
$query = $this->db->query("SELECT * FROM tbl_admin WHERE admin_id=".$this->db->escape($id));
$row = $query->row_array();
?>
<a href="<?=base_url('admin/user')?>" class="btn btn-warning btn-sm">< Back</a>
<br><br>
<?php echo form_open('admin/user/edit/'.$id); ?> 
<table class="table table-bordered">
<thead>
    <tr class="active">
        <th colspan="2">Edit User</th>
    </tr>
</thead>
<tbody>
    <tr >
        <th width="120">Username:</th>
        <td>
            <input type="text" name="username" value="<?=$row['admin_name']?>">
        </td>
    </tr>
    <tr>
        <th width="120">Password:</th>
        <td>
        <input type="password" name="password" value="<?=$row['admin_pass']?>">
        </td>
    </tr>    
    <tr>
        <th></th>
        <td>
            <input type="submit" class="btn btn-success btn-sm" name="btn_edit" value="Edit User">
        </td>
    </tr>
</tbody>
</table>    
    

        
</form>
<?php } ?>
 
ในส่วนของฟอร์ม เราจะแทนช่องสำหรับกรอกรหัสผ่าน เป็นช่องสำหรับกรอกรหัสผ่านเดิม 
และเพิ่มช่องกรอกรหัสผ่านใหม่ เข้าไปดังนี้
 
    <tr>
        <th width="120">Old Password:</th>
        <td>
        <input type="password" name="password" value="">
        </td>
    </tr>    
    <tr>
        <th width="120">New Password:</th>
        <td>
        <input type="password" name="new_password" value="">
        </td>
    </tr>    
 
และในส่วนของการคิวรี่เพื่ออัพเดทข้อมูลจะปรับเป็นดังนี้
 
// เมื่อส่งข้อมูลฟอร์มเพื่อแก้ไขข้อมูล
if(isset($_POST['btn_edit']) && $_POST['btn_edit']!=""){
    $p_username = $this->input->post('username');
    $p_password = $this->input->post('password');
    $p_password_new = $this->input->post('new_password');
    $salt = '$2a$04$123456789123456789123$';  
    $hashed_password = crypt($p_password, $salt);        
    $hashed_password_new = crypt($p_password_new, $salt);      
    $sql = "UPDATE tbl_admin SET
    admin_name = ".$this->db->escape($p_username).",
    admin_pass = ".$this->db->escape($hashed_password_new)."
    WHERE admin_pass =".$this->db->escape($hashed_password)." 
    AND admin_id=".$this->db->escape($id);
    if($this->db->query($sql)){  // เมื่อเพิ่มข้อมูลแล้ว
        if($this->db->affected_rows()>0){ // ถ้ามีรายการอัพเดทเกิดขึ้น
            redirect('admin/user/success'); // ไปหน้าแจ้งอัพเทข้อมูลสำเร็จ
        }else{
            redirect('admin/user/error'); // ไปหน้าแจัง เกิดข้อผิดพลาด ไม่มีการอัพเดทข้อมูล
        }
    }  
}
 
ดังนั้นเราจะได้ไฟล์ admin_user.php ในส่วนของ $action เท่ากับ edit ใหม่เป็นดังนี้
 
<?php if($action=="edit"){?>
<?php
// เมื่อส่งข้อมูลฟอร์มเพื่อแก้ไขข้อมูล
if(isset($_POST['btn_edit']) && $_POST['btn_edit']!=""){
    $p_username = $this->input->post('username');
    $p_password = $this->input->post('password');
    $p_password_new = $this->input->post('new_password');
    $salt = '$2a$04$123456789123456789123$';  
    $hashed_password = crypt($p_password, $salt);        
    $hashed_password_new = crypt($p_password_new, $salt);      
    $sql = "UPDATE tbl_admin SET
    admin_name = ".$this->db->escape($p_username).",
    admin_pass = ".$this->db->escape($hashed_password_new)."
    WHERE admin_pass =".$this->db->escape($hashed_password)." 
    AND admin_id=".$this->db->escape($id);
    if($this->db->query($sql)){  // เมื่อเพิ่มข้อมูลแล้ว
        if($this->db->affected_rows()>0){ // ถ้ามีรายการอัพเดทเกิดขึ้น
            redirect('admin/user/success'); // ไปหน้าแจ้งอัพเทข้อมูลสำเร็จ
        }else{
            redirect('admin/user/error'); // ไปหน้าแจัง เกิดข้อผิดพลาด ไม่มีการอัพเดทข้อมูล
        }
    }  
}
// แสดงข้อมูลของสมาชิกนั้นๆ ก่อนแก้ไข อ้างอิงจากตัวแปร $id 
$query = $this->db->query("SELECT * FROM tbl_admin WHERE admin_id=".$this->db->escape($id));
$row = $query->row_array();
?>
<a href="<?=base_url('admin/user')?>" class="btn btn-warning btn-sm">< Back</a>
<br><br>
<?php echo form_open('admin/user/edit/'.$id); ?> 
<table class="table table-bordered">
<thead>
    <tr class="active">
        <th colspan="2">Edit User</th>
    </tr>
</thead>
<tbody>
    <tr >
        <th width="120">Username:</th>
        <td>
            <input type="text" name="username" value="<?=$row['admin_name']?>">
        </td>
    </tr>
    <tr>
        <th width="120">Old Password:</th>
        <td>
        <input type="password" name="password" value="">
        </td>
    </tr>    
    <tr>
        <th width="120">New Password:</th>
        <td>
        <input type="password" name="new_password" value="">
        </td>
    </tr>        
    <tr>
        <th></th>
        <td>
            <input type="submit" class="btn btn-success btn-sm" name="btn_edit" value="Edit User">
        </td>
    </tr>
</tbody>
</table>    
    

        
</form>
<?php } ?>

 
 
จากข้างต้น เราจะได้ทั้งการเข้ารหัส รหัสผ่านในฐานข้อมูล และการจะแก้ไขรหัสผ่านใหม่ได้นั้น
ต้องกรอกข้อมูลรหัสผ่านเก่าได้ 
 

โค้ดไฟล์ admin_user.php ทั้งหมดจะได้เป็น

 
 
<div class="container">
    
Admin User
<br><br>
<?php if($action==null){?>
<a href="<?=base_url('admin/user/create')?>" class="btn btn-primary btn-sm">Create</a>
<br><br>
<table class="table table-striped table-bordered table-condensed">
    <thead>
        <tr>
            <th width="50" class="text-center">#</th>
            <th>Name</th>
            <th width="150" class="text-center">Last Login</th>
            <th width="150" class="text-center">Manage</th>
        </tr>
    </thead>
    <tbody>
        <?php
        $i_num=0;
        $query = $this->db->query("SELECT * FROM tbl_admin");
        foreach ($query->result_array() as $row){
            $i_num++;
        ?>
        <tr>
            <td class="text-center"><?=$i_num?></td>
            <td><?=$row['admin_name']?></td>
            <td class="text-center"><?=$row['admin_adddate']?></td>
            <td class="text-center">
                <a href="<?=base_url('admin/user/edit/'.$row['admin_id'])?>" class="btn btn-success btn-sm">
                <span class="glyphicon glyphicon-pencil" aria-hidden="true"></span>
                </a>
                &nbsp;&nbsp;
                 <a href="<?=base_url('admin/user/delete/'.$row['admin_id'])?>" class="btn btn-danger btn-sm">
                <span class="glyphicon glyphicon-remove" aria-hidden="true"></span>
                </a>
                
            </td>
        </tr>
        <?php } ?>
    </tbody>
</table>
<?php } ?>

<?php if($action=="create"){?>
<?php
if(isset($_POST['btn_add']) && $_POST['btn_add']!=""){
    $p_username = $this->input->post('username');
    $p_password = $this->input->post('password');
    $salt = '$2a$04$123456789123456789123$';  
    $hashed_password = crypt($p_password, $salt);      
    $v_adddate = date("Y-m-d H:i:s");
    $sql = "INSERT INTO tbl_admin (
        admin_id,
        admin_name,
        admin_pass,
        admin_adddate
    ) VALUES (
        NULL,
        ".$this->db->escape($p_username).",
        ".$this->db->escape($hashed_password).",
        ".$this->db->escape($v_adddate)."
    )";
    if($this->db->query($sql)){  // เมื่อเพิ่มข้อมูลแล้ว
        redirect('admin/user'); // ไปหน้า user
    }  
}
?>
<a href="<?=base_url('admin/user')?>" class="btn btn-warning btn-sm">< Back</a>
<br><br>
<?php echo form_open('admin/user/create'); ?> 
<table class="table table-bordered">
<thead>
    <tr class="active">
        <th colspan="2">Create User</th>
    </tr>
</thead>
<tbody>
    <tr >
        <th width="120">Username:</th>
        <td>
            <input type="text" name="username">
        </td>
    </tr>
    <tr>
        <th width="120">Password:</th>
        <td>
        <input type="password" name="password" >
        </td>
    </tr>    
    <tr>
        <th></th>
        <td>
            <input type="submit" class="btn btn-success btn-sm" name="btn_add" value="Add User">
        </td>
    </tr>
</tbody>
</table>    
    

        
</form>
<?php } ?>


<?php if($action=="edit"){?>
<?php
// เมื่อส่งข้อมูลฟอร์มเพื่อแก้ไขข้อมูล
if(isset($_POST['btn_edit']) && $_POST['btn_edit']!=""){
    $p_username = $this->input->post('username');
    $p_password = $this->input->post('password');
    $p_password_new = $this->input->post('new_password');
    $salt = '$2a$04$123456789123456789123$';  
    $hashed_password = crypt($p_password, $salt);        
    $hashed_password_new = crypt($p_password_new, $salt);      
    $sql = "UPDATE tbl_admin SET
    admin_name = ".$this->db->escape($p_username).",
    admin_pass = ".$this->db->escape($hashed_password_new)."
    WHERE admin_pass =".$this->db->escape($hashed_password)." 
    AND admin_id=".$this->db->escape($id);
    if($this->db->query($sql)){  // เมื่อเพิ่มข้อมูลแล้ว
        if($this->db->affected_rows()>0){ // ถ้ามีรายการอัพเดทเกิดขึ้น
            redirect('admin/user/success'); // ไปหน้าแจ้งอัพเทข้อมูลสำเร็จ
        }else{
            redirect('admin/user/error'); // ไปหน้าแจัง เกิดข้อผิดพลาด ไม่มีการอัพเดทข้อมูล
        }
    }  
}
// แสดงข้อมูลของสมาชิกนั้นๆ ก่อนแก้ไข อ้างอิงจากตัวแปร $id 
$query = $this->db->query("SELECT * FROM tbl_admin WHERE admin_id=".$this->db->escape($id));
$row = $query->row_array();
?>
<a href="<?=base_url('admin/user')?>" class="btn btn-warning btn-sm">< Back</a>
<br><br>
<?php echo form_open('admin/user/edit/'.$id); ?> 
<table class="table table-bordered">
<thead>
    <tr class="active">
        <th colspan="2">Edit User</th>
    </tr>
</thead>
<tbody>
    <tr >
        <th width="120">Username:</th>
        <td>
            <input type="text" name="username" value="<?=$row['admin_name']?>">
        </td>
    </tr>
    <tr>
        <th width="120">Old Password:</th>
        <td>
        <input type="password" name="password" value="">
        </td>
    </tr>    
    <tr>
        <th width="120">New Password:</th>
        <td>
        <input type="password" name="new_password" value="">
        </td>
    </tr>        
    <tr>
        <th></th>
        <td>
            <input type="submit" class="btn btn-success btn-sm" name="btn_edit" value="Edit User">
        </td>
    </tr>
</tbody>
</table>    
    

        
</form>
<?php } ?>

<?php if($action=="delete"){?>

<a href="<?=base_url('admin/user')?>" class="btn btn-warning btn-sm">< Back</a>
<br><br>
<?php
if($id){
    $sql = "DELETE FROM tbl_admin WHERE admin_id=".$this->db->escape($id);
    if($this->db->query($sql)){
}
?>
<div class="bg-success text-center" style="padding:10px;">
    <p class="text-success">Delete data completed</p>
    <a href="<?=base_url('admin/user')?>" class="text-success">< Back > </a>
</div>
    <?php } ?>
<?php } ?>

<?php if($action=="success"){?>

<a href="<?=base_url('admin/user')?>" class="btn btn-warning btn-sm">< Back</a>
<br><br>
<div class="bg-success text-center" style="padding:10px;">
    <p class="text-success">Updated data completed</p>
    <a href="<?=base_url('admin/user')?>" class="text-success">< Back > </a>
</div>

<?php } ?>


<?php if($action=="error"){?>
<?php
$previous_url = $this->agent->referrer();          
?>
<a href="<?=$previous_url?>" class="btn btn-warning btn-sm">< Back</a>
<br><br>
<div class="bg-danger text-center" style="padding:10px;">
    <p class="text-danger">Error! please try again.</p>
    <a href="<?=$previous_url?>" class="text-danger">< Back > </a>
</div>

<?php } ?>

</div>


 
 
 

ประยุกต์การตรวจสอบรหัสผ่านที่ถูกเข้ารหัส กับระบบ Login

 
ในตอนต้นๆ ของโปรเจ็คเรา เราจำลองการเข้าสู่ระบบการล็อกอิน โดยการสร้างตัว
แปร session แบบสมมติ หรือก็คือกำหนดแบบตายตัว เข้ามาเลย ไม่ได้ทำการตรวจสอบ
จากข้อมูลในระบบฐานข้อมูล ด้วยเหตุผลเพื่อ ให้ได้ศึกษาส่วนอื่นๆ ที่สำคัญก่อน
และตอนนี้เราก็กลับมาดูในส่วนของการตรวจสอบการล็อกอิน จากฐานข้อมูล
 
ให้เปิดไฟล์ Admin.php ในโฟลเดอร์ apps > controllers 
เรามาดูในส่วนของฟังก์ชั่น login()
โค้ดเดิมเราเป็นดังนี้
 
    // เมื่อทำการล็อกอิน 
    public function login(){
        
        $username=$this->input->post('username');
        $password=$this->input->post('password');
        $remember_check=$this->input->post('remember_check');
        if(isset($remember_check)){
            set_cookie('ck_username',$username,time()+60);
            set_cookie('ck_password',$password,time()+60);
            set_cookie('ck_remember',$remember_check,time()+60);
        }else{
            delete_cookie('ck_username');
            delete_cookie('ck_password');
            delete_cookie('ck_remember');
        }

        // สมมติการล็อกอินสร้างตัวแปร session อย่างง่าย
//        $_SESSION['ses_admin_id']=1;
//        $_SESSION['ses_admin_name']="Admin";
        $newdata = array(
                'ses_admin_id'  =>1,
                'ses_admin_name' => "Admin"
        );
        $this->session->set_userdata($newdata);        
        redirect('admin'); // ไปหน้า admin
    }
 
เราจะปรับในส่วนของการคิวรี่การล็อกอินใหม่เป็นดังนี้
(ในที่นี้จะ ขอใช้การคิวรี่ข้อมูลแบบ query builder)
 
 
    // เมื่อทำการล็อกอิน 
    public function login(){
        
        $username=$this->input->post('username');
        $password=$this->input->post('password');
        $remember_check=$this->input->post('remember_check');
        if(isset($remember_check)){
            set_cookie('ck_username',$username,time()+60);
            set_cookie('ck_password',$password,time()+60);
            set_cookie('ck_remember',$remember_check,time()+60);
        }else{
            delete_cookie('ck_username');
            delete_cookie('ck_password');
            delete_cookie('ck_remember');
        }

        $salt = '$2a$04$123456789123456789123$';  
        $hashed_password = crypt($password, $salt);              
        
        $where_arr = array(
            'admin_name'=>$username,
            'admin_pass'=>$hashed_password
        );
        $query = $this->db->get_where("tbl_admin",$where_arr);  
        $row = $query->row_array();  //คิวรี่ข้อมูลมาแสดงแค่รายการเดียว  
        if(isset($row))  // ถ้ามีข้อมูล ให้ทำการสร้าง session จากข้อมูลในฐานข้อมูล  
        {  
            $newdata = array(
                    'ses_admin_id'  =>$row['admin_id'],
                    'ses_admin_name' => $row['admin_name']
            );
            $this->session->set_userdata($newdata);     
            // อัพเดทข้อมูลการล็อกอินของ admin เช่น ล็อกอินล่าสุด
            $update_data = array(
                'admin_lastlogin	' => date("Y-m-d H:i:s")
            );
            $this->db->update('tbl_admin', $update_data,array('admin_id'=>$row['admin_id']));            
        } 
        redirect('admin'); // ไปหน้า admin
    }
    
 
เป็นอันเรียบร้อยสำหรับการตรวจสอบการล็อกอินข้อมูล ก่อนจะจบในตอนนี้ขออธิบายเกี่ยวกับ
โปรเจ็คของเรา รวมถึงเหตุผลที่มีการใช้งานส่วนต่างๆ ที่ไม่เจาะจงคร่าวๆดีงนี้
จากโค้ดในส่วนต่างๆ จะเห็นว่าเรามีการใช้งานการคิวรี่ข้อมูล ทั้งในแบบ standard และแบบใช้
query builder class ทั้งนี้ ก็เพื่อให้เข้าใจการใช้งานเพื่อจะได้นำไปใช้งานตามแต่ถนัดได้ 
ซึ่งโดยตามความเป็นจริงแล้ว เราควรจะใช้รูปแบบอย่างใดอย่างหนึ่งสำหรับโปรเจ็คนั้นๆ จะเป็นการดี
แต่ใช่ว่าจะต้องใช้แบบเดียวเสมอไป  ท้ายสุดก็ขึ้นกับเราจะเลือกใช้ 
 
โปรเจ็คของเรายังไม่จบ ต่อไปเราจะมาดูในส่วนของหน้าเพจสำหรับผู้ใช้ทั่วไป ซึ่งประกอบไปด้วย
หน้าหลัก หน้าเกี่ยวกับเรา หน้าบริการของเรา หน้าติดต่อเรา คร่าวๆ ประมาณ 4 หน้านี้
จะพยายามเอาส่วนการใช้งานอื่นๆ เท่าที่จะมาประยุกต์กับส่วนของเนื้อหาที่เหลือให้ได้มากที่สุด
รอติดตาม 
 
ฝากโค้ดส่วนของไฟล์ Admin.php แบบเต็มไว้ปิดท้าย
 

ไฟล์ Admin.php ในโฟลเดอร์ apps > controllers 

 
 
<?php  
defined('BASEPATH') OR exit('No direct script access allowed');  
  
class Admin extends CI_Controller {  
    
    public function __construct()
    {
            parent::__construct();
            $this->load->helper('cookie');
//            $this->load->library('session');  // เรียกใช้งาน session
    }  
    
    public function index($admin_pages="home",$action=null,$id=null)  
    {  
        // ตรวจสอบตัวแปร session ที่เราจะสร้างและใช้เป็นเงื่อนไข
        if(!isset($_SESSION['ses_admin_id']) || $_SESSION['ses_admin_id']==""){ // ยังไม่ล็อกอิน
//        if(!$this->session->has_userdata('ses_admin_id') || $this->session->ses_admin_id==""){       
            // แสดงหน้าล็อกอินอย่างง่าย 
            $data['title']="Admin Login";  
            $data['title_h1']="Page Admin Login";  
            $this->load->view('admin/admin_header', $data);  
            $this->load->view('admin/admin_login',$data);  
            $this->load->view('admin/admin_footer');  
        }else{
            // แสดงหน้า admin อย่างง่ายเมื่อมีการล็อกอิน และสร้าง session
            $data['title']="Admin Home";  
            $data['title_h1']="Page Admin Home";  
            $data['action']=$action;
            $data['id']=$id;
            $file_model=APPPATH.'/models/admin/'.ucfirst($admin_pages).'_model.php';  
            if(file_exists($file_model))  
            {  
                $this->load->model('admin/'.$admin_pages.'_model');  
            }               
            $this->load->view('admin/admin_header', $data);  
            $this->load->view('admin/admin_'.$admin_pages,$data);  
            $this->load->view('admin/admin_footer');  
        }
    }  
    
    // เมื่อทำการล็อกอิน 
    public function login(){
        
        $username=$this->input->post('username');
        $password=$this->input->post('password');
        $remember_check=$this->input->post('remember_check');
        if(isset($remember_check)){
            set_cookie('ck_username',$username,time()+60);
            set_cookie('ck_password',$password,time()+60);
            set_cookie('ck_remember',$remember_check,time()+60);
        }else{
            delete_cookie('ck_username');
            delete_cookie('ck_password');
            delete_cookie('ck_remember');
        }

        $salt = '$2a$04$123456789123456789123$';  
        $hashed_password = crypt($password, $salt);              
        
        $where_arr = array(
            'admin_name'=>$username,
            'admin_pass'=>$hashed_password
        );
        $query = $this->db->get_where("tbl_admin",$where_arr);  
        $row = $query->row_array();  //คิวรี่ข้อมูลมาแสดงแค่รายการเดียว  
        if(isset($row))  // ถ้ามีข้อมูล ให้ทำการสร้าง session จากข้อมูลในฐานข้อมูล  
        {  
            $newdata = array(
                    'ses_admin_id'  =>$row['admin_id'],
                    'ses_admin_name' => $row['admin_name']
            );
            $this->session->set_userdata($newdata);     
            // อัพเดทข้อมูลการล็อกอินของ admin เช่น ล็อกอินล่าสุด
            $update_data = array(
                'admin_lastlogin	' => date("Y-m-d H:i:s")
            );
            $this->db->update('tbl_admin', $update_data,array('admin_id'=>$row['admin_id']));            
        } 
        redirect('admin'); // ไปหน้า admin
    }
    
    // เมื่อทำการล็อกเอาท์
    public function logout(){
        // สมมติล็อกเอาท์ ลบค่า session
//        unset(
//            $_SESSION['ses_admin_id'],
//            $_SESSION['ses_admin_name']
//        );
        $array_items = array(
            'ses_admin_id',
            'ses_admin_name'
        );
        $this->session->unset_userdata($array_items);        
        redirect('admin'); // ไปหน้า admin      
    }
    
}  

 

Tags:: login เข้ารหัส รหัสผ่าน crypt codeigniter

เนื้อหาพิเศษ เฉพาะสำหรับสมาชิก

กรุณาล็อกอิน และลงชื่อติดตาม


สมัครสมาชิกได้ที่        ล็อกอินได้ที่   





URL สำหรับอ้างอิง