Solucionado (ver solução)
Solucionado
(ver solução)
4
respostas

Alterar Imagem

Olá! Consegui criar um um envio de imagens, porém não estou conseguindo agora fazer ele alterar a imagem.

<?php include("cabecalho.php"); ?>
<?php include("conecta.php"); ?>

<?php

function alteraProduto($conexao, $id, $nome, $preco, $descricao, $categoria_id, $usado, $novo_nome) {
  $query = "update produtos set nome = '{$nome}', precos = {$preco}, descricao = '{$descricao}',
      categoria_id = {$categoria_id}, usado = {$usado}, imagem = '{$novo_nome}' where id = '{$id}'";
    return mysqli_query($conexao, $query);
}
$id = $_POST["id"];
$nome = $_POST["nome"];
$preco = $_POST["preco"];
$descricao = $_POST["descricao"];
$categoria_id = $_POST["categoria_id"];
if(array_key_exists('usado', $_POST)) {
  $usado = "true";
}else {
  $usado = "false";
}

$imagem = $_FILES["imagem"];

$ext = explode(".", $imagem["name"]);
$ext = array_reverse($ext);
$ext = $ext[0];
$novo_nome = md5(time()).$ext;

move_uploaded_file($imagem["tmp_name"],"img/".$novo_nome);

if($ext != "jpg" && $ext != "gif" && $ext != "png") { ?>
  <p class="text-danger">Extensão inválida!</p>
<?php } elseif(alteraProduto($conexao, $id, $nome, $preco, $descricao, $categoria_id, $usado, $novo_nome)) { ?>
    <p class="text-success">O produto <?= $nome; ?>, <?= $preco; ?> alterado com sucesso!</p>
<?php } else {
    $msg = mysqli_error($conexao);
?>
    <p class="text-danger">O produto <?= $nome; ?> não foi alterado: <?= $msg ?></p>
<?php
}
?>

<?php include("rodape.php"); ?>
4 respostas

Oi Charles, tudo bom?

O que acontece quando você tenta alterar o produto?

Mostra algum erro? Cai em algum caso especifico do seu if?

Aguardo retorno.

Abraço!

Oá, André!

Ele faz o if do extensão inválida e dá esse erro: http://prntscr.com/gc420d

solução!

Estranho, o erro acontece antes do if. Pelo o que o erro diz, ele não encontrou a chave imagem no $_FILES.

Na documentação diz que esse array $_FILES guarda os dados enviados por post. Verifica se você está definindo o método do seu form como POST.

Uma abordagem boa é validar se o o array $_FILES tem a chave que você quer, antes de acessá-la. Algo como:

if(array_key_exists("imagem",$_FILES)){
    $imagem = $_FILES["imagem"];
} else {
    // adiciona a lógica caso não seja enviada uma imagem =)
}

Isso evitaria o erro deixando mais evidente o real problema, que no nosso caso é a imagem não estar sendo passada para o array $_FILES =)

Consegui. Esqueci de colocar o enctype="multipart/form-data" no form.