codeigniter 相关问题

CodeIgniter是由EllisLab公司创建的开源PHP Web开发框架,它已被不列颠哥伦比亚理工学院采用。该框架实现了Model-View-Controller设计模式的修改版本。有关CodeIgniter类,方法,函数,语法和用法的问题,请使用此标记。

使用相同的输入在 codeigniter 中上传多个图像

浏览量 观点 <form action="" method="POST" enctype="multipart/form-data"> <input type="file" name="userfile[]" size="40" multiple/> <input type="submit" name="submit" value="Upload"> </form> 控制器 public function image() { $data['error'] = ''; $this->load->model('StackM'); if(isset($_POST['submit'])) { $data['update_pass_error_msg'] = $this->StackM->add_multiple_image(); } $this->load->view('stack_view'); } Model public function add_multiple_image(){ if((!empty($_FILES['f2']['name']))) { $config['upload_path'] = 'uploads/'; $config['allowed_types'] = 'gif|jpg|png|jpeg'; $files = $_FILES; if ($files['f2']['name'][0] == '' ) { # code... return "Select a file to upload"; } else { $mum_files = count($files['f2']); for($i=0; $i<$mum_files; $i++) { if ( isset($files['f2']['name'][$i]) ) { $config['file_name'] = time().'-'.$files['f2']['name'][$i]; $this->load->library('upload', $config); $_FILES['f2']['name']= $files['f2']['name']["$i"]; $_FILES['f2']['type']= $files['f2']['type']["$i"]; $_FILES['f2']['tmp_name']= $files['f2']['tmp_name']["$i"]; $_FILES['f2']['error']= $files['f2']['error']["$i"]; $_FILES['f2']['size']= $files['f2']['size']["$i"]; $filename = rand().'-'.$_FILES['f2']['name']; if (!empty($this->upload->do_upload('f2'))) { $dataInfo[] = $this->upload->data(); $all_imgs = ''; if ( count($dataInfo) > 0) { # code... foreach ($dataInfo as $info) { # code... $all_imgs .= $info['file_name']; $all_imgs .= ','; } } } } } } } else{ $all_imgs = ""; } } } else{ $all_imgs = $this->session->userdata('image'); } $this->db->insert('table_name', $all_imgs); 我在这段代码中面临的问题是,假设我添加 7 个图像,但它在数据库中只显示 5 个图像,那么它不会超过 5 个,而且我想知道在编辑表单时是否不想这样做更改图像,然后它应该保持相同的图像,因此我已将旧图像存储在会话中,并检查它是否为空,然后只有它应该是会话变量。 但是在我的代码中,如果我不会上传新的图像,如果我保留旧图像,那么它将保存空白 为了避免偏移错误,在 for 循环内部,您需要检查该数组索引是否已设置: 这里我有一个在CodeIgniter中上传多个文件的演示代码: 视图/stack_view.php <?php if ($this->session->flashdata('status')) { ?> <h5><?=$this->session->flashdata('status')?>: <?=$this->session->flashdata('message')?></h5> <?php } ?> <?=form_open_multipart('stack', array('id' => 'my_id'))?> <input type="file" name="userfile[]" size="40" multiple/> <input type="submit" name="submit" value="Upload"> <?=form_close()?> 控制器/Stack.php <?php defined('BASEPATH') OR exit('No direct script access allowed'); class Stack extends CI_Controller { public function __construct() { parent::__construct(); $this->load->library('session'); $this->load->helper(array('form', 'url')); } public function index() { if ($this->input->post('submit')) { $config['upload_path'] = './uploads/'; $config['allowed_types'] = 'gif|jpg|png|jpeg'; $files = $_FILES; if ($files['userfile']['name'][0] == '' ) { # code... $this->session->set_flashdata('status', 'error'); $this->session->set_flashdata('message', "Select a file to upload"); } else { $mum_files = count($files['userfile']); $dataInfo = array(); for($i=0; $i<$mum_files; $i++) { if ( isset($files['userfile']['name'][$i]) ) { $config['file_name'] = time().'-'.$files['userfile']['name'][$i]; $this->load->library('upload', $config); $_FILES['userfile']['name']= $files['userfile']['name']["$i"]; $_FILES['userfile']['type']= $files['userfile']['type']["$i"]; $_FILES['userfile']['tmp_name']= $files['userfile']['tmp_name']["$i"]; $_FILES['userfile']['error']= $files['userfile']['error']["$i"]; $_FILES['userfile']['size']= $files['userfile']['size']["$i"]; $filename = rand().'-'.$_FILES['userfile']['name']; if ( ! $this->upload->do_upload('userfile')) { $error_message = $this->upload->display_errors(); $this->session->set_flashdata('status', 'error'); $this->session->set_flashdata('message', "$error_message"); } else { //$data = array('upload_data' => $this->upload->data()); $this->session->set_flashdata('status', 'success'); $this->session->set_flashdata('message', "Files upload is success"); } $dataInfo[] = $this->upload->data(); //all the info about the uploaded files are stored in this array } } //here you can insert all the info about uploaded file into database using $dataInfo $all_imgs = ''; if ( count($dataInfo) > 0) { # code... foreach ($dataInfo as $info) { # code... $all_imgs .= $info['file_name']; $all_imgs .= ','; } } $insert_data = array( 'your_column_name' => rtrim($all_imgs,",") ); $this->db->insert('your_table_name', $insert_data); } } $this->load->view('stack_view'); } } 尝试这个脚本,我希望你能从中得到一些帮助。 这是工作脚本尝试上传它 公共函数上传() { $this->load->library('session'); if ( ! empty($_FILES)) { $config['upload_path'] = "assets/uploads/"; $config['allowed_types'] = 'jpg|png|jpeg'; $config['max_size'] = 5120; //limit only 5 Mb $this->load->library('upload'); $files = $_FILES;; $number_of_files = count($_FILES['files']['name']); $errors = 0; $myname = $this->input->post('ad_title'); for ($i = 0; $i < $number_of_files; $i++) { //$randVal = rand(450,4550).time('d-y-m'); $filename = basename($files['files']['name'][$i]); $extension = pathinfo($filename, PATHINFO_EXTENSION); $new = md5($filename.''.time('d-y-m')).'.'.$extension; $_FILES['files']['name'] = $new; //$files['files']['name'][$i]; $_FILES['files']['type'] = $files['files']['type'][$i]; $_FILES['files']['tmp_name'] = $files['files']['tmp_name'][$i]; $_FILES['files']['error'] = $files['files']['error'][$i]; $_FILES['files']['size'] = $files['files']['size'][$i]; $image = array('upload_data' => $this->upload->data()); $image_name = $_FILES['files']['name']; $ip = $this->input->ip_address(); $this->session->set_userdata("userIP",$ip); //$this->session->unset_userdata("userIP"); $Dval = array( "filename" => $image_name, "ip" => $this->input->ip_address() ); $this->member_model->tmp_image($Dval); $this->upload->initialize($config); if ( $this->upload->do_upload("files")) { $errors++; $data = $this->upload->data(); echo json_encode($data['file_name']); //code is for thumbnail and watermark on images //$this->watermark($data['full_path']); //$myPathfT = $config1['upload_path'] = "./assets/thumbs/".$aDir; //mkdir($myPathfT);b $config1 = array(); $config1['image_library'] = 'gd2'; $config1['source_image'] = $data['full_path']; $config1['new_image'] = 'assets/uploads/thumbs/'; $config1['create_thumb'] = false; $config1['quality'] = 50; $config1['height'] = 150; $config1['width'] = 150; $this->load->library('image_lib',$config1); $this->image_lib->initialize($config1); $this->image_lib->resize(); $this->image_lib->clear(); } } if ($errors > 0) { //echo "Data Transferred"; } } elseif ($this->input->post('file_to_remove')) { $aDir = $this->session->userdata('Dir'); $file_to_remove = $this->input->post('file_to_remove'); unlink("./assets/mainFilesData/$aDir/" . $file_to_remove); $array = $this->session->userdata('photo'); $dataF = array_diff($array, array($file_to_remove)); $this->session->set_userdata('photo',$dataF); } else { $this->listFiles(); } }

回答 2 投票 0

CodeIgniter 并显示图像/上传图像

我正在开发一个画廊,如果文件夹中没有图像,应该会显示“请上传图像”,但旁边还显示已上传的图像,但这些东西无法正常工作...

回答 1 投票 0

根据验证(名称和密码)动态更改输入字段类

我正在 CodeIgniter 中处理一个表单,我想根据名称和密码字段的验证状态动态更改输入字段类。我的问题是当我提交有效的 n...

回答 1 投票 0

CI4 - 添加 enctype="multipart/form-data" 阻止我的验证消息显示

这是我的html [create.php] 的代码 (请忽略其中的“Sampul”输入,因为它是在 enctype="multipart/form-data" 之后添加的) ... 这是我的 html [create.php] 的代码 (请忽略其中的“Sampul”输入,因为它是在 enctype="multipart/form-data" 之后添加的) <div class="container"> <div class="row"> <div class="col-8"> <h2 class="my-3">Form Tambah Data Komik</h2> <!-- my itu margin sumbu y (vertikal) --> <?php if (session()->getFlashdata('_ci_validation_errors')) : ?> <div class="alert alert-danger"> <ul> <?php foreach (session()->getFlashdata('_ci_validation_errors') as $error) : ?> <li><?= $error ?></li> <?php endforeach ?> </ul> </div> <?php endif ?> <form action="/komik/save" method="post" enctype="multipart/form-data"> <?= csrf_field(); ?> <!-- csrf menjaga supaya form cuma bisa diinput lewat halaman ini saja --> <div class="row mb-3"> <label for="judul" class="col-sm-2 col-form-label">Judul</label> <div class="col-sm-10"> <input type="text" class="form-control <?= $validation->hasError('judul') ? 'is-invalid' : ''; ?>" id="judul" name="judul" autofocus value="<?= old('judul'); ?>"> <!-- autofocus bikin ketika masuk ke page langsung aktif seperti habis di klik --> <div id="validationServer03Feedback" class="invalid-feedback"> <?= $validation->getError('judul'); ?> </div> </div> </div> <div class="row mb-3"> <label for="penulis" class="col-sm-2 col-form-label">Penulis</label> <div class="col-sm-10"> <input type="text" class="form-control <?= $validation->hasError('penulis') ? 'is-invalid' : ''; ?>" id="penulis" name="penulis" value="<?= old('penulis'); ?>"> <div id="validationServer03Feedback" class="invalid-feedback"> <?= $validation->getError('penulis'); ?> </div> </div> </div> <div class="row mb-3"> <label for="penerbit" class="col-sm-2 col-form-label">Penerbit</label> <div class="col-sm-10"> <input type="text" class="form-control" id="penerbit" name="penerbit" value="<?= old('penerbit'); ?>"> </div> </div> <div class="row mb-3"> <label for="sampul" class="col-sm-2 col-form-label">Sampul</label> <div class="col-sm-10"> <div class="mb-3"> <input class="form-control <?= $validation->hasError('sampul') ? 'is-invalid' : ''; ?>" type="file" id="sampul" name="sampul"> <div id="validationServer03Feedback" class="invalid-feedback"> <?= $validation->getError('sampul'); ?> </div> </div> </div> </div> <button type="submit" class="btn btn-primary">Tambah Data</button> </form> </div> </div> </div> 它之前运行良好,正确显示错误消息并在输入中的类内显示“is-invalid”,但是在表单内添加 enctype="multipart/form-data" 后,所有验证都放在里面html 刚刚停止工作(包括旧的用于在验证失败时回调值)。 这是用于此的控制器 获取create.php中的函数 public function create() { // session(); //session tidak perlu dipanggil karena kita sudah pasang manual session() dalam BaseController.php $data = [ 'title' => 'Form Tambah Data Komik', // 'validation' => \Config\Services::validation() 'validation' => session()->getFlashdata('validation') ?? \Config\Services::validation() ]; return view('komik/create', $data); } 这个是保存表单数据的函数(验证失败则返回create.php) public function save() { //validasi input if (!$this->validate([ 'judul' => [ 'rules' => 'required|is_unique[komik.judul]', 'errors' => [ 'required' => '{field} komik harus diisi.', 'is_unique' => '{field} komik sudah terdaftar' ] ], 'penulis' => [ 'rules' => 'required', 'errors' => [ 'required' => '{field} komik harus diisi.' ] ], 'sampul' => [ 'rules' => 'uploaded[sampul]|max_size[sampul,1024]|is_image[sampul]|mime_in[sampul,image/jpg,image/jpeg,image/png]', 'errors' => [ 'uploaded' => 'Pilih gambar sampul terlebih dahulu', 'max_size' => 'Ukuran gambar terlalu besar', 'is_image' => 'Yang anda pilih bukan gambar', 'mime_in' => 'Yang anda pilih bukan gambar', ] ] ])) { //kalo gagal validasi dia jalankan line ini session()->setFlashdata('validation', \Config\Services::validation()); //dari comment YT, bisa jalan return redirect()->to('/komik/create')->withInput(); } $slug = url_title($this->request->getVar('judul'), '-', true); $this->komikModel->save([ 'judul' => $this->request->getVar('judul'), 'slug' => $slug, 'penulis' => $this->request->getVar('penulis'), 'penerbit' => $this->request->getVar('penerbit'), 'sampul' => $this->request->getVar('sampul') ]); session()->setFlashdata('pesan', 'Data berhasil ditambahkan.'); return redirect()->to('/komik'); } 控制器内的验证系统工作正常,但所有错误消息、“无效”和旧的都停止显示。 我只是不明白为什么错误消息根本不再显示在 html 中。 enctype="multipart/form-data" 对这段代码有何影响?谁能给我一个解决方案来解决这个问题? 这个错误你解决了吗? 我也有同样的问题。 谢谢你。

回答 1 投票 0

php-activerecord 无法在 PHP 8.2 中与 Codeignitor 配合使用

我们使用 PHP ActiveRecord ORM 作为查询构建器开发了一个 CodeIgniter 应用程序,该应用程序在 AWS 服务器上的 Docker 容器中运行。 我们最近从版本 8 升级了 PHP...

回答 1 投票 0

Codeigniter 4 - MySQL 重复条目异常不起作用

我正在使用 Codeigniter v4.4.5 并努力捕获 MySQL 重复条目异常。如果有任何重复的值,那么我想在我的控制器中处理,以便我可以发送相关消息......

回答 1 投票 0

对于 codeigniter 来说,哪一个是最好的 PHP ORM? [已关闭]

这将是 codeigniter 框架的最佳 ORM。我看到了一些类似的问题,但它太旧了,链接不起作用。谁能帮我解决这个问题吗?

回答 2 投票 0

如何使用公共功能登出

我使用下面的代码注销,我不知道如何使用公共函数注销,如何使用按钮模式和使用函数注销,这是我来自login.php的函数 我使用下面的代码注销,我不知道如何使用公共函数注销,如何使用按钮模式和使用函数注销,这是我来自login.php的函数 <?php if (!defined('BASEPATH')) exit('No direct script access allowed'); class Login extends CI_Controller { //this function will do the login process function __construct() { parent::__construct(); $this->load->library('session'); } function index() { $this->load->library('session'); if ($this->session->username != NULL) { redirect('index.php/report/dashboard_ch'); } else { $this->load->view('login'); } } function do_login() { $this->load->library('session'); $this->load->model('M_login'); $username = $this->input->post('username'); $password = $this->input->post('password'); $dataLogin = false; if ($username === "dimasdev") { $dataLogin = $this->M_login->web_login_hashed($username, $password); } else { $dataLogin = $this->M_login->web_login($username, $password); } if (!$dataLogin) { $res['msg'] = "Invalid username or password"; $res['status'] = false; echo json_encode($res); exit(); } $this->session->set_userdata($dataLogin); $res['msg'] = "Login Success"; $res['dataLoginUsername'] = $dataLogin['username']; $res['status'] = true; echo json_encode($res); } public function logout() { $this->session->sess_destroy(); // Destroy the session $res['msg'] = "Logout Success"; $res['status'] = true; echo json_encode($res); } } 这是我从导航栏注销的模式,我使用按钮注销,但我不知道如何注销 <div class="modal fade" id="logoutModal" tabindex="-1" aria-labelledby="logoutModalLabel" aria-hidden="true"> <div class="modal-dialog" role="document"> <div class="modal-content"> <div class="modal-header"> <h5 class="modal-title" id="logoutModalLabel">Are you sure you want to log out?</h5> </div> <div class="modal-footer"> <div class="col s2" style="float: center"> <button class="btn btn-danger" href="<?php echo base_url(); ?>index.php/login/logout" class="col s6 modal-close waves-effect waves-green btn-flat yes">OK</button> </div> <div class="col s2" style="float: center"> <button class="btn btn-secondary" data-bs-dismiss="modal" class="col s6 modal-close waves-effect waves-green btn-flat no">Cancel</button> </div> </div> </div> </div> </div> 我使用 vuexy html 框架构建此代码 你能帮忙吗? 只是一个小 HTML 错误。 <a href="URL">LABEL</a> 按钮没有 href 属性,如果您想使用按钮,只需将其用作 LABEL <a href="URL"><button></button></a> 对于你的情况 <div class="col s2" style="float: center"> <a href="<?php echo base_url() . "index.php/login/logout"; ?>"> <button class="btn btn-danger" class="col s6 modal-close waves-effect waves-green btn-flat yes">OK</button> </a> </div>

回答 1 投票 0

带有 hmvc 的 CodeIgniter 4

我正在尝试在 CodeIgniter 4 中使用 HMVC。我之前使用过它,但在版本 3.10 中。我找不到 CI4 的 HMVC 插件。 有人可以帮助我吗?谢谢。 我想使用电子模块...

回答 1 投票 0

Codeigniter Pagination 3.0.4 排序目录和文件

我有一个带有 codeIgniter 3.0.4 分页库的工作文件管理器。 我试图确保它在分页中首先显示目录,然后显示文件。 目前是 codeigniter

回答 1 投票 0

选择选定的CHECKBOX并将选定的行插入数据库

我想将我的问卷答案输入数据库 我在数据库中有这样的表(示例): |编号 |问题|答案| +----+--------------+--------+ | 11 | 11吃晚饭? | 1 | | 1...

回答 2 投票 0

codeigniter上传图片代码url错误

这是关于 codeigniter 图像上传和图像处理的第 9 天 http://net.tutsplus.com/tutorials/php/codeigniter-from-scratch-file-uploading-and-image-manipulation/ 这段代码不是

回答 1 投票 0

如何在CI4中自动加载用户定义的类?

我想从 CI4 的本机 \Config\Constants.php 中获取用户定义的常量文件 我想写一个类: 公共类用户常量{ 常量 YEAR = 2024; 常量 MAX ...

回答 1 投票 0

获取 array_merge 和 array_unique 的 php 错误

下面是我尝试唯一/合并的数组和代码 $data['default_new'] = array_unique(array_merge($data['default'], $data['related'])) 大批 ( [0] => 数组 ( [

回答 3 投票 0

将子数组压入同一个数组

我正在尝试将一个数组的内容放入同一个数组中。这里我有一个数组 $mclass,其值例如 大批 ( [0] => stdClass 对象 ( [房间ID] => 1,3,5 [日]=&g...

回答 2 投票 0

消息:使用 foreach 时为 foreach() 提供的参数无效

我在使用foreach时遇到问题,错误代码如下 每次都会遇到 PHP 错误:警告 消息:为 foreach() 提供的参数无效 这是代码...

回答 1 投票 0

onbeforeunload 在 codeigniter 中不起作用

我有非常简单的代码,只是在页面刷新之前显示警告。该代码使用Codeigniter作为框架(不确定Codeigniter是否与该问题相关)。我有一个视图文件(test_v.php)...

回答 2 投票 0

带有 hmvc 的 Codeigniter 4

我正在尝试在codeigniter 4中使用hmvc,我曾经使用过它,但是在3.10版本中,目前我找不到带有hmvc的插件,有人可以帮助我吗?谢谢。 我想使用模块...

回答 1 投票 0

Code Igniter 使用 sql server 2008 进行分页

我正在使用 CI 分页助手和我的 SQL Server 2008 数据库。 我在模型上的函数是: 函数 get_data($limit, $offset) { $billing_db = $this -> 加载 -> 数据库('billing'...

回答 1 投票 0

在 PHPUnit (CIUnit) 中使用 YAML 文件作为数据提供者

我正在使用 PHP CodeIgniter 框架编写一个应用程序。我正在尝试使用 CI_Unit(扩展名为 PHPUnit)来测试应用程序。为了测试模型,我尝试将 YAML 数据提供程序加载为

回答 2 投票 0

© www.soinside.com 2019 - 2024. All rights reserved.