Я уже немного в отчаянии, потому что я программирую проект в CodeIgniter, который является интернет-магазином продуктов питания. Проблема в том, что когда мне нужно создать продукт, у меня есть форма, в которой администратора просят ввести название, бренд, описание, цену, НДС, категорию и т. Д. c. продукта, а между ними есть еще одно поле, которое является изображением продукта . Что ж, когда я заполняю эту форму и отправляю ее, продукт добавляется в базу данных, и все работает отлично, за исключением того, что изображение продукта не копируется с моего жесткого диска в папку сервера.
Я использую: PHP 7.3.9 MySQL 5.7.26 CodeIgniter 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> Volver atrás</b></a></center><button style='margin-left: 7em' type="submit" name="bcontinuar" class="btn btn-success"><B>Finalizar</B> <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;
}
}
}
Пробую уже давно и наверняка из смеси решений, которые пробовал, что-то есть о коде, который не имеет особого смысла, но сейчас он работает, как я сказал вам в начале вопроса. Сохраняйте все данные, включая имя изображения, в базу данных, но не копируйте изображение в папку сервера.
Если вы чего-то не понимаете, пожалуйста, дайте мне знать, и я постараюсь ответить вам как можно скорее.
Заранее благодарен за вашу помощь.
var_dump ($ _ POST) выводит:
array(10) { ["nombre"]=> string(4) "test" ["descripcion"]=> string(4) "test" ["marca"]=> string(4) "test" ["pvp"]=> string(2) "10" ["iva"]=> string(2) "10" ["stock"]=> string(3) "100" ["categoria"]=> string(4) "Test" ["finicio_dest"]=> string(0) "" ["ffin_dest"]=> string(0) "" ["bcontinuar"]=> string(0) "" }