Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Boa Noite, eu estou fazendo um cadastro de produtos e inclui o cadastro da imagem, porém está indo tudo certo, está cadastrando no banco de dados, só que a imagem não está indo na pasta desejável, segue o código:
<?php
// INICIO CADASTRAR PRODUTOS
if(isset($_POST['p_nome']) && empty($_POST['p_nome']) == false){
$p_nome = addslashes($_POST['p_nome']);
$p_codigo = addslashes($_POST['p_codigo']);
$p_valor_venda = addslashes($_POST['p_valor_venda']);
$p_valor_custo = addslashes($_POST['p_valor_custo']);
$p_disponivel_estoque = addslashes($_POST['p_disponivel_estoque']);
$p_minimo_estoque = addslashes($_POST['p_minimo_estoque']);
$p_fornecedor = addslashes($_POST['p_fornecedor']);
$p_foto = addslashes($_FILES['p_foto']);
$p_link_ml = addslashes($_POST['p_link_ml']);
$p_data = addslashes($_POST['p_data']);
$nome_imagem = md5(time().rand(0,99)).'.png';
$caminho_imagem = "fotos/" . $nome_imagem;
move_uploaded_file($p_foto['tmp_name'], $caminho_imagem);
$Inserir = $pdo->prepare("INSERT INTO tb_sys_produtos (p_nome, p_codigo, p_valor_venda, p_valor_custo, p_disponivel_estoque, p_minimo_estoque, p_fornecedor, p_foto, p_link_ml, p_data) VALUES (:p_nome, :p_codigo, :p_valor_venda, :p_valor_custo, :p_disponivel_estoque, :p_minimo_estoque, :p_fornecedor, :p_foto, :p_link_ml, :p_data)");
$Inserir->bindValue(":p_nome", $p_nome);
$Inserir->bindValue(":p_codigo", $p_codigo);
$Inserir->bindValue(":p_valor_venda", $p_valor_venda);
$Inserir->bindValue(":p_valor_custo", $p_valor_custo);
$Inserir->bindValue(":p_disponivel_estoque", $p_disponivel_estoque);
$Inserir->bindValue(":p_minimo_estoque", $p_minimo_estoque);
$Inserir->bindValue(":p_fornecedor", $p_fornecedor);
$Inserir->bindValue(":p_foto", $nome_imagem);
$Inserir->bindValue(":p_link_ml", $p_link_ml);
$Inserir->bindValue(":p_data", $p_data);
$Inserir->execute();
header("Location: produto_novo.php?produto=salvo");
exit;
}?>
Você deve estar utilizando algo parecido com isso certo:
<input type="file" name="arq" class="form-control" accept="jpg,png" value=""/>
Então verifique se na linha do seu <form> você colocou:
enctype="multipart/form-data"
Desta forma:
<form action="seu arquivo" method="post" autocomplete="off" enctype="multipart/form-data">
Se não tiver o enctype no form a imagem não é enviadaEu tenho um projeto que faz o upload para a pasta, criptografa e salva no banco o caminho, segue:
Formulário:
<form action="cadastro.php" method="post" enctype = "multipart/form-data">
<div class="form-group">
<label for="foto">Foto do Aluno</label>
<input type="file" name="foto" required>
<small name="fotoinfo" class="form-text text-muted">Por favor, envie uma imagem no tamanho: 230x300.</small>
</div>
</form>
Cadastro.php / Que faz a query para inserir:
<?php
header('Content-Type: text/html; charset=UTF-8');
$foto = $_FILES['foto'];
$pasta_dir = "img/alunos/";
preg_match("/\.(gif|bmp|png|jpg|jpeg){1}$/i", $foto["name"], $ext);
$foto_nome = $pasta_dir . md5(uniqid(time())) . "." . $ext[1];
move_uploaded_file($foto["tmp_name"], $foto_nome);
include_once('class/config.php');
$strcon = mysqli_connect($host, $usuario, $senha, $bd);
$strcon->set_charset('utf8');
$sql = "INSERT INTO alunos (foto) VALUES ";
$sql .= "('$foto_nome')";
mysqli_query($strcon,$sql) or die("Erro ao tentar cadastrar registro");
mysqli_close($strcon);
?>
Creio que isso resolva seu problema
Verifique se o diretório existe e sem ele têm permissões para escrita e leitura.