Welcome Guest, Not a member yet? Register   Sign In
Input = file validation on multipart form
#6

[eluser]Unknown[/eluser]
Hello, here is my solution for file field validation :

In Form_validation.php file, add this in the function run()

Code:
function run($group = '')
    {
        // Do we even have any data to process?  Mm?
        if (count($_POST) == 0)
        {
            return FALSE;
        }
        
        // Does the _field_data array containing the validation rules exist?
        // If not, we look to see if they were assigned via a config file
        if (count($this->_field_data) == 0)
        {
            // No validation rules?  We're done...
            if (count($this->_config_rules) == 0)
            {
                return FALSE;
            }
            
            // Is there a validation rule for the particular URI being accessed?
            $uri = ($group == '') ? trim($this->CI->uri->ruri_string(), '/') : $group;
            
            if ($uri != '' AND isset($this->_config_rules[$uri]))
            {
                $this->set_rules($this->_config_rules[$uri]);
            }
            else
            {
                $this->set_rules($this->_config_rules);
            }
    
            // We're we able to set the rules correctly?
            if (count($this->_field_data) == 0)
            {
                log_message('debug', "Unable to find validation rules");
                return FALSE;
            }
        }
    
        // Load the language file containing error messages
        $this->CI->lang->load('form_validation');
                            
        // Cycle through the rules for each field, match the
        // corresponding $_POST item and test for errors
        
        
        
        foreach ($this->_field_data as $field => $row)
        {
            // Fetch the data from the corresponding $_POST array and cache it in the _field_data array.
            // Depending on whether the field name is an array or a string will determine where we get it from.
            
            if ($row['is_array'] == TRUE)
            {
                $this->_field_data[$field]['postdata'] = $this->_reduce_array($_POST, $row['keys']);
            }
            else
            {
                if ( (isset($_POST[$field]) AND $_POST[$field] != ""))
                {
                    $this->_field_data[$field]['postdata'] = $_POST[$field];
                }
                elseif (isset($_FILES[$field]) AND $_FILES[$field] != "")             //
                {                                                                     // Add this
                    $this->_field_data[$field]['postdata'] = $_FILES[$field]['name']; // Get the file name
                }                                                                     //
            }
        
            $this->_execute($row, explode('|', $row['rules']), $this->_field_data[$field]['postdata']);        
        }

        // Did we end up with any errors?
        $total_errors = count($this->_error_array);

        if ($total_errors > 0)
        {
            $this->_safe_form_data = TRUE;
        }

        // Now we need to re-set the POST data with the new, processed data
        $this->_reset_post_array();
        
        // No errors, validation passes!
        if ($total_errors == 0)
        {
            return TRUE;
        }

        // Validation fails
        return FALSE;
    }

Then you can create your own rule, extending the form validation class, for exemple :

Code:
<?php  if ( ! defined('BASEPATH')) exit('No direct script access allowed');

class MY_Form_validation extends CI_Form_validation {
    
    
    /*
     *
     * Validation on filename only
     *
     */
    
    function is_image($str)
    {
        if ($str == '')
        {
            return;
        }
        
        $a = explode(".", $_FILES['image']['name']);
        $a = array_reverse($a);
        $ext = strtolower($a[0]);
        
        $autorise = array('jpg', 'png', 'gif', 'jpeg');
        
        return in_array($ext, $autorise) ? TRUE : FALSE;
    }

}

It work good for me.

Bye


Messages In This Thread
Input = file validation on multipart form - by El Forum - 04-24-2010, 08:56 AM
Input = file validation on multipart form - by El Forum - 04-24-2010, 12:10 PM
Input = file validation on multipart form - by El Forum - 04-25-2010, 02:55 PM
Input = file validation on multipart form - by El Forum - 04-25-2010, 08:16 PM
Input = file validation on multipart form - by El Forum - 04-26-2010, 12:25 AM
Input = file validation on multipart form - by El Forum - 04-29-2010, 11:00 AM



Theme © iAndrew 2016 - Forum software by © MyBB