Jump to content
  • Revista PROGRAMAR: Já está disponível a edição #60 da revista programar. Faz já o download aqui!

Sign in to follow this  
Big-D

File Field get image [resolvido]

Recommended Posts

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?

Share this post


Link to post
Share on other 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....

Share this post


Link to post
Share on other 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.

Share this post


Link to post
Share on other 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.

Share this post


Link to post
Share on other sites
scorch

Mas imprime-a e verifica o caminho dela.


scorch_pp.png

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

Share this post


Link to post
Share on other 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....

Share this post


Link to post
Share on other 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?

Share this post


Link to post
Share on other 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"

Share this post


Link to post
Share on other 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.

Share this post


Link to post
Share on other 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...

Share this post


Link to post
Share on other 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.

Share this post


Link to post
Share on other 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

Share this post


Link to post
Share on other 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.

Share this post


Link to post
Share on other sites
jcfr

tenta substituir

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

por

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

no ficheiro editar

Share this post


Link to post
Share on other 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

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
Sign in to follow this  

×

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.