Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Gleyson Abreu

Sistema de Upload de imagens não da certo.

Recommended Posts

Bom no codigo abaixo o sistema funciona mais ele só funciona se o campo file tiver selecionado alguma imagem para fazer o upload se não ele não preenche no banco de dados mesmo que o campo status esteja escrito, resumindo, SE NÃO TIVER UMA IMAGEM PARA O UPLOAD ELE NÃO DEIXAR PREENCHER O SÓ O STATUS E LOCALIDADE NO BANCO DE DADOS. SEQUEM OS CODIGOS:

 

CODIGO DO PHP:

 

 

<?php

if(isset($_POST['publicar'])){
$pasta = 'imagens_post';
$permite = array('image/jpg','image/jpeg','image/pjpeg','image/png','image/bitmap');
$pegaDadosId = $pdo->prepare("SELECT * FROM cadastro WHERE nome_usuario = '$parteurldesejada'");
$pegaDadosId->execute();
while($PegID = $pegaDadosId->fetch(PDO::FETCH_ASSOC)){
$idPeg = $PegID['id'];
}
$imagem = $_FILES['img'];
$destino = $imagem['tmp_name'];
$nome = $imagem['name'];
$tipo = $imagem['type'];
$nome = 'ibook_'.rand().".png";
$mensagem = $_POST['mensagem'];
$localidade = $_POST['localidade'];
require('funcao.php');
if(empty($mensagem)){
echo "Tem que preenche o seu status!";
}
if(!empty($nome) && in_array($tipo, $permite)){
upload($destino, $nome, 460, $pasta);
$stmt = $pdo->prepare('INSERT INTO postagens(status_id, status, foto, localidade)VALUES(:status_id, :status, :foto, :localidade)');
$stmt->bindValue(':status_id', $idPeg, PDO::PARAM_STR);
$stmt->bindValue(':status', $mensagem, PDO::PARAM_STR);
$stmt->bindValue(':foto', $nome, PDO::PARAM_STR);
$stmt->bindValue(':localidade', $localidade, PDO::PARAM_STR);
$stmt->execute();
if($stmt->rowCount() == true ){
}
}
}else{
echo "Aceitamos somente imagens!";
}
?>

 

CÓDIGO DA FUNCÃO.PHP:

 

<?php

function upload($destino, $nome, $largura, $pasta){
$img = imagecreatefromjpeg($destino);
$x = imagesx($img);
$y = imagesy($img);
$altura = ($largura * $y) / $x;
$novaImagem = imagecreatetruecolor($largura, $altura);
imagecopyresampled($novaImagem, $img, 0, 0, 0, 0, $largura, $altura, $x, $y);
imagejpeg($novaImagem, "$pasta/$nome");
imagedestroy($img);
imagedestroy($novaImagem);
}
?>

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

é obvio que não ira incluir os outros dados se imagem não for enviada

 

pois você esta impedindo aqui:

if(!empty($nome) && in_array($tipo, $permite)){

// codigo
 }

O correto é incluir as imagens somente se ela for enviada, senão for, seta os campos como null

 

e o tratamento das images dentro do if files

if ( isset( $_FILES['img'] ) {
// trata a imagem, upload etc..

}

insert fora do if acima

Compartilhar este post


Link para o post
Compartilhar em outros sites

Deu certo, mais um perguntinha relacionado ao mesmo acima,

quando eu separei os mesmos em if diferente continuou inserindo o nome mesmo quando não selecionado, ai eu tirei o código "$nome = 'ibook_'.rand();" ai não inseria o nome da imagem exatamente como eu queria, mais se a pessoa bota a imagem eu queria que o "$nome = 'ibook_'.rand();" volta-se para por um nome aleatorio se tive-se imagem, da pra fazer isso?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Você pode fazer o seguinte quando não tiver imagem

<?php
$nome = 'sem_imagem.png';// ou setar null e verificar, se é diferente de empty lá no select

if ( isset($_FILES['img']) ) && !empty($_FILES['img']) ) {
	
	//Aqui dentro somente os dados das images e a função upload
	$imagem = $_FILES['img'];
	$destino = $imagem['tmp_name'];
	$nome = $imagem['name'];
	$tipo = $imagem['type'];
	$nome = 'ibook_'.rand().".png";
	
	if(in_array($tipo, $permite)){
		upload($destino, $nome, 460, $pasta);
	}	
}

...

Compartilhar este post


Link para o post
Compartilhar em outros sites

Bom Williams Duarte você me ajudou muito com o código acima, mais resolvi fazendo uma coisa mais pratica dentro do proprio if, o seguinte:

 

if($nome == ''){

$nome = '';
}else{
$nome = 'ibook_'.rand();
}

esse fico perfeito, caso o $nome que e = ao nome do campo do img, se for == '' nadaa ele irá bota nada no campo nome, caso estiver algo escrito no campo ele bota a variavel $nome = 'ibook_".rand(); fico bom graças a você!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Que bom que resolveu, mas não entendi esta lógica

if($nome == ''){
    $nome = '';
}else{
    $nome = 'ibook_'.rand();
}

Se está vazio, seta vazio novamente? :wacko:

 

Uma forma melhor seria esta:

//Validar com isset

if(isset($nome) && !empty($nome)){
    $nome = 'ibook_'.rand();
} else {
    $nome = ''; 
}

Compartilhar este post


Link para o post
Compartilhar em outros sites

 

 

if($nome == ''){

$nome = '';

}else{

$nome = 'ibook_'.rand();

}

Nesse código se o campo FILE['img'] que e = $nome estiver vazio no caso sem imagem, ele seta null (vazio na variavél) caso tenha imagem ele seta ($nome = 'ibook_'.rand();) .

Mais seu código está mais limpo que meu e também deu certo, OBRIGADO :yes: :kiss:

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.