CodeIgniter-使用表单上传文件

问题描述 投票:0回答:1

我已经有点绝望了,因为我正在CodeIgniter中编程一个项目,该项目是在线食品商店。问题是,当我必须创建产品时,我有一个要求管理员输入的表单,其中包含产品的名称,品牌,描述,价格,增值税,类别等,并且介于两者之间另一个字段是产品图像。好吧,当我填写该表格并将其提交时,产品被添加到数据库中,并且一切正常,除了产品图像未复制从我的硬盘驱动器到服务器文件夹。

我正在使用:PHP 7.3.9MySQL 5.7.26CodeIgniter 3.1.8

我放置了这种形式的代码(视图),我已经对其进行了很多次更改,以至于必须有太多的错误:]

<div class="container">
<?php if (isset($error)) {?>
    <div class="alert alert-danger">
        <?php echo validation_errors('<div class="container"><b><ul><li>','</li></ul></b></div>') ?>
    </div>
<?php }?>       
<div class="panel panel-default">

    <div class="panel-body">
        <h3 style='margin-left: 4em'>Crear Producto</h3>
        <h6 style='margin-left: 8em'>Rellena los siguientes campos con los datos del producto y una vez termines pulsa el botón.</h6>
        <hr>
        <?php echo form_open_multipart('Inicio/verificarProducto'); ?>
        <div class="row">

            <div style='margin-left: 6em' class="container">
                <div class="col-xs-3">
                    <div class="form-group">
                        <label for="user">Nombre *</label>
                        <input type="text" name="nombre" value="<?=set_value('nombre')?>" class="form-control" id="nombre" placeholder="Nombre del Producto" >
                    </div>
                </div>
                <div class="col-xs-3">
                    <div class="form-group">
                        <label for="pass">Descripción *</label>
                        <input type="text" name="descripcion" value="<?=set_value('descripcion')?>" class="form-control" id="descripcion" placeholder="Descripción del Producto" >
                    </div>
                </div>
            </div></div><hr>

            <div style='margin-left: 6em' class="container">

                <div class="row">
                 <div class="col-xs-4">
                    <div class="form-group">
                            <label for="image">Imagen *</label>

                            <!--El name del campo tiene que ser si o si "userfile"-->
                            <input type="file" name="imagen" value="<?=set_value('imagen')?>" />



                        </div>
                    </div>
                </div>

                <div class="row">
                    <div class="col-xs-4">
                        <div class="form-group">
                            <label for="marca">Marca *</label>
                            <input type="text" name="marca" value="<?=set_value('marca')?>" class="form-control" id="marca" placeholder="Marca del Producto" >
                        </div>
                    </div>
                    <div class="col-xs-2">
                        <div class="form-group">
                            <label for="pvp">PVP *</label>
                            <input type="numeric" name="pvp" value="<?=set_value('pvp')?>" class="form-control" id="pvp" placeholder="0" >
                        </div>
                    </div>
                    <div class="col-xs-2">
                        <div class="form-group">
                            <label for="iva">IVA *</label>
                            <input type="number" step=".01" name="iva" value="<?=set_value('iva')?>" class="form-control" id="iva" placeholder="0" >
                        </div>
                    </div>
                </div><h6 style='color: #2874A6;'>*El IVA no puede ser negativo.</h6>

                <div class="row">
                    <div class="col-xs-2"><hr>
                        <div class="form-group">
                            <label for="stock">Stock *</label>
                            <input type="number" name="stock" value="<?=set_value('stock')?>" class="form-control" id="stock" placeholder="0" >
                        </div>
                    </div>
                </div>

                <div class="row">
                    <div class="col-xs-4">
                        <div class="form-group">
                            <label for="categoria">Categoria *</label>
                            <input type="text" name="categoria" value="<?=set_value('categoria')?>" class="form-control" id="categoria" placeholder="Categoria del Producto" >
                        </div>
                    </div>
                </div>
                <div class="row">
                    <div class="col-xs-2">
                        <div class="form-group">
                            <label for="finicio_dest">Fecha inicio de destacado (opcional)</label>
                            <input type="date" name="finicio_dest" value="<?=set_value('finicio_dest')?>" class="form-control" id="finicio_dest">
                        </div>
                    </div>
                    <div class="col-xs-2">
                        <div class="form-group">
                            <label for="ffin_dest">Fecha final de destacado (opcional)</label>
                            <input type="date" name="ffin_dest" value="<?=set_value('ffin_dest')?>" class="form-control" id="ffin_dest">
                        </div>
                    </div>
                </div>
            </div>  

            <hr>
            <a class="btn btn btn-default" style="margin-left: 50px;" href="<?=site_url().'/Inicio/cargarVista/panel_usuario_admin'?>"><b><span class="glyphicon glyphicon-chevron-left"></span>&nbsp;&nbsp;&nbsp;Volver atrás</b></a></center><button style='margin-left: 7em' type="submit" name="bcontinuar" class="btn btn-success"><B>Finalizar</B>&nbsp;&nbsp;<span class="glyphicon glyphicon-chevron-right"></span></button><br>
        </div>
    <?php echo form_close() ?>
</div>

这里是负责形式的控制器的片段:

public function verificarProducto()
{
  $prueba = $this->mproducto->verCategoriasEx($this->input->post('category'));

  if($this->mproducto->verCategoriasEx($this->input->post('category')) >= 0){
    $a = intval($this->mproducto->verCategoriasEx($this->input->post('category')));
  }else{
    $datos_cat = array(
      'name' => $this->input->post('category'),
      'description' => "",
      'announce' => 0,
      'show' => 1
    );

    $a = $this->mproducto->insertaCategoria($datos_cat);
  }


  $datos = array(
    'category_id' => $a ,
    'name' => $this->input->post('nombre'),
    'brand' => $this->input->post('marca'),
    'description' => $this->input->post('descripcion'),
    'discount' => 0,
    'announce' => 0,
    'image' => $this->input->post('image'),
    'pvp' => $this->input->post('pvp'),
    'iva' => $this->input->post('iva'),
    'stock' => $this->input->post('stock'),
    'show' => 1,
    'finicio_dest' => $this->input->post('finicio_dest'),
    'ffin_dest' => $this->input->post('ffin_dest'),
    'destacado' => 1
  );
  $this->mproducto->insertaProducto($datos);
  $cuerpo = $this->load->view("producto_creado", "", TRUE);
  $this->cargaPlantilla($cuerpo, "");
}

这里是上传图像的控制器的片段:

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

class subir_controller extends CI_Controller {

 public function __construct(){
  parent::__construct();
}

public function index(){ 
  $this->load->view('nuevoProducto', array('error' => ' ' ));
}

public function subir(){
  $dato = $this->input->post("txt_dato");
  $image_name = $_FILES['archivoImagen']['name'];
  $data = array("dato" => $dato, "image" => $image_name);
  $guardar = $this->msubir->guardar($data);
  $this->subirImagen();
}   

public function subirImagen(){
  $nombreCompleto = $_FILES['archivoImagen']['name'];
  $config['upload_path'] = './assets/img/productos/';
  $config['allowed_types'] = 'jpg|jpeg|png';
  $config['file_name'] = $nombreCompleto;
  $this->load->library('upload', $config);

  if(!$this->upload->do_upload('archivoImagen')) {
    $data['error'] = array('error' => $this->upload->display_errors());
  } else {
    $data['infoImagen'] = $this->upload->data();
  }
}
}
?>

最后是这里的模型:

<?php
class Subir_model extends CI_Model
{
    function guardar($data)
    {
        $this->db->insert("subir", $data);
        if ($this->db->affected_rows() > 0) {
            return true;
        } else {
            return false;
        }
    }
}

我已经尝试了很长时间,并且肯定是从我尝试过的各种解决方案中得出的,关于代码的某些内容并没有多大意义,但是现在,它可以像我在顶部告诉您的那样工作问题。将全部

数据(包括图像名称)保存到数据库,但是不要将图像复制到服务器文件夹。

[如果您听不懂,请告诉我,我会尽快答复您。

感谢您的帮助。

我已经有点绝望了,因为我正在CodeIgniter中编程一个项目,该项目是在线食品商店。问题是,当我必须创建产品时,我具有以下形式:...

php html frameworks codeigniter-3
1个回答
0
投票

我认为您希望对表单打开器使用“ form_open_multipart”功能,因为它允许上传文件。否则,它仅发送文本。

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