返回false将多条错误消息限制为一个?

时间:2016-02-14 22:49:05

标签: codeigniter

在我的多重上传库中,我有一个设置错误功能。

在我的上传功能中,我使用in_array来检查文件扩展名。如果in_array检测到错误,则会显示多条错误消息。

我遇到的问题是出于某种原因,当我在return FALSE;下使用$this->set_error('file_extension_not_allowed')时会显示一条消息。不确定为什么返回FALSE限制错误消息。

问题:如何使用我的返回false,但能够正确显示多条消息。

<?php

class Multiple_upload {

    public $set_errors = array();

    public function __construct($config = array()) {

        $this->CI =& get_instance();

        $this->files = $this->clean($_FILES);

        empty($config) OR $this->set_config($config);

    }

    public function set_config($config) {
        foreach ($config as $key => $value) {
            $this->$key = $value;
        }

        return $this;
    }

    public function upload($field = 'userfile') {

        $allowed_extension = explode('|', $this->allowed_types);

        if (empty($this->upload_path)) {
            $this->set_error('upload_path_not_set', 'upload_path_check');
            return FALSE;
        } 

        if (!realpath(FCPATH . $this->upload_path)) {
            $this->set_error('upload_path_in_correct', 'location_check');
            return FALSE;
        } 

        if (!empty($this->files[$field]['name'][0])) {

            foreach ($this->files[$field]['name'] as $key => $value) {

                $this->file_name = $this->files[$field]['name'][$key];

                $get_file_extension = explode('.', $this->files[$field]['name'][$key]);
                $this->get_file_extension_end = strtolower(end($get_file_extension));

                $array_1 = array(
                    $allowed_extension,
                );

                $array_2 = array(
                    $get_file_extension[1],
                );

                if (!in_array($array_2, $array_1)) {

                    $this->set_error('file_extension_not_allowed', 'extension_check');

                    return FALSE;
                }

            }

            return $this;

        }
    }

    public function set_error($message, $type) {

        $this->CI->lang->load('upload', 'english');

        $this->error_message[] = $this->CI->lang->line($message);

        return $this;
    }

    public function display_error_messages($open_tag = '<p>', $close_tag = '</p>') {

        foreach($this->error_message as $msg) {
           var_dump($msg);
        }

    }

    public function clean($data) {
        if (is_array($data)) {
            foreach ($data as $key => $value) {
                unset($data[$key]);

                $data[$this->clean($key)] = $this->clean($value);
            }
        } else {
            $data = htmlspecialchars($data, ENT_COMPAT, 'UTF-8');
        }

        return $data;
    }
}

1 个答案:

答案 0 :(得分:1)

也许这可以帮助......

public function upload($field = 'userfile') 
{
    $allowed_extension = explode('|', $this->allowed_types);

    if (empty($this->upload_path)) 
    {
        $this->set_error('upload_path_not_set', 'upload_path_check');
        return FALSE;
    } 

    if (!realpath(FCPATH . $this->upload_path)) 
    {
        $this->set_error('upload_path_in_correct', 'location_check');
        return FALSE;
    } 

    if (!empty($this->files[$field]['name'][0])) 
    {
        $check_error = 0;//added this
        foreach ($this->files[$field]['name'] as $key => $value) 
        {
            $this->file_name = $this->files[$field]['name'][$key];
            $get_file_extension = explode('.', $this->files[$field]['name'][$key]);
            $this->get_file_extension_end = strtolower(end($get_file_extension));


            $array_1 = array(
                $allowed_extension,
            );

            $array_2 = array(
                $get_file_extension[1],
            );

            if (!in_array($array_2, $array_1)) 
            {
                $this->set_error('file_extension_not_allowed', 'extension_check');
                $check_error++;
            }
        }
        if($check_error > 0 )
        {
            return FALSE;
        }
        return $this;
    }
}