Jump to content


Photo

Datas Com Perl-cgi E Mysql


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

#1 andrelatansio

andrelatansio

    Novato no fórum

  • Usuários
  • 8 posts
  • Sexo:Não informado
  • Interesses:linux, redes, webdesign, programação ....

Posted 11/02/2005, 13:36

Boa Tarde Galera !!!

Estou guardando datas em um banco MySQL, mas sem nenhum tratamento antes de gravar, apenas pego o valor digitado no textfield e jogo no banco. Estou tendo problemas quando recupero os dados do banco e os jogo novamente em um textfiled obtenho valores errados, como 2010-10-10 e creio que o problema esteja sendo causado por falta de tratamento das datas na hora de gravar no banco e também de recuperar. Alguém sabe como resolver isso ??!!!

Um abraço,

André.
André Luiz Latansio de Oliveira

#2 jgcl

jgcl

    João Gabriel C. Laass, Serra/ES

  • Usuários
  • 559 posts
  • Sexo:Não informado
  • Localidade:Serra / ES
  • Interesses:Tudo!

Posted 11/02/2005, 15:05

O MySQL tá retornando o que foi gravado.

Então, se gravou o valor errado, vai retornar esse valor errado.
(creio q não precisa de um tratamento pra resgatar as travas, a não ser que você grave-as em um formato que exija isso)

Na hora de inserir as datas no banco de dados você tem que gravar assim: dia-mes-ano.

Esse resultado que você mostrou eu não entendi..

flw
João Gabriel
Site >> joaogabriel.org
CGiClube.net >> http://www.cgiclube.net
Vitória Perl Mongers >> http://vitoria.pm.org

#3 prix

prix

    Duracell: E Duram, Duram, Duram...

  • Usuários
  • 562 posts
  • Sexo:Não informado
  • Interesses:keep walking ...
    jonny walker

Posted 11/02/2005, 19:27

mostra ai como vc criou a tabela, para podermos analisar como vc esta salvando os dados e te informarmos a melhor forma de como faze-lo

pois o mysql tem variaveis proprias para adicioanr data-hora assim vc nao precisa adicionar via perl.

sendo a data-hora do mysql as mesmas do servidor.

print join'',(reverse  map{/d([a-z])d/}split/W/,'$5x6@314&60f%3i4#moo^1r2#moo^1p2')," ", pack ("B*",'01110000011001010111001001101100')," ", pack ("B*",'011011010110111101101110011010110110010101111001'), "n";
sleep 5;


E-Mails, topicos ou mensagens privadas não serão respondidas a menos que eu considere uma relevancia/necessidade na mesma.

#4 andrelatansio

andrelatansio

    Novato no fórum

  • Usuários
  • 8 posts
  • Sexo:Não informado
  • Interesses:linux, redes, webdesign, programação ....

Posted 15/02/2005, 09:46

Bom Dia Galera !!!

Então jgcl, eu queria guardar a data neste formato DD/MM/YYYY, mas so consigo guradar no formato YYYY/MM/DD ... se tento guardar como Dd/MM/YYYY ele quando tento recuperar a data ele me retorna um valor absurdo ... gostaria de saber uma forma de guardar no formato DD/MM/YYYY ou como tratar a data para exibir neste formato.

prinx, quanto a meneira como estou tentando gravar os dados na tabela ... tenho um campo definido como DATE na tabela e uso o comando SQL: insert into tabela (campos) values (valores) ... onde em valores colco minhas variaveis em perl que receberam os valores dos campos html.

Um abraço.
André Luiz Latansio de Oliveira

#5 jgcl

jgcl

    João Gabriel C. Laass, Serra/ES

  • Usuários
  • 559 posts
  • Sexo:Não informado
  • Localidade:Serra / ES
  • Interesses:Tudo!

Posted 15/02/2005, 11:34

Então, o mysql grava a data no padrão americano.

Ao ives de pedir o mysql pra inserir a data do modo deles, insira vc mesmo a tada em segundos a partir de 1º de janeiro de 1970 (função time do perl).

dai pra recuperar a data...
($seg, $min, $hora) = locatime($data)

flw
João Gabriel
Site >> joaogabriel.org
CGiClube.net >> http://www.cgiclube.net
Vitória Perl Mongers >> http://vitoria.pm.org

#6 prix

prix

    Duracell: E Duram, Duram, Duram...

  • Usuários
  • 562 posts
  • Sexo:Não informado
  • Interesses:keep walking ...
    jonny walker

Posted 15/02/2005, 22:10

entao no valor basta voce usar NOW() ele ira inserir a data atual
quanto a gravação de dados eh padrao do mysql guardar a data no formato yyyy-mm-dd entao vc tem q fazer um tratamento

($ano,$mes,$dia) = split(/\-/,$data);
$data = "$dia/$mes/$ano";

usando o NOW() no mysql:
$sth = $dbh->do("INSERT INTO tabela VALUES (NOW(),'$usuario') ");

nao importa o campo, time, date, timestamp somente o NOW() adiciona os dados atuais q ele requer sem você precisar puxar do perl o processo de datas.

Eh bem simples e efeciente.

Edição feita por: prix, 15/02/2005, 22:15.

print join'',(reverse  map{/d([a-z])d/}split/W/,'$5x6@314&60f%3i4#moo^1r2#moo^1p2')," ", pack ("B*",'01110000011001010111001001101100')," ", pack ("B*",'011011010110111101101110011010110110010101111001'), "n";
sleep 5;


E-Mails, topicos ou mensagens privadas não serão respondidas a menos que eu considere uma relevancia/necessidade na mesma.

#7 andrelatansio

andrelatansio

    Novato no fórum

  • Usuários
  • 8 posts
  • Sexo:Não informado
  • Interesses:linux, redes, webdesign, programação ....

Posted 16/02/2005, 07:59

Bom Dia a Todos !!!

Primeiramente muito obrigado pela ajuda que estão me dando o jgcl e o prinx !!!

prinx, o tratamento que vc me passou para recuperar a data do banco e exibir para o usuário funcionou belezinha, mas ainda estou tendo a seguinte dificuldade:

para guardar a data não quero guardar a data atual, o usuário escolhe uma data, pois a tabela esta sendo usada para guardar cronogramas. Tentei usar a função que vc me passou mas invertida, da seguinte forma:

($dia,$mes,$ano) = split(/\-/,$data);
$data = "$ano/$mes/$dia";

porque o usuário irá digitar a data no formato dd/mm/yyyy e estou tentando passar para o formato yyyy/mm/dd para guardar no banco, mas não estou conseguindo. Guando verifico o valor da variavel depois da função ainda esta no formato dd/mm/yyyy.

Um abraço.
André Luiz Latansio de Oliveira

#8 andrelatansio

andrelatansio

    Novato no fórum

  • Usuários
  • 8 posts
  • Sexo:Não informado
  • Interesses:linux, redes, webdesign, programação ....

Posted 16/02/2005, 15:01

Boa tarde galera !!!

A função funciona, só estava usando da maneira errada ... estava colcoando neste formato:

($dia,$mes,$ano) = split(/\-/,$data);
$data = "$ano/$mes/$dia";

mas devia colocar assim:

($dia,$mes,$ano) = split(/\//,$data);
$data = "$ano/$mes/$dia";

pois estou dividindo a minha data com / a invés de -

Um abraço.
André Luiz Latansio de Oliveira

#9 jgcl

jgcl

    João Gabriel C. Laass, Serra/ES

  • Usuários
  • 559 posts
  • Sexo:Não informado
  • Localidade:Serra / ES
  • Interesses:Tudo!

Posted 16/02/2005, 18:02

vo aproveitar o embalo do tópico...

qual a diferença do do(comando sql) pro prepare(comando sql)?
(seria só pq o "do" retorna o número de registros afetados pelo comando?)

flw
João Gabriel
Site >> joaogabriel.org
CGiClube.net >> http://www.cgiclube.net
Vitória Perl Mongers >> http://vitoria.pm.org

#10 prix

prix

    Duracell: E Duram, Duram, Duram...

  • Usuários
  • 562 posts
  • Sexo:Não informado
  • Interesses:keep walking ...
    jonny walker

Posted 19/02/2005, 09:26

Boa tarde galera !!!

A função funciona, só estava usando da maneira errada ... estava colcoando neste formato:

($dia,$mes,$ano) = split(/\-/,$data);
$data = "$ano/$mes/$dia";

mas devia colocar assim:

($dia,$mes,$ano) = split(/\//,$data);
$data = "$ano/$mes/$dia";

pois estou dividindo a minha data com / a invés de -

Um abraço.

Bom no mysql ele grava com - e o codigo que eu fiz era pra leitura do mysql nao para receber ela de um formulario.

Mas eh bom ver q você soube se virar.

Quanto ah "prinx" quem eh esta pessoa ? pois eu sou prix !!


o split eh uma forma muito boa para separar dados.

Qualquer duvida estamos ai.

PS: se de algum erro na hora de gravar no mysql tente substituir a / por - que deve resolver

print join'',(reverse  map{/d([a-z])d/}split/W/,'$5x6@314&60f%3i4#moo^1r2#moo^1p2')," ", pack ("B*",'01110000011001010111001001101100')," ", pack ("B*",'011011010110111101101110011010110110010101111001'), "n";
sleep 5;


E-Mails, topicos ou mensagens privadas não serão respondidas a menos que eu considere uma relevancia/necessidade na mesma.

#11 andrelatansio

andrelatansio

    Novato no fórum

  • Usuários
  • 8 posts
  • Sexo:Não informado
  • Interesses:linux, redes, webdesign, programação ....

Posted 21/02/2005, 14:14

Boa tarde e desculpe pelo deslize prix !!!! isso não vai se repetir !!! novamente desculpe !!!

Realmente na hora de gravar a data no banco tenho que usar o / e quando vou recuperar o - para que a função funcione !!!

Quanto a diferença do do para o prepare realmente eu não sei mas utilizo o prepare por ser a maneira como aprendi.


Um abraço !!!
André Luiz Latansio de Oliveira




1 user(s) are reading this topic

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

IPB Skin By Virteq