jQueryTips by Tee++;

  • Home
  • Videos
  • jQueryTips's Fans

Coding like playing a piano.

Subscribe RSS

Search

Search

Sponsored

jQueryTips on Social

Followers

hide
Chainnnn Pang25441 Dexteri@n Ton KanexKane Supachai JustDoIt Rut petchy Tophit anndrew Webmaster

Categories

hide
  • Programing
  • Database
  • Framework
  • Mobile Development
    • Titanium Mobile
    • PhoneGap
  • Life

Tag Cloud

hide
PHP JavaScript MySQL XML Mobile jQuery CodeIgniter Hash php xml Debug Library Zend API Events Plugins Facebook Basic Registration Tool Twitter Search Swath Performance ffmpeg YouTube Web Service Yahoo! NoSQL MongoDB PhoneGap

Recent Posts

hide
  • ใครๆ ก็มี Utils เอางี้เราเพิ่ม Utils ให้กับ CodeIgniter กันบ้าง
  • แนะนำ JS.Class (A JavaScript class library)
  • PHP กับ OOP มาปูพื้นฐานกันเสียใหม่ก่อน
  • ประกาศข่าวสารจาก Admin
  • JSFIDDLE สุดยอด Tools สำหรับการ Debug การเขียนตัวอย่างโคด
  • Titanium Mobile + HTML + Native Scrolling
  • HTML to PDF ตัวไหนดี วันนี้ผมมีคำตอบ ...
  • ทำความรู้จักกับ JavaScript Pattern ในเชิงลึก
  • ผมบอกคุณแล้ว .... คนโง่ก็ Code ได้
  • วันนี้ มาออกแบบ Web Service ด้วย PHP กันเถอะ (CodeIgniter Version)

Recent Comments

hide
  • เยดดดด
  • มีตัวอย่าง CI แบบ เพียว ๆ ไหมครับ
  • ขอบคุณมากครับ เห็นแนวทางได้ชัดขึ้นจากตอนแรก ที่งงไปหมด ไม่รู้อะไรเป็นอะไร
  • ขอบคุณมากเลยครับท่าน....แหม่เพิ่มกำลังใจให้ผมได้เยอะเลย ตอนนี้กำลังฝึกงานอยู่ที่แห่งนึงในหาดใหญ่ พร้อมเด็กจากอีกสถาบันนึง 3 คน เราคิดว่าเรา…
  • Very good blog, I really like ~

Links

hide
  • OSCOOL
  • Architeture & Performance
  • Video and TV
  • Appcelerator
  • PhoneGap
  • Home
  •  » Blogs

Codeigniter validate file before submitting

Jul 12, 2009 10:55:30 PM | 2 Comments | in Framework | CodeIgniter
หายไปนานโครตๆ เลย ยังไม่ได้ตายไปกับหวัด 2009 นะครับ แต่ช่วงนี้มันมีนู่นมีนี่ตลอดเลย ตอนนี้ก็ยังไม่เสร็จ แต่กลัวจะโดนลืมไปซะก่อน เลยขอแวะมาอัพเดท กันสั่งบทความ วันนี้ขอเป็นเรื่อง CI แล้วกันนะครับ

ไม่รู้คนอื่นจะเคยเจอปัญหาแบบเดียวกับผมรึเปล่า คือว่า ผมอยากจะ validate file ก่อน แล้วค่อย submit ไม่ใช่ submit แล้วค่อยมานั่งตรวจทาน กัน แบบนี้มันไม่ประทับใจ ผมก็เลยลองหาวิธีที่คอื่นเค้าใช้แก้กัน ก็ได้มา 2-3 วิธี แต่ลองๆไปแล้ว มันก็ยังไม่ใช่ที่อยากได้อยู่ดี เลยเอาไอ้ที่หาๆ มา ยำๆ กันจนได้เป็นวิธีของตัวเองซึ่งผมคิดว่า Work More เลยเอามาให้ลองกันดูนี่แหละ

เป็นวิธี extends form_validation ของ CI ครับ มาเพิ่ม method ของตัวเองเข้าไป เรามาเริ่มที่ตรงนี้กันก่อนเลยละกัน

1. extends form_validation
Path: application/libraries/MY_Form_validation.php


<?php  if ( ! defined(‘BASEPATH’)) exit(‘No direct script access allowed’);
class MY_Form_validation extends CI_Form_validation {
 
        function required_file($str)
        {
                if (!isset($_FILES[$str])) return FALSE;
                if ($_FILES[$str][’size’] == 0)
                {
                        return FALSE;
                }
                return TRUE;
        }
 
        function valid_file_types($str, $vals)
        {
                if (!isset($_FILES[$str])) return FALSE;
                if (isset($_FILES[$str]) AND $_FILES[$str][’size’] > 0)
                {
                        $allowed_types = explode(‘,’, $vals);
                        require_once(APPPATH.‘config/mimes’.EXT);
                        foreach ($allowed_types as $ext)
                        {
                                $ext = trim(strtolower($ext));
                                $mime = $mimes[$ext];
                                if (is_array($mime))
                                {
                                        foreach ($mime as $m)
                                        {
                                                $allows[] = $m;
                                        }
                                }
                                else
                                {
                                        $allows[] = $mime;
                                }
                        }
                        $file_info = getimagesize($_FILES[$str][‘tmp_name’]);
                        $file_mime = $file_info[‘mime’];
 
                        if (!in_array($file_mime, $allows))
                        {
                                return FALSE;
                        }
                }
                return TRUE;
        }
 
}
?>


ส่วนนี้ผมเพิ่ม method เข้าไป 2 ตัว คือ require_file, valid_file_types นะครับ (ขอไม่อธิบายการทำงานของโคด ลองแกะดูนะ นิดเดียวเอง)

2. ที่ language ผมจะเพิ่ม ส่วนของ method ใหม่ผมด้วย
Path: application/language/th/form_validation_lang.php


<?php
#### Old Code ####
/* ——— Extended ———-*/
$lang[‘required_file’] = "%s bla bla bla";
$lang[‘valid_file_types’] = "%s %s bla bla bla";
?>
 

ตรงส่วนภาษานี่ของคนอื่นอาจจะอยู่ใน system/language/en/form_validation_lang.php ก็ได้นะครับ แต่พอดีผม copy มาให้มันอ่านที่ application หมดแล้ว


3. ที่ views ส่วนของ form
 

<form method="post" action="/path/form/save" multipart/form-data">
<div id="hidden_fields">
  <input type="hidden" name="file_checker" value="file_upload" />
</div>
<label><input type="file" name="file_upload" /></label>
<lable><input type="submit" value="upload" /></label>
</form>
 

สังเกตุดูดีๆ ผมจะมี hidden ไปตัวนึง โดย value ค่าชื่อของ input file นั่นเอง (เพราะว่า CI มันจะ validate แค่ $_POST)

4. ขั้นตอนการ validation


function some_method()
{
  $this->load->library(‘form_validation’);
  $this->form_validation->set_rules(‘file_checker’, ‘Form Name Here’, ‘required|required_file|valid_file_types[jpg,jpeg,gif,png]‘);
  if ($this->form_validation->run() == TRUE)
  {
     // do something for success case.
  }
  else
  {
    // do something for handler errors
  }
}


สังเกตุอีกนิดนึงว่า ทำไม ต้องมีค่า required ให้กับ file_checker ด้วย ผมเอาไว้เผื่อในกรณีที่มีคนมือบอน เอา Firebug ไป Remove Element มันออกจะได้ ไม่ต้องผ่านกันไปเลย อิอิ
เท่านี้ก็จบแล้วครับ งาน validate ก่อน upload ของเรา ง่ายใช่มั้ยล่ะ

twitter stumbleupon delicious digg facebook

2 comments

Add comment Load previous All comments

Leave a comment

Post Comment

Powered by OSCOOL. You may view this on RSS or ATOM.

OSCOOL

  • Twitter
  • Facebook
  • Next