Function Product change

Asked

Viewed 82 times

0

Thanks help, I have a problem that when I change the products I am not able to persist in the comic the way the product photo. I’ve tried a lot of ways to do it, but I haven’t been successful. Here’s what I’ve tried: 1) In the product image display I put a Hidden input to send the photo path but it didn’t work. 2) I changed the code in the product class and included an Else $this->foto = $name_imagem; in case you found a photo, send the path to the BD but I was not successful either. I don’t know what else I can do someone could fix my code to work? page where I make changes to product data

<main class="container">
<article class="principal">

<?php

$categorias = listaCategorias($conexao);
$marcas = listaMarcas($conexao);
$subcategorias = listaSubcategorias($conexao);

$produto = new Produto();
$produto->setCategoria(new Categoria());
$produto->setSubcategoria(new Subcategoria());
$produto->setMarca(new Marca());
$ehAlteracao = false;
$action = "adiciona-produto.php";
$id = "";

//Campos do formulario
//Inserir os demais campos do formulario

if (array_key_exists('id', $_GET)) {
$id = $_GET['id'];
if ($id <> ""){
    $produto = buscaProduto($conexao, $id);
    $ehAlteracao = true;
    $nome = $produto->getNome() ;
    //Carrega os demais campos do formulário

    $action = "altera-produto.php";
    }
}

?>
<h1><?=$ehAlteracao ? "Alterar" : "Cadastrar" ?> produto</h1>
<form action="<?=$action ?>" method="post" enctype="multipart/form-data">

<!-- Adicionar os demais campos do formulário -->

<input type="hidden" name="id" value="<?=$id; ?>" />


<br>
//estes campos mexem com a foto (inclui e exibe)

<div class="form-group">
    <label>Imagem do Produto:</label>
       <img width="177px" height="177px" width="auto" height="auto" img 
src="fotos/<?=$produto->getFoto() ?>" alt="Sem Imagem"/>
        <input type="hidden" value="<?=$produto->getFoto() ?>" />
</div>

<div class="form-group">
    <label>Alterar Imagem:</label>
        <input type="file" name="foto" class="form-control"  
            value="foto">
<br>

this is the product class in the fields where I have the photo:

public function getFoto()
{
return $this->foto;
}

public function carregaCaminhoFoto($foto)  {
    $this->foto = $foto;
}

public function gerarNovoNome( $nomeAntigo )
{
    // Pega extensão da imagem
    preg_match("/\.(gif|bmp|png|jpg|jpeg){1}$/i", $nomeAntigo, $ext);
    // Gera um nome único para a imagem
    $nome_imagem = md5(uniqid(time())) . "." . $ext[1];

    return $nome_imagem;
 }

 public function setFoto($foto)
 {

    // esta variavel precisa existir, mesmo que vazia
    $nome_imagem = null;

    // armazena erros se houver
    $error = array();

    // Se a foto estiver sido selecionada
    if (!empty($foto["name"]))
    {
        // Largura máxima em pixels
        $largura = 1200;
        // Altura máxima em pixels
        $altura = 1200;
        // Tamanho máximo do arquivo em bytes
        $tamanho = 1500000;
        // Verifica se o arquivo é uma imagem
        if(!preg_match("/^image\/(pjpeg|jpeg|png|gif|bmp)$/", 
        $foto["type"]))
        {
            $error[1] = "Isso não é uma imagem.";
        }

        // Pega as dimensões da imagem
        $dimensoes = getimagesize($foto["tmp_name"]);

        // Verifica se a largura da imagem é maior que a largura permitida
        if($dimensoes[0] > $largura)
        {
            $error[2] = "A largura da imagem não deve ultrapassar 
        ".$largura." pixels";
        }

        // Verifica se a altura da imagem é maior que a altura permitida
        if($dimensoes[1] > $altura)
        {
            $error[3] = "Altura da imagem não deve ultrapassar ".$altura." 
        pixels";
        }

        // Verifica se o tamanho da imagem é maior que o tamanho permitido
        if($foto["size"] > $tamanho)
        {
            $error[4] = "A imagem deve ter no máximo ".$tamanho." bytes";
        }
     // Se não houver nenhum erro
        if (count($error) == 0)
        {
            $nome_imagem = $this->gerarNovoNome($foto["name"]);

            // caso o diretório não exista
            if( !is_dir("fotos") )
                mkdir("fotos", "0777", true);

            // Caminho de onde ficará a imagem
            $caminho_imagem = "fotos" . DIRECTORY_SEPARATOR . $nome_imagem;
            // Faz o upload da imagem para seu respectivo caminho
            move_uploaded_file($foto["tmp_name"], $caminho_imagem);
            $this->foto = $foto;
        }
     else
        {
            echo "<pre>";
            echo "Opa!, foto com os seguintes problemas: <br>";
            echo implode("<br>", $error);
            exit;
        }

        return $nome_imagem;
   }
  }

this and the file changes product:

<?php
require_once 'conecta.php';
require_once 'banco-produto.php';
require_once 'produto.php';
require_once 'categoria.php';
require_once 'subcategoria.php';
require_once 'marca.php';


$produto = new Produto();
$produto->setId( $_POST['id'] );
$produto->setCodigo( $_POST['codigo'] );
$produto->setReferencia( $_POST['referencia'] );
$produto->setPeso( $_POST['peso'] );
$produto->setNome( $_POST['nome'] );
$produto->setDescricao( $_POST['descricao'] );
$produto->setPreco( $_POST['preco'] );
$produto->setMedida( $_POST['medida'] );
$produto->setNcm( $_POST['ncm'] );
$produto->setMarca(new Marca());
$produto->getMarca()->setId( $_POST['marca_id'] );
$produto->setCategoria(new Categoria());
$produto->getCategoria()->setId( $_POST['categoria_id'] );
$produto->setSubcategoria(new Subcategoria());
$produto->getSubcategoria()->setId( $_POST['subcategoria_id'] );
$produto->setDestaque( $_POST['destaque'] );
$nome_imagem = $produto->setFoto( $_FILES["foto"]);
  • 2

    Don’t have Insert or update? I’m only seeing that you move the image to a path and return and the rest?

  • 1

    Just like @Everson said. If the problem is in the insertion or editing in the database, it is important that you post the code that inserts this image.

1 answer

0

thanks for the help. I managed to resolve by doing so: 1) In the field where displays the product image I changed to input type Hidden and the photo path (this was missing before) 2) I changed exactly where Everson and Andrei observed the product bank file in the product change function got this way and everything worked right. Ufa! Thanks a lot!!!

function alteraProduto($conexao, $produto, $nome_imagem) {
$query = "update produtos set nome = '{$produto->getNome()}',"; 
$query .= " codigo = {$produto->getCodigo()},";
$query .= " referencia = '{$produto->getReferencia()}',";
$query .=  " preco = {$produto->getPreco()},";
$query .=  " peso = {$produto->getPeso()},";
$query .=  " medida = '{$produto->getMedida()}',";
$query .=  " ncm = {$produto->getNcm()},";
$query .=  " descricao = '{$produto->getDescricao()}',";
$query .= " marca_id = {$produto->getMarca()->getId()},";
$query .= " categoria_id = {$produto->getCategoria()->getId()},";
$query .= " subcategoria_id = {$produto->getSubcategoria()->getId()},";
if ( $nome_imagem <> "" ) $query .=  " foto = '" .$nome_imagem. "',";
$query .= " destaque = {$produto->getDestaque()}";
$query .= " where id = {$produto->getId()}";
return mysqli_query($conexao, $query);

}

Browser other questions tagged

You are not signed in. Login or sign up in order to post.