Jump to content


Photo

Dúvida Com Upload Renomeando Arquivo


  • Faça o login para participar
19 replies to this topic

#1 possamai

possamai

    Loading Intelligence... :)

  • Usuários
  • 146 posts
  • Sexo:Masculino
  • Localidade:Toledo
  • Interesses:Programação, Website, Manutenção em computadores, quase tudo relacionado á Informática.

Posted 02/02/2007, 02:54

Dae galera.. firmeza?

bem.. eu to querendo faze um cadastro de produto com foto. Já montei toda a estrutura e ta tudo funcionando menos a parte de auto-incremento.

Bem.. na minha tabela Php-myAdmin a id ta como auto-increment. ae quando eu usava o cadastro sem passar a id, ela incrementava sozinha. Até aí tudo bem.

Quando eu coloquei a parte do upload (ele funciona certinho), eu precisava pegar a id que eu havia cadastrado e upar renomeando a foto do produto usando a id do banco. Aí eu fuçei na net e achei este comando: mysql_insert_id();, que parece que pega a ultima inserção do banco, ae eu fiz o seguinte.
$x = mysql_query("INSERT INTO produtos (descricao,id_tamanho) VALUES ('$descricao,$id_tamanho')");
	$id = mysql_insert_id();
...
...
..	$novo_nome = $id.".".$nome_original[1];

Então.. depois que eu comecei a usa esse mysql_insert_id, ele parou de incrementar, ae ele não esta mais cadastrando nada.

Ae vem a dúvida, qual a melhor maneira pra pegar a id que eu cadastrei, e renomear a imagem que vou upar?

No aguardo,
Abraços,
Possamai
"Quem ri por último é retardado! (Ou tem "Lag")"
-----------------
Aprendendo PHP .. Javascript .. Ajax!

#2 Paulo André

Paulo André

    Why so serious?

  • Ex-Admins
  • 5114 posts
  • Sexo:Masculino
  • Localidade:Belo Horizonte - MG
  • Interesses:O.Q.F.J.?

Posted 02/02/2007, 06:57

Esse id que está no banco é chave primária?

Flws...
:ponder: Até mais
Paulo André G Rodrigues,
ex-administrador Fórum WMO.


www.CanalDev.com.br

#3 Petry

Petry

    Veterano

  • Usuários
  • 1132 posts
  • Sexo:Masculino
  • Localidade:Caxias do Sul - RS
  • Interesses:- desenvolvimento WEB<br />- websemântica<br />- microformatos

Posted 02/02/2007, 07:33

bom, normalmente eu uso esta técnica ou crio um campo no banco e renomeio o arquivo para sero o mesmo numero do timestamp qe foi cadastrado e adiciono este timestam no campo. mas isso não vem muito ao caso...

o fato eh que se voce usar o mysql_insert_id() depois da função mysql_query() que contenha um SQL do tipo INSERT, TEM q funcionar (se tiver um campo auto incremento como chave primária)

de um print na função e veja o que retorna, ok?

Posted Image

- Desenvolvedor Python/ZOPE/Plone + ArchGenXML/Poseidon - Python + Django na Universidade de Caxias do Sul
- Desenvolvedor Python + Django na World News

Blog

#4 possamai

possamai

    Loading Intelligence... :)

  • Usuários
  • 146 posts
  • Sexo:Masculino
  • Localidade:Toledo
  • Interesses:Programação, Website, Manutenção em computadores, quase tudo relacionado á Informática.

Posted 02/02/2007, 12:43

Dae galera.. blz?

Bem.. a id é chave primária sim...
Olhem como ta meu banco:
Posted Image

e aqui meu código que vem depois do meu formulário:

<?
include "valida.php3";
include "config.php3";

// Declara variáveis padrão
$dir = "produto/"; // Pasta para onde as fotos serão upadas
$ext = array("gif","jpg","png","GIF","JPG","PNG"); // Extensões aceitas
$t_maximo = 1000000; // Tamanho Máximo da Imagem Aceito - em bytes
$erro = ""; // Sem erros
$descricao = $_POST['descricao']; //Pega valor do Formulário
$id_tamanho = $_POST['id_tamanho']; //Pega valor do Formulário

// Parametros de medida das Imagens
$largura_mini = 80;
$altura_mini = 60;
$largura_original = 350;
$altura_original = 263;

// Obtendo Informação do Arquivos
$f_name = $_FILES['foto']['name']; // Nome do Arquivo
$f_tmp = $_FILES['foto']['tmp_name']; // Temp do Arquivo
$f_type = $_FILES['foto']['type']; // Tipo do Arquivo
$f_tamanho = $_FILES["foto"]["size"]; // Tamanho do Arquivo

$name = $f_name;

// Fazendo Testes
if ($f_name == "") { //Se é vazio
$erro = "Não foi selecionado nenhum arquivo.";
} elseif (!in_array(substr($name, -3),$ext)) { //Se é imagem
$erro = "O arquivo selecionado não é uma Imagem.";
} elseif (ereg("[][><}{)(:;,!?*%&#@]", $name)) { //Se não tem carácteres inválido
$erro = "O nome do arquivo contém caracteres inválidos";
} elseif ($f_tamanho > $t_maximo) { //Se a imagem é muito grande
$erro = "O tamanho máximo permitido é de 1MB";
}

// Inicia processo de upload e gravação no banco se não tiver nenhum erro com a imagem.
if ($erro == "") {

// Grava no Banco de Dados o Cadastro
$x = mysql_query("INSERT INTO produtos (descricao,id_tamanho) VALUES ('$descricao,$id_tamanho')");
$id = mysql_insert_id();

// Nome do arquivo da miniatura e Original
$nome_original = explode(".", $f_name);
$novo_nome = $id.".".$nome_original[1];
$novo_nome_mini = $id."_mini".".".$nome_original[1];

// Cria uma nova Imagem
$imagem_orig = ImageCreateFromJPEG($f_tmp);
$pontoX = ImagesX($imagem_orig); //Largura
$pontoY = ImagesY($imagem_orig); //Altura

// Cria a Miniatura
$imagem_mini = ImageCreateTrueColor($largura_mini, $altura_mini);
$imagem_original = ImageCreateTrueColor($largura_original, $altura_original);

// Copia as Imagens Original e Miniatura para Pasta
ImageCopyResampled($imagem_mini, $imagem_orig, 0, 0, 0, 0, $largura_mini+1, $altura_mini+1, $pontoX, $pontoY);
ImageCopyResampled($imagem_original, $imagem_orig, 0, 0, 0, 0, $largura_original+1, $altura_original+1, $pontoX, $pontoY);

// Salva a Imagem na Pasta
ImageJPEG($imagem_mini, $dir.$novo_nome_mini);
ImageJPEG($imagem_original, $dir.$novo_nome);

// Libera a Memória
ImageDestroy($imagem_orig);
ImageDestroy($imagem_mini);
ImageDestroy($imagem_original);

echo "Cadastrado com Sucesso!";
echo "<p><a href= lista_produto.php3>Clique aqui para voltar a lista de Produtos.</a></p>";
echo $id;
} else {
echo "Erro ao Cadastrar:";
echo "<p>$erro</p>";
echo "<p><a href= lista_produto.php3>Clique aqui para voltar a lista de Produtos.</a></p>";
}


Então.. Petry, como funciona esse esquema do print para ver o resultado, através do echo?? (desculpe a ignorância, to meio confuso ainda com o php, to tentando juntar as dicas pra montar um arquivo só)

Então, ele ta retornando como cadastrado com sucesso, mais quando após o insert se eu imprimir o $id = mysql_insert_id();, o $id sempre me retorna como 0, e quando verifico no PHPMyAdmin, não tem nada cadastrado. A não ser que eu cadastre manualmente pelo MyAdmin, O que eu tenho a impressão é que ele não ta iniciando a contagem das id's, fica sempre no 0 (zero).

Eu tinha pensando em acrescentar um campo na tabela com o nome da foto, mais achei desnecessário levando em consideração que o nome do arquivo teria o mesmo no me da id, portando na hora de mostrar a foto correspondente ao id, somente puxaria $x['id].".jpg" ... Não esta correto meu raciocionio??

Tentei procurar como "renomear", "upload", mais não encontrei nada relacionado.
No aguardo e desde já agradeço a colaboração.
Abraços,
Possamai
"Quem ri por último é retardado! (Ou tem "Lag")"
-----------------
Aprendendo PHP .. Javascript .. Ajax!

#5 Petry

Petry

    Veterano

  • Usuários
  • 1132 posts
  • Sexo:Masculino
  • Localidade:Caxias do Sul - RS
  • Interesses:- desenvolvimento WEB<br />- websemântica<br />- microformatos

Posted 02/02/2007, 13:02

bom tente fazer o seguinte na função mysql_query() colocque uma excessão, para ver se não está gerando algum erro

mysql_query("insert into...) or die(mysql_error());

se não retornar nenhum erro, vamos forçcar que o mysql_insert_id() irá usar a query query q vc quer (eu naum tenho 100% de certeza que isso funciona, e eu naum tenho php no meu pc do trampo pra testar :( mas axo q roal sim! :P
$id = mysql_insert_id($x);

Posted Image

- Desenvolvedor Python/ZOPE/Plone + ArchGenXML/Poseidon - Python + Django na Universidade de Caxias do Sul
- Desenvolvedor Python + Django na World News

Blog

#6 possamai

possamai

    Loading Intelligence... :)

  • Usuários
  • 146 posts
  • Sexo:Masculino
  • Localidade:Toledo
  • Interesses:Programação, Website, Manutenção em computadores, quase tudo relacionado á Informática.

Posted 02/02/2007, 16:17

bom tente fazer o seguinte na função mysql_query() colocque uma excessão, para ver se não está gerando algum erro

mysql_query("insert into...) or die(mysql_error());

se não retornar nenhum erro, vamos forçcar que o mysql_insert_id() irá usar a query query q vc quer (eu naum tenho 100% de certeza que isso funciona, e eu naum tenho php no meu pc do trampo pra testar :( mas axo q roal sim! :P
$id = mysql_insert_id($x);


Então petry... coloquei o or die no final do query, e na hora de cadastrar apareceu a seguinte mensagem:
Contagem de colunas não confere com a contagem de valores na linha 1.

Aí verifiquei se os nomes do banco conferem com os do Insert, quantidade de colunas, etc, e a princípio está tudo normal...

Tem idéia do que pode ser? O que seria essa contegem de colunas?

Obrigadão pela força ae Brô. :lol:

Abraços,
Possamai
"Quem ri por último é retardado! (Ou tem "Lag")"
-----------------
Aprendendo PHP .. Javascript .. Ajax!

#7 Noturno

Noturno

    12 Horas

  • Usuários
  • 183 posts
  • Sexo:Não informado

Posted 02/02/2007, 16:19

select max(id) from tabela

Simples assim, ele vai trazer o maior ID do banco.
"Não há maior demonstração de insanidade do q fazer a mesma coisa, da mesma forma, dia após dia, e esperar resultados diferentes"
MCP .NET WebApplications C#
MCP SQL Server 2000
Desenvolvedor Delphi/PHP

#8 Paulo André

Paulo André

    Why so serious?

  • Ex-Admins
  • 5114 posts
  • Sexo:Masculino
  • Localidade:Belo Horizonte - MG
  • Interesses:O.Q.F.J.?

Posted 02/02/2007, 16:24

Na verdade não confere mesmo. :)

Vamos ver o tira-teima! :rolleyes:

$x = mysql_query("INSERT INTO produtos (descricao,id_tamanho) VALUES ('$descricao,$id_tamanho')");


De vermelho são as colunas na sua tabela, que são duas: descricao e id_tamanho
De azul é o conteúdo que você quer adicionar. Só um. Bingo! :aplauder:

Perceba a delimitação dos apóstrofes: '$descricao,$id_tamanho'

E eis como realmente funcionaria:
$x = mysql_query("INSERT INTO produtos (descricao, id_tamanho) VALUES ('$descricao', '$id_tamanho')");

Confere ai e me fale.

Flws...
(ok2)Até mais
Paulo André G Rodrigues,
ex-administrador Fórum WMO.


www.CanalDev.com.br

#9 Petry

Petry

    Veterano

  • Usuários
  • 1132 posts
  • Sexo:Masculino
  • Localidade:Caxias do Sul - RS
  • Interesses:- desenvolvimento WEB<br />- websemântica<br />- microformatos

Posted 02/02/2007, 16:35

pois eh, esse tipo de coisa, soh vendo mesmo com a excessão, dei uma BOA olhada no código antes de postar a mensagem anterior, e não me dei conta da aspa simples!

Posted Image

- Desenvolvedor Python/ZOPE/Plone + ArchGenXML/Poseidon - Python + Django na Universidade de Caxias do Sul
- Desenvolvedor Python + Django na World News

Blog

#10 Noturno

Noturno

    12 Horas

  • Usuários
  • 183 posts
  • Sexo:Não informado

Posted 02/02/2007, 16:39

Utilize da forma que eu falei que vc vai obter o ultimo id de forma mais fácil
"Não há maior demonstração de insanidade do q fazer a mesma coisa, da mesma forma, dia após dia, e esperar resultados diferentes"
MCP .NET WebApplications C#
MCP SQL Server 2000
Desenvolvedor Delphi/PHP

#11 Paulo André

Paulo André

    Why so serious?

  • Ex-Admins
  • 5114 posts
  • Sexo:Masculino
  • Localidade:Belo Horizonte - MG
  • Interesses:O.Q.F.J.?

Posted 02/02/2007, 16:42

Utilize da forma que eu falei que vc vai obter o ultimo id de forma mais fácil

Creio que resolvendo este problema dos apóstrofes irá resolver e funcionar a função mysql_insert_id() que ele estava tentando fazer. Mais uma consulta ao banco é desnecessário.

Flws...
(ok2)Até mais
Paulo André G Rodrigues,
ex-administrador Fórum WMO.


www.CanalDev.com.br

#12 Petry

Petry

    Veterano

  • Usuários
  • 1132 posts
  • Sexo:Masculino
  • Localidade:Caxias do Sul - RS
  • Interesses:- desenvolvimento WEB<br />- websemântica<br />- microformatos

Posted 02/02/2007, 16:45

Utilize da forma que eu falei que vc vai obter o ultimo id de forma mais fácil


na verdade não vai obter não, pois a consulta não está sendo executada corretamente teria que arrumar o problema dos apóstofes, como o Frenesi flw, ai sim vai funcionar...

Posted Image

- Desenvolvedor Python/ZOPE/Plone + ArchGenXML/Poseidon - Python + Django na Universidade de Caxias do Sul
- Desenvolvedor Python + Django na World News

Blog

#13 Rodrigo

Rodrigo

    oi!

  • Usuários
  • 995 posts
  • Sexo:Não informado
  • Interesses:Diretório de sites - http://www.acheinobrasil.com.br

Posted 02/02/2007, 16:45

Utilize da forma que eu falei que vc vai obter o ultimo id de forma mais fácil



no entanto, se for um sistema com vários usuários simultâneos pode dar problema.

o ideal eh usar os campos recem inseridos como critérios da consulta ;)

#14 Noturno

Noturno

    12 Horas

  • Usuários
  • 183 posts
  • Sexo:Não informado

Posted 02/02/2007, 16:47

mysql_insert_id() faz basicamente a msm coisa que o que eu passei.
Com relação a processamento, ele vai consultar o banco.
"Não há maior demonstração de insanidade do q fazer a mesma coisa, da mesma forma, dia após dia, e esperar resultados diferentes"
MCP .NET WebApplications C#
MCP SQL Server 2000
Desenvolvedor Delphi/PHP

#15 possamai

possamai

    Loading Intelligence... :)

  • Usuários
  • 146 posts
  • Sexo:Masculino
  • Localidade:Toledo
  • Interesses:Programação, Website, Manutenção em computadores, quase tudo relacionado á Informática.

Posted 02/02/2007, 16:48

Bahhh rapaz!!!!.. Realmente Bingo!! :D

Putz.. nem tinha percebido tbm.. é tanto código que me perdi nas simples aspas.. :wacko:

Noturno, vlw pela dica, mais ainda acho dessa maneira mais prática do que ter que ficar fazendo Select ao banco. Mais valeu mesmo.

Funciono tudo certinho, upload, resize, cadastro. Só tenho uma pequena dúvida, não relacionada ao código. Tava vendo que essa parte de Upload e resize de imagem, precisa de ter albuma biblioteca instalada no servidor Web que hospedarei o site. No caso aqui em casa, localmente está funcionando, mais como vou saber se preciso instalar no servidor?? Essa parte de biblioteca não tenho a mínima idéia de como funciona.

Pessoal, por enquanto.. valeu de coração pela ajuda.. E Let´s go!

Abraços..
Possamai (y)
"Quem ri por último é retardado! (Ou tem "Lag")"
-----------------
Aprendendo PHP .. Javascript .. Ajax!




0 user(s) are reading this topic

0 membro(s), 0 visitante(s) e 0 membros anônimo(s)

IPB Skin By Virteq