Ir para conteúdo

POWERED BY:

Arquivado

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

tamires

[RESOLVIDO] gd-jpeg e mais erros

Recommended Posts

ola!tenho um formulario de atualizacao de cadastro. ele atualiza a imagem e/ou a legenda, você pode atualizar os dois ou só um dos dois itens.ele funciona, mas dá problema quando tento atualizar tudo menos a imagem...ele não está fazendo o upload da imagem.usei o seguinte no código:

if(isset($_FILES["img_upload"])){//upload se mudar imagemif(isset($_FILES["img_upload"])){move_uploaded_file($_FILES['img_upload']['tmp_name'], '../imagens/' . $_FILES["img_upload"]["name"]);$imgcompleta = '../imagens/' . $_FILES["img_upload"]["name"];$imgquebrar = $_FILES["img_upload"]["name"];}//criar thumb//IMAGEM A SER ABERTA (800x640)$imagem = $imgcompleta;//DEFINE OS PARÂMETROS DA MINIATURA$largura = 60;$altura = 75;//NOME DO ARQUIVO DA MINIATURA$imagem_gerada = explode(".", $imgquebrar);$imagem_gerada = "../imagens/".$imagem_gerada[0]."_mini.jpg";//CRIA UMA NOVA IMAGEM$imagem_orig = imagecreatefromjpeg($imagem);//LARGURA$pontoX = imagesx($imagem_orig);//ALTURA$pontoY = imagesy($imagem_orig);//CRIA O THUMBNAIL$imagem_fin = imagecreatetruecolor($largura, $altura);//COPIA A IMAGEM ORIGINAL PARA DENTROimagecopyresampled($imagem_fin, $imagem_orig, 0, 0, 0, 0, $largura+1, $altura+1, $pontoX, $pontoY);//SALVA A IMAGEMimagejpeg($imagem_fin, $imagem_gerada, 100);//grava nome da thumb pro banco$nomethumb = $imagem_gerada;}else{//se não mudar a imagem$imgcompleta = $row_rs_editimg['imagem'];$nomethumb = $row_rs_editimg['thumb'];}
esses dois itens $imgcompleta = $row_rs_editimg['imagem'];e $nomethumb = $row_rs_editimg['thumb'];estão vindo do recordset que busca qual cadastro está sendo editado. as váriaveis $imgcompleta e $nomethumb são as que contém as informações que serão gravadas no banco, se você atualizar a imagem ou não.os erros que aparecem são os seguintes:

Warning: imagecreatefromjpeg() [function.imagecreatefromjpeg]: gd-jpeg: JPEG library reports unrecoverable error: in /Applications/MAMP/htdocs/marcoshermes/admin/edit_img.php on line 86Warning: imagecreatefromjpeg() [function.imagecreatefromjpeg]: '../imagens/' is not a valid JPEG file in /Applications/MAMP/htdocs/marcoshermes/admin/edit_img.php on line 86Warning: imagesx(): supplied argument is not a valid Image resource in /Applications/MAMP/htdocs/marcoshermes/admin/edit_img.php on line 89Warning: imagesy(): supplied argument is not a valid Image resource in /Applications/MAMP/htdocs/marcoshermes/admin/edit_img.php on line 91Warning: imagecopyresampled(): supplied argument is not a valid Image resource in /Applications/MAMP/htdocs/marcoshermes/admin/edit_img.php on line 97Warning: Cannot modify header information - headers already sent by (output started at /Applications/MAMP/htdocs/marcoshermes/admin/edit_img.php:86) in /Applications/MAMP/htdocs/marcoshermes/admin/edit_img.php on line 140

me parece que ele dá erro pq não usei as funções. como faço para concertar isso? acredito que a logica esteja certa...aguardo respostasgratatamires

Compartilhar este post


Link para o post
Compartilhar em outros sites

Cara este erro pode ser os seguinte:1º Seu formulario não esta enviando o FILE corretamente.. 2º A extensão do arquivo não é JPGMas provavelmente seu Form não esta com este tipo de cryptografia = "multipart/form-data" ou a pasta onde voce esta querendo pegar a imagem é invalida..Qualquer coisa prende o grito ai..Abração

Compartilhar este post


Link para o post
Compartilhar em outros sites

a extensão do arquivo está como jpeg...tentei com uns três arquivos diferentes de imagem, deu na mesma.

segue o código do form, não estou encontrando os problemas nele! ele já está com isso essa marcação da criptografia...

 

<form action="<?php echo $editFormAction; ?>" method="POST" [b]enctype="multipart/form-data" [/b]name="editimg" id="editimg">imagem   	  <br><input name="img_upload" id="img_upload" type="file" class="base_form" size="20"> <br>legenda_pt <br><textarea name="legenda_pt" cols="20" rows="5" class="base_form" id="legenda_pt"><? echo $row_rs_editimg['legenda_pt']?></textarea><br>legenda_in <textarea name="legenda_in" cols="20" rows="5" class="base_form" id="legenda_in"><? echo $row_rs_editimg['legenda_in']?></textarea><br>		   <input name="id_img" type="hidden" value="<? echo $row_rs_editimg['id_img']?>">  <input name="back" type="button" class="base_form" onClick="history.back();" value="voltar">							   <input name="enviar" type="submit" value="enviar" class="base_form">				  <input type="hidden" name="MM_update" value="editimg">	</form>

Compartilhar este post


Link para o post
Compartilhar em outros sites

Cara entao a imagem nao esta sendo achada.. verefica o caminho da imagem ve se ela existe etc..

$imagem_path = $path .'/'.$nome_imagem; $imagem_orig = imagecreatefromjpeg($imagem_path); // verifica se a imagem foi criada com sucesso if ($imagem_orig) { $largura_atual = imagesx($imagem_orig); $altura_atual = imagesy($imagem_orig);....etc do codigo...}

Abração

Compartilhar este post


Link para o post
Compartilhar em outros sites

na verdade, é como se ele não estivesse reconhecendo o else...

a logica eh mais ou menos assim:

 

se eu alterar a imagem, fazer upload e cadastrar no banco

ou se eu nao alterar a imagem, resgatar o nome ja cadastrado e cadastra-lo de novo.

 

qd eu altero a imagem, funciona direitinho...

mas, quando eu não altero, não funciona. parece que ele tá ignorando o else, vou por o código de novo...alterei umas coisas mas continua na mesma!

 

 

//upload se mudar imagemif(isset($_FILES["img_upload"])){move_uploaded_file($_FILES['img_upload']['tmp_name'], '../imagens/' . $_FILES["img_upload"]["name"]);$imgcompleta = '../imagens/' . $_FILES["img_upload"]["name"];$imgquebrar = $_FILES["img_upload"]["name"];//IMAGEM A SER ABERTA (800x640)$imagem = $imgcompleta;//DEFINE OS PARÂMETROS DA MINIATURA$largura = 60;$altura = 75;//NOME DO ARQUIVO DA MINIATURA$imagem_gerada = explode(".", $imgquebrar);$imagem_gerada = "../imagens/".$imagem_gerada[0]."_mini.jpg";//CRIA UMA NOVA IMAGEM$imagem_orig = imagecreatefromjpeg($imagem);//LARGURA$pontoX = imagesx($imagem_orig);//ALTURA$pontoY = imagesy($imagem_orig);//CRIA O THUMBNAIL$imagem_fin = imagecreatetruecolor($largura, $altura);//COPIA A IMAGEM ORIGINAL PARA DENTROimagecopyresampled($imagem_fin, $imagem_orig, 0, 0, 0, 0, $largura+1, $altura+1, $pontoX, $pontoY);//SALVA A IMAGEMimagejpeg($imagem_fin, $imagem_gerada, 100);//grava nome pro banco$nomethumb = $imagem_gerada;}else{//se não mudar imagem$imgcompleta = $row_rs_editimg['imagem'];$nomethumb = $row_rs_editimg['thumb'];}

valeu!

Compartilhar este post


Link para o post
Compartilhar em outros sites

No primeiro post, você colocou esta parte duas vezes:

 

if(isset($_FILES["img_upload"])){
O else que você afirma estar sendo ignorado está dentro do primeiro if. Como o primeiro IF retorna false quando não há imagens, esse else é ignorado emsmo.

 

Abraços,

Beraldo

Compartilhar este post


Link para o post
Compartilhar em outros sites

mas com ou sem essa parte duas vezes, ele não funcionou.

 

if(isset($_FILES["img_upload"])){

agora tentei assim:

 

if(!isset($_FILES["img_upload"])){//se não mudar imagem$imgcompleta = $row_rs_editimg['imagem'];$nomethumb = $row_rs_editimg['thumb'];}//upload se mudar imagemif(isset($_FILES["img_upload"])){if(isset($_FILES["img_upload"])){//uploadmove_uploaded_file($_FILES['img_upload']['tmp_name'], '../imagens/' . $_FILES["img_upload"]["name"]);$imgcompleta = '../imagens/' . $_FILES["img_upload"]["name"];$imgquebrar = $_FILES["img_upload"]["name"];}//IMAGEM A SER ABERTA (800x640)$imagem = $imgcompleta;//DEFINE OS PARÂMETROS DA MINIATURA$largura = 60;$altura = 75;//NOME DO ARQUIVO DA MINIATURA$imagem_gerada = explode(".", $imgquebrar);$imagem_gerada = "../imagens/".$imagem_gerada[0]."_mini.jpg";//CRIA UMA NOVA IMAGEM$imagem_orig = imagecreatefromjpeg($imagem);//LARGURA$pontoX = imagesx($imagem_orig);//ALTURA$pontoY = imagesy($imagem_orig);//CRIA O THUMBNAIL$imagem_fin = imagecreatetruecolor($largura, $altura);//COPIA A IMAGEM ORIGINAL PARA DENTROimagecopyresampled($imagem_fin, $imagem_orig, 0, 0, 0, 0, $largura+1, $altura+1, $pontoX, $pontoY);//SALVA A IMAGEMimagejpeg($imagem_fin, $imagem_gerada, 100);//grava nome pro banco$nomethumb = $imagem_gerada;}

e tentei usar else if...e nada :/

Compartilhar este post


Link para o post
Compartilhar em outros sites

Mas ainda há a verificação do upload duas vezes:

 

if(isset($_FILES["img_upload"])){

 

if(isset($_FILES["img_upload"])){

//upload

_linenums:0'>//upload se mudar imagem<strong class='bbc'>if(isset($_FILES["img_upload"])){if(isset($_FILES["img_upload"])){</strong>//upload

Tente assim:

if(!isset($_FILES["img_upload"])){
//se não mudar imagem
$imgcompleta = $row_rs_editimg['imagem'];
$nomethumb = $row_rs_editimg['thumb'];

}
else
{

//upload
move_uploaded_file($_FILES['img_upload']['tmp_name'], '../imagens/' . $_FILES["img_upload"]["name"]);
$imgcompleta = '../imagens/' . $_FILES["img_upload"]["name"];
$imgquebrar = $_FILES["img_upload"]["name"];
}


//ESTA PARTE SERÁ EXECUTADA SEMPRE, POIS ESTÁ FORA DOS IFs


//IMAGEM A SER ABERTA (800x640)
$imagem = $imgcompleta;

//DEFINE OS PARÂMETROS DA MINIATURA
$largura = 60;
$altura = 75;

//NOME DO ARQUIVO DA MINIATURA
$imagem_gerada = explode(".", $imgquebrar);
$imagem_gerada = "../imagens/".$imagem_gerada[0]."_mini.jpg";

//CRIA UMA NOVA IMAGEM
$imagem_orig = imagecreatefromjpeg($imagem);

//LARGURA
$pontoX = imagesx($imagem_orig);
//ALTURA
$pontoY = imagesy($imagem_orig);

//CRIA O THUMBNAIL
$imagem_fin = imagecreatetruecolor($largura, $altura);

//COPIA A IMAGEM ORIGINAL PARA DENTRO
imagecopyresampled($imagem_fin, $imagem_orig, 0, 0, 0, 0, $largura+1, $altura+1, $pontoX, $pontoY);

//SALVA A IMAGEM
imagejpeg($imagem_fin, $imagem_gerada, 100);

//grava nome pro banco
$nomethumb = $imagem_gerada;

Veja se é o resultado esperado.

Compartilhar este post


Link para o post
Compartilhar em outros sites

deu na mesma...o mesmo problema.essa parte q você deixou pra fora so deve ser executada se eu trocar a imagem, para criar a nova thumb da imagem q to trocando. se eu nao trocar nd, tem q manter o q ja ta gravado no banco.mas dentro ou fora do if, deu na mesma.:/tem alguma maneira de fazer com q essas funções não sejam executadas se eu não trocar a imagem, sem ser o if?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Se você incluir no else a parte que deixei fora não dá certo?

 

Não sei se entendi bem o problema... tire-me uma dúvida: se não for enviada nenhuma imagem, as únicas ações que deverão ser executadas são estas?

//se não mudar imagem
$imgcompleta = $row_rs_editimg['imagem'];
$nomethumb = $row_rs_editimg['thumb'];

Compartilhar este post


Link para o post
Compartilhar em outros sites

tambem não dá, tentei fazer isso!

 

exatamente, se eu não enviar imagem, devera acontecer isso:

 

//se não mudar imagem$imgcompleta = $row_rs_editimg['imagem'];$nomethumb = $row_rs_editimg['thumb'];

 

assim como, se eu enviar a imagem, devera acontecer isso:

//uploadmove_uploaded_file($_FILES['img_upload']['tmp_name'], '../imagens/' . $_FILES["img_upload"]["name"]);$imgcompleta = '../imagens/' . $_FILES["img_upload"]["name"];$imgquebrar = $_FILES["img_upload"]["name"];//IMAGEM A SER ABERTA (800x640)$imagem = $imgcompleta;//DEFINE OS PARÂMETROS DA MINIATURA$largura = 60;$altura = 75;//NOME DO ARQUIVO DA MINIATURA$imagem_gerada = explode(".", $imgquebrar);$imagem_gerada = "../imagens/".$imagem_gerada[0]."_mini.jpg";//CRIA UMA NOVA IMAGEM$imagem_orig = imagecreatefromjpeg($imagem);//LARGURA$pontoX = imagesx($imagem_orig);//ALTURA$pontoY = imagesy($imagem_orig);//CRIA O THUMBNAIL$imagem_fin = imagecreatetruecolor($largura, $altura);//COPIA A IMAGEM ORIGINAL PARA DENTROimagecopyresampled($imagem_fin, $imagem_orig, 0, 0, 0, 0, $largura+1, $altura+1, $pontoX, $pontoY);//SALVA A IMAGEMimagejpeg($imagem_fin, $imagem_gerada, 100);//grava nome pro banco$nomethumb = $imagem_gerada;

Compartilhar este post


Link para o post
Compartilhar em outros sites

ele dá os seguintes erros:

Warning: imagecreatefromjpeg() [function.imagecreatefromjpeg]: gd-jpeg: JPEG library reports unrecoverable error: in /Applications/MAMP/htdocs/marcoshermes/admin/edit_img.php on line 94Warning: imagecreatefromjpeg() [function.imagecreatefromjpeg]: '../imagens/' is not a valid JPEG file in /Applications/MAMP/htdocs/marcoshermes/admin/edit_img.php on line 94Warning: imagesx(): supplied argument is not a valid Image resource in /Applications/MAMP/htdocs/marcoshermes/admin/edit_img.php on line 97Warning: imagesy(): supplied argument is not a valid Image resource in /Applications/MAMP/htdocs/marcoshermes/admin/edit_img.php on line 99Warning: imagecopyresampled(): supplied argument is not a valid Image resource in /Applications/MAMP/htdocs/marcoshermes/admin/edit_img.php on line 105Warning: Cannot modify header information - headers already sent by (output started at /Applications/MAMP/htdocs/marcoshermes/admin/edit_img.php:94) in /Applications/MAMP/htdocs/marcoshermes/admin/edit_img.php on line 142

e cadastra no banco isso:no campo da imagem cadastra../imagem/e no campo da thumb../imagem/_mini.jpege gera a thumb _mini.jpeg, vaziaé como se ele ignorasse o else, e cadastrasse o "nada" q vem do campo.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Parece que o problema está na superglobal $_FILES, pois os nomes não estão sendo interpretados.

 

Faça o seguinte: coloque este código no topo da página e veja o que aparece:

 

echo "<pre>";
print_r($_FILES);
echo "</pre>";
exit;

Deverão ser exibidos todos os índices de $_FILES, com os respectivos valores. Se não aparecer, todo esse problema está sendo causado por erro no upload.

Compartilhar este post


Link para o post
Compartilhar em outros sites

O resto da página não apareceu pois eu inseri o exit;. ;)

 

Então o problema é no upload. Veja se a diretiva file_uploads está em on. Veja também se o tamanho do arquivo não está ultrapassando os valores das diretivas post_max_size e upload_max_filesize.

 

Tente deixar "post" em minúsculas, no atributo "method".

Compartilhar este post


Link para o post
Compartilhar em outros sites

ah, entendi :)!bom, dei uma olhada lá, file_uploads está on. Já post_max_size e upload_max_filesize tem 32 mb cada. Troquei o POST por post no method. Tá tudo certo mas continua igual.O problema é só quando não envio imagem, por que, quando envio, funciona normalmente.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Você entendeu, mas eu não! hahaha

 

Então o upload está correto. Provavelmente o código de criação de imagens está sendo executado usando os valores de $_FILES, que fica vazia quando não há uploads.

Não há mais coisa no código, pois, se você criar a condição adequadamente, com o código do seu post, as funções da GD não serão executadas.

 

Verifique se, fora da condição que verifica o upload, não está sendo usada a superglobal $_FILES em alguma parte.

 

Se não conseguir resolver, poste o código da maneira que ele está no momento.

Compartilhar este post


Link para o post
Compartilhar em outros sites

hehehe!

Então o upload está correto. Provavelmente o código de criação de imagens está sendo executado usando os valores de $_FILES, que fica vazia quando não há uploads.

sim, eh isso o q acontece, dentro ou fora de if...um if/else deveria resolver isso como você já mencionou, mas não rola!dei uma olhada, a única que tinha, removi mas continuou com o mesmo problema.só resta mais um, que está dentro de um outro if (tá aí no código) mas ele é usado em outro campo e funciona...é de vídeo, não tem nd a ver c imagem.o código está assim:
if(!isset($_FILES["img_upload"])){//se não mudar imagem$imgcompleta = $row_rs_editimg['imagem'];$nomethumb = $row_rs_editimg['thumb'];}else{//uploadmove_uploaded_file($_FILES['img_upload']['tmp_name'], '../imagens/' . $_FILES["img_upload"]["name"]);$imgcompleta = '../imagens/' . $_FILES["img_upload"]["name"];$imgquebrar = $_FILES["img_upload"]["name"];//IMAGEM A SER ABERTA (800x640)$imagem = $imgcompleta;//DEFINE OS PARÂMETROS DA MINIATURA$largura = 60;$altura = 75;//NOME DO ARQUIVO DA MINIATURA$imagem_gerada = explode(".", $imgquebrar);$imagem_gerada = "../imagens/".$imagem_gerada[0]."_mini.jpg";//CRIA UMA NOVA IMAGEM$imagem_orig = imagecreatefromjpeg($imagem);//LARGURA$pontoX = imagesx($imagem_orig);//ALTURA$pontoY = imagesy($imagem_orig);//CRIA O THUMBNAIL$imagem_fin = imagecreatetruecolor($largura, $altura);//COPIA A IMAGEM ORIGINAL PARA DENTROimagecopyresampled($imagem_fin, $imagem_orig, 0, 0, 0, 0, $largura+1, $altura+1, $pontoX, $pontoY);//SALVA A IMAGEMimagejpeg($imagem_fin, $imagem_gerada, 100);//grava nome pro banco$nomethumb = $imagem_gerada;}//se não for a categoria de vídeos, não carregar vídeo nenhum (engraçado q esse funciona)if ($_GET['id_cat']=="2"){$videocompleto = isset($_FILES["video"]) ? $_FILES["video"] : "";if(isset($_FILES["video"])){move_uploaded_file($_FILES['video']['tmp_name'], '../videos/' . $_FILES["video"]["name"]);}$videocompleto = '../videos/' . $_FILES["video"]["name"];}else{$videocompleto = "nulo";}//manda td pro bancoif ((isset($_POST["MM_update"])) && ($_POST["MM_update"] == "editimg")) {  $updateSQL = sprintf("UPDATE imagens SET imagem=%s, video=%s, thumb=%s, legenda_pt=%s, legenda_in=%s WHERE id_img=%s",					   GetSQLValueString($imgcompleta, "text"),					   GetSQLValueString($videocompleto, "text"),					   GetSQLValueString($nomethumb, "text"),					   GetSQLValueString($_POST['legenda_pt'], "text"),					   GetSQLValueString($_POST['legenda_in'], "text"),					   GetSQLValueString($_POST['id_img'], "int"));  mysql_select_db($database_mhfoto, $mhfoto);  $Result1 = mysql_query($updateSQL, $mhfoto) or die(mysql_error());
form
<form action="<?php echo $editFormAction; ?>" method="post" enctype="multipart/form-data" name="editimg" id="editimg"><input name="img_upload" id="img_upload" type="file" class="base_form" size="20"> //campo de imagem<?//se não for a categoria de vídeo, não exibe campo de vídeoif($_GET['id_cat']==2){echo "<input name=\"video\" type=\"file\" class=\"base_form\" size=\"20\">";}?><textarea name="legenda_pt" cols="20" rows="5" class="base_form" id="legenda_pt"><? echo $row_rs_editimg['legenda_pt']?></textarea><textarea name="legenda_in" cols="20" rows="5" class="base_form" id="legenda_in"><? echo $row_rs_editimg['legenda_in']?></textarea> <input name="id_img" type="hidden" value="<? echo $row_rs_editimg['id_img']?>">  <input name="back" type="button" class="base_form" onClick="history.back();" value="voltar">							   <input name="enviar" type="submit" value="enviar" class="base_form"><input type="hidden" name="MM_update" value="editimg">	</form>

Compartilhar este post


Link para o post
Compartilhar em outros sites

consegui!!!!

 

ja que essa funções do GD e o $_FILES querem trabalhar de novo, eu fingi que fiz o upload de novo:

 

if(!isset($_FILES["img_upload"])){//se não mudar imagem$_FILES["img_upload"]["name"] = $row_rs_editimg['imagem']; //puxei o endereço da imagem gravada, e ele "refaz" o upload e a thumb.}else{resto do codigo, sem alteracoes}
por enquanto deu certo...qqr coisa grito!

valeu a ajuda de vocês!

 

abs

tamires

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.