1. Este site usa cookies. Ao continuar a usar este site está a concordar com o nosso uso de cookies. Saber Mais.

Editar outros campos sem "ELIMINAR" imagem

Discussão em 'Web Development' iniciada por toblesu, 28 de Fevereiro de 2008. (Respostas: 2; Visualizações: 608)

  1. toblesu

    toblesu Power Member

    OIas...

    este é o meu código para editar um formulário:

    if ($opcao == 'Guardar')
    {
    $ref = $_POST['ref'];
    $imag_ant = $_POST['img'];


    $erro = $config = array();

    // retirar o espaço no titulo, por causa de depois dar o nome à imagem
    $ref = ereg_replace("[^a-zA-Z0-9_.]", "", strtr($ref, "áàãâéêíóôõúüçÁÀÃÂÉÊÍÓÔÕÚÜÇ ", "aaaaeeiooouucAAAAEEIOOOUUC_"));

    // Prepara a variável do arquivo
    $arquivo = isset($_FILES["imagem"]) ? $_FILES["imagem"] : FALSE;

    // Tamanho máximo do arquivo (em bytes)
    $config["tamanho"] = 106883;
    // Largura máxima (pixels)
    $config["largura"] = 700;
    // Altura máxima (pixels)
    $config["altura"] = 700;

    // Formulário postado... executa as ações
    if($arquivo)
    {
    // Verifica se o mime-type do arquivo é de imagem
    if(!eregi("^image\/(pjpeg|jpeg|png|gif|bmp)$", $arquivo["type"]))
    {
    $erro[] = "Arquivo em formato inválido! A imagem deve ser jpg, jpeg,
    bmp, gif ou png. Envie outro arquivo";
    }
    else
    {
    // Verifica tamanho do arquivo
    if($arquivo["size"] > $config["tamanho"])
    {
    $erro[] = "Arquivo tem um tamanho muito grande!
    A imagem deve ser de no máximo " . $config["tamanho"] . " bytes.
    Envie outro arquivo";
    }

    // Para verificar as dimensões da imagem
    $tamanhos = getimagesize($arquivo["tmp_name"]);

    // Verifica largura
    if($tamanhos[0] > $config["largura"])
    {
    $erro[] = "Largura da imagem não deve ultrapassar " . $config["largura"] . " pixels";
    }

    // Verifica altura
    if($tamanhos[1] > $config["altura"])
    {
    $erro[] = "Altura da imagem não deve ultrapassar " . $config["altura"] . " pixels";
    }
    }

    // Imprime as mensagens de erro
    if(sizeof($erro))
    {
    foreach($erro as $err)
    {
    header("location:../index.php?alt_cliente=".md5(5));
    }

    }

    // Verificação de dados OK, nenhum erro ocorrido, executa então o upload...
    else
    {
    // Ver qual a extensão do arquivo
    preg_match("/\.(gif|bmp|png|jpg|jpeg){1}$/i", $arquivo["name"], $ext);
    // Caminho onde a imagem ficará
    $imagem_dir = "../catalogoIMG/$ref".$ext[0] ;

    //Elimina a imagem antiga
    $dir = "../catalogoIMG/$imag_ant";
    unlink($dir);

    // Faz o upload da imagem
    move_uploaded_file($arquivo["tmp_name"], $imagem_dir);
    $imagem_n=$ref.$ext[0] ;
    }
    }

    //GUARDA OS VALORES NA BASE DE DADOS
    $ref = $_POST['ref'];
    $desc = $_POST['desc'];
    $stock = $_POST['stock'];
    $pvp = $_POST['pvp'];
    $cod_linha = $_POST['linha'];
    $linha_ant = $_POST['linha_ant'];
    //echo "nao entrou!";

    $alt_prod = "UPDATE produtos set descritivo='$desc', stock='$stock', pvp='$pvp',imag='$imagem_n', cod_linha='$cod_linha' where referencia='$ref'";
    // executa a query
    $sql=mysql_query($alt_prod) or die(mysql_error());
    if(($sql))
    {
    header("location: ../index.php?cod_pag=edit_prod");
    }
    else
    {
    header("location: ../index.php?alt_cliente=".md5(4));
    }
    }

    as imagens são guardadas numa pasta e o nome com que fica guardada a imagem nessa pasta é guardada na Base de dados.

    O meu problema é que nao consigo arranjar forma de so puder editar o campo, por exemplo "artigo" (
    $desc = $_POST['desc'];), sem apagar ao nome da imagem da BD, com este código qq edição no formulario sem intreferir com a imagem faz com que o nome desta seja apagado da BD, permanecendo na pasta.

    a linha relativa à entrada de imagens é:
    <input type="file" name="imagem"/><input type="hidden" name="img" id="img" value="<? echo $refr['imag']; ?>" />

    Gostaria que me ajudassem a descobrir uma forma de verificar se houve alguma entrada neste campo "imagem", ou seja que o conteúdo fosse !="" e se fosse então procederia à edição da imagem, senão, nao interferiria...

    espero ter-me feito entender!

    Obrigado.


     
  2. p3dro

    p3dro Power Member

    Podes por ex. criar uma variável auxiliar que te vai permitir alterar ou não o campo "imag" da tua tabela

    PHP:
    $sql_aux_img=($imagem_n)?",imag='$imagem_n' ":"";
    $alt_prod "UPDATE produtos set descritivo='$desc', stock='$stock', pvp='$pvp$sql_aux_img, cod_linha='$cod_linha' where referencia='$ref'";
    Se a variável "$imagem_n" tiver algum valor, a "$sql_aux_img" vai construir essa parte da actualização da imagem ",imag='$imagem_n' ", caso contrário, fica vazia. Depois na tua instrução update "$alt_prod", adicionas a variável "$sql_aux_img" à instrução, tendo o cuidado de verificar se depois a instrução vai bater certo, por ex. por causa da virgula.

    ... E tem cuidado com sql injection :x2:
     
    Última edição: 28 de Fevereiro de 2008
  3. toblesu

    toblesu Power Member

    Obrigado!!!

    Funciona!
     

Partilhar esta Página