如何在 Codeigniter 3 中上传时显示不允许的文件类型错误消息?

2024-06-28

我正在做一个基本的工作博客应用程序 https://github.com/Ajax30/lightblog with 代码点火器 3.1.8 and 引导程序4.

当然,这些帖子有主要图片。有一个默认图像如果用户没有上传图像,但是如果有图像is已上传,有仅允许 3 种类型:jpg、jpeg 和 png。

为了警告用户以防她/他尝试上传其他文件格式,我在Posts控制器:

// Upload image
$config['upload_path'] = './assets/img/posts';
$config['allowed_types'] = 'jpg|jpeg|png';
$config['max_size'] = '2048';

$this->load->library('upload', $config);

if(!$this->upload->do_upload()){

    $data['uerrors'] = $this->upload->display_errors();

    if ($data['uerrors']) {
        $this->load->view('partials/header', $data);
        $this->load->view('dashboard/create-post');
        $this->load->view('partials/footer');
    } else {
        $post_image = 'default.jpg';
    }

} else {
    $data = array('upload_data' => $this->upload->data());
    $post_image = $_FILES['userfile']['name'];
}

在我看来:

<?php foreach ($uerrors as $uerror): ?>
  <span><?php echo $uerror; ?></span>
<?php endforeach; ?>

然而,我得到了未定义的变量:uerrors error.

这是整个create() method:

public function create() {

    // Only logged in users can create posts
    if (!$this->session->userdata('is_logged_in')) {
        redirect('login');
    }

    $data = $this->get_data();
    $data['tagline'] = "Add New Post";

    if ($data['categories']) {
        foreach ($data['categories'] as &$category) {
            $category->posts_count = $this->Posts_model->count_posts_in_category($category->id);
        }
    }

    $this->form_validation->set_rules('title', 'Title', 'required');
    $this->form_validation->set_rules('desc', 'Short description', 'required');
    $this->form_validation->set_rules('body', 'Body', 'required');
    $this->form_validation->set_error_delimiters('<p class="error-message">', '</p>');

    if($this->form_validation->run() === FALSE){
        $this->load->view('partials/header', $data);
        $this->load->view('dashboard/create-post');
        $this->load->view('partials/footer');
    } else {
        // Create slug (from title)
        $slug = url_title(convert_accented_characters($this->input->post('title')), 'dash', TRUE);
        $slugcount = $this->Posts_model->slug_count($slug, null);
        if ($slugcount > 0) {
            $slug = $slug."-".$slugcount;
        }

        // Upload image
        $config['upload_path'] = './assets/img/posts';
        $config['allowed_types'] = 'jpg|jpeg|png';
        $config['max_size'] = '2048';

        $this->load->library('upload', $config);

        if(!$this->upload->do_upload()){

            $data['uerrors'] = $this->upload->display_errors();

            if ($data['uerrors']) {
                $this->load->view('partials/header', $data);
                $this->load->view('dashboard/create-post');
                $this->load->view('partials/footer');
            } else {
                $post_image = 'default.jpg';
            }

        } else {
            $data = array('upload_data' => $this->upload->data());
            $post_image = $_FILES['userfile']['name'];
        }

        $this->Posts_model->create_post($post_image, $slug);
        $this->session->set_flashdata('post_created', 'Your post has been created');
        redirect('/');
    }
} 

我的错误在哪里?


您的上传代码看起来没问题,但您需要更新以下更改。

  1. 将数据传递给您的'dashboard/create-post'查看您已通过的'partials/header'看法。你的'dashboard/create-post'view 没有收到任何上传错误消息,所以它说'Undefined variable: uerrors'。所以,你的上传代码应该是这样的 -
if(!$this->upload->do_upload()){
    $data['uerrors'] = $this->upload->display_errors();
    if ($data['uerrors']) {
        $this->load->view('partials/header', $data);
        $this->load->view('dashboard/create-post', $data);
        $this->load->view('partials/footer');
    } else {
        $post_image = 'default.jpg';
    }
} else {
    $post_image = $this->upload->data('file_name');
}
  1. As CodeIgniter 文档 https://codeigniter.com/user_guide/libraries/file_uploading.html#CI_Upload::display_errors说,“display_errors()”返回字符串,而不是数组,您不必循环遍历错误。只需在您的设备上回显即可'dashboard/create-post' view.

为了您的方便,请使用不同的方法创建上传任务,以便您也可以在更新方法中重复使用它。例如 -

private function uploadFile(){
    if ($_FILES['userfile']['name'] === '') {
        return array(
            'status' => TRUE,
            'message' => 'No file selected.',
            'file_name' => 'default.jpg'
        );
    }

    // Upload image
    $config['upload_path'] = './assets/img/posts';
    $config['allowed_types'] = 'jpg|jpeg|png';
    $config['max_size'] = '2048';

    $this->load->library('upload', $config);

    if(!$this->upload->do_upload('userfile')){
        return array(
            'status' => FALSE,
            'message' => $this->upload->display_errors('<p class="text-danger ">', '</p>'),
            'file_name' => ''
        );
    }else{
        return array(
            'status' => TRUE,
            'message' => 'File uploaded successfully',
            'file_name' => $this->upload->data('file_name')
        );
    }
}

那么你的整个创建方法应该是这样的 -

public function create() {
    // Only logged in users can create posts
    if (!$this->session->userdata('is_logged_in')) {
        redirect('login');
    }

    $data = $this->get_data();
    $data['tagline'] = "Add New Post";

    if ($data['categories']) {
        foreach ($data['categories'] as &$category) {
            $category->posts_count = $this->Posts_model->count_posts_in_category($category->id);
        }
    }

    $this->form_validation->set_rules('title', 'Title', 'required');
    $this->form_validation->set_rules('desc', 'Short description', 'required');
    $this->form_validation->set_rules('body', 'Body', 'required');
    $this->form_validation->set_error_delimiters('<p class="error-message">', '</p>');

    if($this->form_validation->run() === FALSE){
        $this->load->view('partials/header', $data);
        $this->load->view('dashboard/create-post');
        $this->load->view('partials/footer');
    } else {
        $upload = $this->uploadFile();

        if($upload['status'] === FALSE){
            $data['upload_error'] = $upload['message'];

            $this->load->view('partials/header', $data);
            $this->load->view('dashboard/create-post', $data);
            $this->load->view('partials/footer');
        }else{
            // Create slug (from title)
            $slug = url_title(convert_accented_characters($this->input->post('title')), 'dash', TRUE);
            $slugcount = $this->Posts_model->slug_count($slug, null);
            if ($slugcount > 0) {
                $slug = $slug."-".$slugcount;
            }

            $this->Posts_model->create_post($upload['file_name'], $slug);
            $this->session->set_flashdata('post_created', 'Your post has been created');
            redirect('/');
        }
    }
}

最后将这行代码添加到您的'dashboard/create-post'查看文件,位于文件输入按钮之后。

<?php if(isset($upload_error)) echo $upload_error; ?>

我认为一切都应该有效。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在 Codeigniter 3 中上传时显示不允许的文件类型错误消息? 的相关文章

  • 是否可以倒回 PDO 结果?

    我正在尝试为 PDO 语句的结果编写一个迭代器 但找不到任何回退到第一行的方法 我想避免调用 fetchAll 和存储所有结果数据的开销 first loop works fine foreach statement as result d
  • 将字符串中每个单词的第一个字符大写,“and”、“to”等除外

    如何使字符串中每个单词的第一个字符大写接受几个我不想转换的单词 例如 和 to 等 例如 我想要这个 ucwords art and design 输出下面的字符串 艺术与设计 有可能像 strip tags text p a 我们允许 并
  • 特殊字符和 URL 重写

    我目前正在开发一个应用程序 该应用程序从暴雪社区 API 中提取 JSON 数据并使用 PHP 对其进行解析 一切正常 直到我遇到一个名字中有特殊字符的角色 为了提取角色数据 我需要知道他们的角色名称和他们所在的领域 我将名称和领域通过 U
  • 是否有适用于 Java ME 或 BlackBerry 的电子邮件验证器代码?

    是否有一些适用于 Java ME 或 BlackBerry 的标准电子邮件验证器代码示例 public static boolean validateEmailID String email email email trim String
  • 禁用 php 文件缓存以进行调试

    我有一个安装了 zpanel 和 apache2 php mysql 的 vps 我正在为 php 网站开发一个小型后端 对于准备发布的网站来说情况是完美的 但现在我需要禁用缓存 php 文件的服务器功能以立即测试我的 php 文件的正确性
  • mysql数据库的“零知识”加密

    我一直在研究 Web 应用程序数据库层的加密 它使用MySQL 5 1 或更高版本 我记不清了 该应用程序由我的组织管理 为公共客户存储数据 最简单的选择是 AES ENCRYPT AES DECRYPT 如果坏人以某种方式访问 我的数据库
  • MySQL:删除包含特定参数且早于一天的行[关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我正在使用 mysql 为我的网站创建一个登录系统 它在基于订阅的系统上运行 如果参数 premium 等于 1 DAY 如果它早于一
  • 如何将这种奇怪的字符串解码为UTF-8? (PHP)

    所以我有 u041E u043B u0435 u0433 20 u042F u043A如何将其保存为真正的 UTF 8 或 对我来说更好的是 HTML 实体 这就是 JavaScriptescape 格式 它与 URL 编码类似 但不兼容
  • 如何循环并访问多维且关联的数组中的各个元素? PHP,JSON 或 XML

    我正在通过 API zotero org 检索书目数据 它与底部的示例类似 只是更复杂 示例是键入的 我想检索一条或多条记录并在页面上显示某些值 例如 我想循环遍历每个顶级记录并以格式良好的引文打印数据 暂时忽略正确的围兜样式 假设我只想为
  • Codeigniter Cart - 将数据保存在数据库中 - 如何处理?

    我需要帮助在我的网络应用程序中处理订单和购物车 我决定使用 Codeigniter 2 中内置的 Cart 库 我看过一些关于 Cart 库的教程 我知道如何使用它 但我不知道 我什么时候应该在数据库中创建 保存该订单 当用户将商品添加到购
  • Magento 开源 2.3 - CSS 和 JS 未加载

    I installed Magento 2 3 successfully but when type http localhost Magento2 http localhost Magento2 I get a blank page li
  • WordPress 中的多词搜索不显示搜索结果

    我自定义了一个主题 但在使用多词查询的搜索结果时遇到一些问题 网站上线时间为www aetterworldbydesign com http abetterworldbydesign com 搜索单个单词 http www abetterw
  • PHP 数组比较

    如何比较两个数组 例如我有array a b c and array a c b 当它们进行比较时 它会返回 true 但如果其中一个字母没有在其中之一中找到 它将返回 false 顺序并不重要 在比较之前 您需要将两个数组的内容调整为相同
  • YouTube API 观看私人视频

    我有一个具有草稿模式的网站 有人可以登录并查看该网站的外观 以便在公众看到该网站之前批准该网站 我在一个帐户上有一些 YouTube 视频 但我将其设为私人帐户 因为我不想让全世界看到它们 不过 我确实希望登录草稿模式的人能够观看私人嵌入内
  • 在 MySQL 数据库中存储大文件的更好方法?

    我有一个 PHP 脚本 您可以使用它上传非常大的文件 最大 500MB 并且该文件的内容存储在 MySQL 数据库中 目前我做这样的事情 mysql query INSERT INTO table VALUES uploadedfile f
  • 数组初始化中的正确缩进,PDT/Zend Studio

    我在代码中使用以下样式的数组初始化 a array one gt 123 two gt 456 但在这种情况下 PDT Zend Studio 无法正常工作 按 Return 键后 它将光标置于 a 下方 在我的示例中 并忽略缩进 如果数组
  • Active Record 库的 CodeIgniter 挂钩

    我需要一些帮助来理解 CodeIgniter 的钩子逻辑 以使代码适应我的需要 这一页 https www codeigniter com user guide general hooks html https www codeignite
  • UNION SELECT - 循环?还是单个查询?

    如果我使用 UNION 从数据库中进行多个 SELECT 是否被视为一个查询 或多个查询 SELECT column name s FROM table1 UNION SELECT column name s FROM table2 这是否
  • php 32位日期解析1901年12月13日之前的日期

    我很高兴使用strtotime http www php net manual en function strtotime php在我的开发机器上解析日期 其中一些日期是 1800 年代 一个极端的例子是 1500 年代 但我的开发机是64
  • php SimpleXML 属性丢失

    我这里有以下 xml 文档 编辑 示例见下文 我正在使用 php SimpleXML 将其转换为对象来读取它 xmlContent file get contents path test xml tablesRaw new SimpleXM

随机推荐

  • Doc2Vec:区分句子和文档

    我只是在玩弄 gensim 的 Doc2Vec 分析 stackexchange 转储来分析问题的语义相似性以识别重复项 教程关于Doc2Vec 教程 https rare technologies com doc2vec tutorial
  • 如何在textarea元素中添加新行?

    我想在文本区域中添加换行符 我尝试过 n and br 标签但不工作 您可以看到上面的 HTML 代码 你能帮我在文本区域中插入换行符吗
  • Flutter - SingleChildScrollView 在打开键盘时不会滚动到列底部

    我在应用程序的许多地方使用了 SingleChildScrollView 一切都很好 但是 在下面的场景中 当键盘弹出时 它无法滚动到列的底部 Future
  • WiX EmbeddedChainer 示例?

    With Windows安装程序 http en wikipedia org wiki Windows Installer4 5 添加了一个新表微星嵌入式链接器 http msdn microsoft com en us library w
  • 在hadoop中将文件作为单个记录读取

    我有很大的不 对于小文件 我想使用合并文件输入格式来合并文件 以便每个文件数据在我的 MR 作业中作为单个记录 我已关注http yaseminavulous blogspot in 2011 03 many small input fil
  • YouTube API Android 自动启动

    我在我的应用程序中使用 YouTube API 我的问题是 视频不会自动播放 用户必须按播放按钮才能开始播放 My code setContentView R layout playerview demo YouTubePlayerView
  • jQuery 仅验证远程 onblur,但允许 onkeyup 休息 [重复]

    这个问题在这里已经有答案了 我正在尝试进行 jquery 远程验证以查看名称是否唯一 但我不想对每个 onkekup 事件进行远程验证 但是我想在模糊事件上执行此操作 当用户离开文本框时 但使用我下面的当前代码 它会在按下第二个字符后启动
  • OpenCV 和 QT 之间的集成

    我对 QT 和 OpenCV 开发完全是新手 一般来说是 C 我想使用 OpenCV 开发一个应用程序并使用 Qt 创建其界面 我不明白的是 如何整合这两个部分 我的意思是 为了开发 java 我只使用 eclipse 它为我提供了 JFr
  • Maven 构建成功,但没有在 Selenium 中执行测试

    编辑 我已将项目上传到 github 供任何想查看的人使用https github com hfunsh test automation git https github com hfunsh test automation git 我使用
  • 如何在 ASP.net core 中为自定义模型绑定器编写单元测试

    我已经为属性编写了自定义模型绑定器 现在我正在尝试编写相同的单元测试 但无法为模型绑定器创建对象 谁能帮我 下面是我必须编写测试的代码 public class JourneyTypesModelBinder IModelBinder pu
  • IIS Express - Visual Studio - 在同一端口上运行多个站点

    我有多个使用同一端口 8888 的 API 这些 API 是不同解决方案的一部分 http localhost 8888 api1 http localhost 8888 api1 http localhost 8888 api2 http
  • Matplotlib动画无法保存

    我正在尝试学习如何使用创建 matplotlib 动画Jake Vanderplas 的基本示例 http jakevdp github io blog 2012 08 18 matplotlib animation tutorial 但我
  • MSBuild 发布 dotnet 核心应用程序

    我的设置是 我有一个解决方案 其中包含不同的 dotnet4 6 应用程序 服务 现在我们在此解决方案中添加了一个 dotnet core 项目 我可以构建和调试它 但这不会创建可执行文件 在 Visual Studio 中 我可以右键单击
  • Java EE 异常:名称 java:comp 未在此上下文中绑定

    我在 Netbeans 7 2 1 中有 Java EE 应用程序 尝试部署它 构建结束正常 我在 Tomcat 日志中收到错误 Caused by javax naming NameNotFoundException Name java
  • 在 C# 中解析 Json Rest api 响应[重复]

    这个问题在这里已经有答案了 我正在尝试使用 C 从 Rest api json 响应中提取值 我有以下代码 client BaseUrl https api cloud appcelerator com request Resource v
  • 在我的表单 Symfony2 中创建重复字段

    我正在开展一个大学项目 我想让所有学生都参加 我创建了一个包含 3 个字段的模型 即日期 当前 布尔值 和学生 ID 现在 当我尝试从中生成表单时 它只会显示这 3 个字段 但是我想要班上所有的学生 因此 我为学生创建了一个循环 并创建了一
  • 存储聊天消息和文件的最佳方式

    我想知道您对将聊天消息存储在数据库中有何看法 我需要能够将其他内容绑定到它们 例如文件或联系人 并且使用数据库是我目前看到的最佳方法 文件也有同样的问题 因为它们可以绑定到聊天消息 我也必须将它们存储在数据库中 对于数千条消息和文件 我想知
  • Meteor:RangeError:超出最大调用堆栈大小

    我收到以下错误 W20141210 18 14 54 394 5 5 STDERR W20141210 18 14 54 395 5 5 STDERR Users removed meteor packages meteor tool 1
  • 如何构建 FFMPEG 并将其链接到 iOS?

    all 我知道 这里有很多关于 iOS 上的 FFMPEG 的问题 但没有一个答案适合我的情况 当我尝试在项目中链接 FFMPEG 时 每种情况都会发生一些奇怪的情况 所以请帮助我 我的任务是为 iOS 编写视频聊天应用程序 该应用程序使用
  • 如何在 Codeigniter 3 中上传时显示不允许的文件类型错误消息?

    我正在做一个基本的工作博客应用程序 https github com Ajax30 lightblog with 代码点火器 3 1 8 and 引导程序4 当然 这些帖子有主要图片 有一个默认图像如果用户没有上传图像 但是如果有图像is已