Ir para o conteúdo
  • Revista PROGRAMAR: Já está disponível a edição #60 da revista programar. Faz já o download aqui!

Big-D

File Field get image [resolvido]

Mensagens Recomendadas

Big-D

Boas!

Eu tenho o seguinte código:

<input type="file" name="imagem" src='<?php echo 'images/thumbs/'.$rows['imagem']?>'/>

O que eu pretendia com este código era no file field ele chamar o caminho mais o nome da imagem associada a um id, porque senão cada vez que eu editar um produto por exemplo eu tenho de voltar sempre a meter a imagem.

Sugestões?

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
jcfr

suponho que o que guardas na base de dados é o caminho da imagem certo?

supondo que estou certo quando actualizas o produto a imagem continua na mesma:

por exemplo se tiveres a tablea produtos:

id, nome, descricao, imagem

quando actualizares o produto fazes:

UPDATE produtos SET nome='$nome', descricao='$descricao' WHERE id=$id

desta forma nao mexes no campo imagem e nao precisas de nenhum campo imagem na form...

no caso de quereres actualizar tb a imgem verificas so se o campo está vazio, se estiver usas este update senao incluis o update da imagem...

EDIT: se por algum motivo isto nao for viavel para ti podes sempre fazer alteração da imagem separadamente....

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
Big-D

Ora, eu fiz o seguinte:

if (empty($_POST['imagem'])) {

//Writes the information to the database
mysql_query("UPDATE receitas SET descricao = '$descricao', visivel = '$visivel' WHERE idreceitas = '$id'") or die ('ERRO' .mysql_error());

echo "<script>alert('Editado com sucesso!'); window.location=\"mostrarreceitas.php\"</script>";

}
if(!empty($_POST['imagem'])){
mysql_query("UPDATE receitas SET descricao = '$descricao', imagem = '$pic', visivel = '$visivel' WHERE idreceitas = '$id'") or die ('ERRO' .mysql_error());

echo "<script>alert('Editado com sucesso!'); window.location=\"mostrarreceitas.php\"</script>";

if(move_uploaded_file($_FILES['imagem']['tmp_name'], $target)){

//Tells you if its all ok
echo "The file ". basename( $_FILES['imagem']['name']). " has been uploaded, and your information has been added to the directory";
}
	 }
}

contudo, ele funciona em parte mas quando faço o update com imagem ele insere-a na pasta thums mas continua a mostrar a imagem antiga.

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
scorch

A variável $pic tem o caminho correcto? Verifica isso. E senão, faz Ctrl + F5 (apaga a cache) para obrigar o browser a recarregar a imagem.


scorch_pp.png

PS: Não respondo a perguntas por mensagem que podem ser respondidas no fórum.

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
jcfr

entao é porque nao estás a receber o caminho da imagem.... por isso é que nao actualiza, assume a variavel como vazia e actualiza so os dados....

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
Big-D

A imagem está a ser posta na pasta thumbs contudo ele como disseste e bem nao actualiza o campo da imagem.

O que me sugeres fazer?

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
jcfr

se ao imprimir a variavel nao mostra nada é porque nao estas a passar bem o caminho da imagem ou podes estar a substituir o valor da variavel sem dares conta, nao posso dizer com certeza sem ver o codigo que tens para passar o caminho....

ou provavelmente pode faltar-te isto no formulario de edição:

enctype="multipart/form-data"

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
Big-D

O caminho da imagem esta a ser passado bem pois ele adiciona nas pastas a nova imagem, contudo nao a aplica no update ficando com a imagem anterior.

E não falta o enctype no form.

<?php 
$pic =($_FILES['imagem']['name']);
$visivel = empty($_POST['checkbox'])?0:1;

// If the button of form is clicked then we will insert all the stuff in our DataBase
if ($_POST['upload']) {
if(preg_match('/[.](jpg)|(gif)|(png)$/', $_FILES['imagem']['name'])) {  
  
        $filename = $pic;  
        $source = $_FILES['imagem']['tmp_name'];  
        $target = $path_to_image_directory . $filename;  
  
        move_uploaded_file($source, $target);  
  
        createThumbnail($filename);  
    }  


//This is the directory where images will be saved

// Here we verify that requireds textfields aren't emptys
if (empty($_POST['descricao'])) {

// If they're empty, then we put a message to alert the user	
	echo "<script>alert('Por favor preencha todos os campos obrigatórios(*)'); window.location=\"editarnoticias.php?id=$id\"</script>";
						// Verifying if exists user or not
	 }else{
//Writes the information to the database
mysql_query("UPDATE noticias SET descricao = '$descricao', imagem = '$pic', visivel = '$visivel' WHERE idnoticias = '$id'") or die ('ERRO' .mysql_error());

echo "<script>alert('Editado com sucesso!'); window.location=\"mostrarnoticias.php\"</script>";
	 if(move_uploaded_file($_FILES['imagem']['tmp_name'], $target)){

//Tells you if its all ok
echo "The file ". basename( $_FILES['imagem']['name']). " has been uploaded, and your information has been added to the directory";

}
else {

//Gives and error if its not
echo "Sorry, there was a problem uploading your file.";
}
	 }
}

?>

neste código esta a pagina de edição.

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
jcfr

coloca no update $filename em vez de $pic

pelo que vi deviam ter o mesmo valor e ao enviares $filename para o createThumbnail() ele adiciona a imagem ou seja $filename tem o nome da imagem por isso se o usares na actualização nao deves ter problemas...

nao percebo porque usas a variavel $pic se a seguir usas uma com outro nome sempre com o mesmo valor, tens uma declaração de uma segunda variavel desnecessáriamente...

a nao ser que me esteja a falhar qualquer coisa...

faz um echo da variavel $filename e ve o que aparece...

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
Big-D

Tendo alterado a variavel $pic para $filename continua a mesma coisa, ou seja, ele adiciona na pasta thumbs mas nao faz o update da imagem, continua com a default.

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
jcfr

tenta fazer o upload mas em vez de ter o nome original o ficheiro ter o nome da imagem que ja la estava antes, assim substitui a que tinhas, poupas espaço no servidor porque vais ter sempre apenas uma e nao tens de estar a apagar imagens, isto claro no caso de so ter uma imagem... mas se a impressao das variaveis nao apresentao nada é normal que nao faça nada...

tens de ver porque é que a variavel está vazia

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
Big-D

Config2.php

<?php $final_width_of_image = 200;  
$final_height_of_image = 200;
$path_to_image_directory = 'images/banners/fullsized/';  
$path_to_thumbs_directory = 'images/banners/mediumsize/';?>

Function2.php

<?php function createThumbnail2($filename2) {  
  
    require 'config2.php';  
  
    if(preg_match('/[.](jpg)$/', $filename2)) {  
        $im = imagecreatefromjpeg($path_to_image_directory . $filename2);  
    } else if (preg_match('/[.](gif)$/', $filename2)) {  
        $im = imagecreatefromgif($path_to_image_directory . $filename2);  
    } else if (preg_match('/[.](png)$/', $filename2)) {  
        $im = imagecreatefrompng($path_to_image_directory . $filename2);  
    }  
  
    $ox = imagesx($im);  
    $oy = imagesy($im);  
  
    $nx = $final_width_of_image;  
    $ny = $final_height_of_image;  
  
    $nm = imagecreatetruecolor($nx, $ny);  
  
    imagecopyresized($nm, $im, 0,0,0,0,$nx,$ny,$ox,$oy);  
    
    if(!file_exists($path_to_thumbs_directory)) {  
      if(!mkdir($path_to_thumbs_directory)) {  
           die("There was a problem. Please try again!");  
      }  
       }  
  
    imagejpeg($nm, $path_to_thumbs_directory . $filename2);  
}  ?>

Editar

<?php

include ("connection.inc");
	// obtemos o número do ID
	$id = $_GET['id']; 

// Vamos buscar o user que queremos pelo ID
$makequery = mysql_query("SELECT * FROM imagens WHERE idimagem = '$id'") or die ('Erro ao obter o ID <br />' .mysql_error());
$check = mysql_num_rows($makequery);
$rows= mysql_fetch_array($makequery);

// Caso o botão edit não seja pressionado
if (!$_POST['upload']) {

    // Se não houver resultados:
    if ($check < 1) {
        echo 'The user with the id <b>'.$id.'</b> does not exist!';
    }
    else {
}
}
        // Mostramos o form
        ?>
        <div id="apDiv3"></div>
<div id="apDiv2"><h2>Editar Notícias</h2></div>
<div id="apDiv1" style="border:groove; width:350px">
  <form action="" method="post" name="form1"  enctype="multipart/form-data">
      <p>Thumbnail(*):
        <input type='image' name='file' id='imageField' src='<?php echo 'images/banners/mediumsize/'.$rows['imagem']?>' />
       
          <input type="file" name="imagem"/>
          <br />
          <br />
          <select name="url">
          <option value="s-produtos-infonoticias.php">Informação Notícias</option>
          <option value="s-produtos-inforeceitas.php">Informação Receitas</option>
        </select>
      </p>
      <p>Banner1
        <input name="checkbox3" type="checkbox" id="checkbox" value="<?php echo $rows['idimagem'];?>" <?php if($rows['Banner1'] == '3') echo 'checked = "checked"';?> />
        Banner2
        <input name="checkbox4" type="checkbox" id="checkbox" value="<?php echo $rows['idimagem'];?>" <?php if($rows['Banner2'] == '4') echo 'checked = "checked"';?> />
        Banner3
        <input name="checkbox5" type="checkbox" id="checkbox" value="<?php echo $rows['idimagem'];?>" <?php if($rows['Banner3'] == '5') echo 'checked = "checked"';?> />
      </p>
      <p>Visivel:
        <input type="checkbox" name="checkbox" value="<?php echo $rows['idimagem'];?>" <?php if($rows['visivel'] == '1') echo 'checked = "checked"';?>/>
      </p>
      <p>
        <input TYPE="submit" name="upload" title="Add data to the Database" value="Editar"/>
      </p>
</form>
  <?php 
require 'config2.php';  
require 'functions2.php';

//This gets all the other information from the form
$imagem = $rows['imagem'];
$pic =($_FILES['imagem']['name']);
$visivel = empty($_POST['checkbox'])?0:1;
$Banner1 = empty($_POST['checkbox3'])?0:3;
$Banner2 = empty($_POST['checkbox4'])?0:4;
$Banner3 = empty($_POST['checkbox5'])?0:5;


// If the button of form is clicked then we will insert all the stuff in our DataBase
if ($_POST['upload']) {
if(preg_match('/[.](jpg)|(gif)|(png)$/', $_FILES['imagem']['name'])) {  
  
        $filename2 = $pic;  
        $source = $_FILES['imagem']['tmp_name'];  
        $target = $path_to_image_directory . $filename2;  
  
        move_uploaded_file($source, $target);  
  
        createThumbnail2($filename2);  
    }  


if(!empty($_POST['imagem'])){
mysql_query("UPDATE imagens SET imagem = '$filename2', visivel = '$visivel', url = '$url', Banner1 = '$Banner1', Banner2 = '$Banner2', Banner3 = '$Banner3' WHERE idimagem = '$id'") or die ('ERRO' .mysql_error());

echo "<script>alert('Editado com sucesso!'); window.location=\"mostrarimagens.php\"</script>";

if(move_uploaded_file($_FILES['imagem']['tmp_name'], $target)){

//Tells you if its all ok
echo "The file ". basename( $_FILES['imagem']['name']). " has been uploaded, and your information has been added to the directory";
}
	 }
if (empty($_POST['imagem'])) {
//Writes the information to the database
mysql_query("UPDATE imagens SET visivel = '$visivel', url = '$url', Banner1 = '$Banner1', Banner2 = '$Banner2', Banner3 = '$Banner3' WHERE idimagem = '$id'") or die ('ERRO' .mysql_error());

echo "<script>alert('Editado com sucesso!'); window.location=\"mostrarimagens.php\"</script>";

}
}	
?>

Este é o código que tenho para fazer a edição de imagem.

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
Big-D

Fiz o que me disseste mas não funcionou porque tive que alterar

if(!empty($_FILES['imagem'])){

para

if(!empty($_FILES['imagem']['name'])){

e ficou a funcionar. Muito obrigado

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!

Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.

Entrar Agora

×

Aviso Sobre Cookies

Ao usar este site você aceita os nossos Termos de Uso e Política de Privacidade. Este site usa cookies para disponibilizar funcionalidades personalizadas. Para mais informações visite esta página.