andre002 0 Denunciar post Postado Março 26, 2010 Minha gente, boa noite a todos, a algum tempo venho me enpenhando para consertar um livro de visitas que retirei em um site que achei no Google, essa investida me custou tempo e me deu muito dor de cabeça, mais no final o resultado foi satisfatório, mais como todo sistema não testado, sempre encontramos um calcanhar de "akires" e o desse livro de visitas foi que ele só funciona perfeitamente em VARCHAR, em fim seria até interessante se funcionasse integralmente. Mas o detalhe da coisa é que só funciona certo durante o primeiro mês, após isso ele passa a agrupar as mensagens somente pelos dia do mês: Ex: 02/01/2010 02/02/2010 02/03/2010 Isso causa uma embolação não valida para nenhum livro de visitas. Ai vem a pergunta, qual seria a solução, mudar o campo data para DATE ou DATETIME, claro que qualquer um logo pensaria nisso, só que ao fazer, ele causa uma perca de informações permanete, transformando as datas na seguinte abreviatoria Ex: 0000/00/00 Ou seja além de modificar, não se consegue recuperar os dados se retornamos para VARCHAR, ou seja não existe uma solução ao meu ver. Em fim, caso alguem saiba como proceder em um caso desse, por favor me postem a solução, já é o terceiro topico que eu abro sobre esse assunto, já refiz esse livro de visitas mais de 20 vezes, e esse problema persiste em me assombrar. Qualquer informação que nescessitem para analise estarei postando aos olhos de vocês. Sem Mais Obrigado a Todos!! Forte Abraço! Compartilhar este post Link para o post Compartilhar em outros sites
giesta 29 Denunciar post Postado Março 26, 2010 Vamos la de novo.... o campo DATE exige que a data esteja formatada na seguinte forma(e somente assim) no MySQL : 0000-00-00 ou seja 2010-12-30 para o dia 30 de dezembro de 2010. Compartilhar este post Link para o post Compartilhar em outros sites
andre002 0 Denunciar post Postado Março 26, 2010 Vou tentar elucidar um pouco mais para ver se existe uma solução plausivel para isso, repare como deve permanecer a data na imagem a seguir Ex: O problema é que quando vir o dia 26/04/2010 a mesnagem postada lá no inico vai vir acompanhar essa, o que não pode acontecer, não é possivel que um sistema como o MySQL não tenha pensado nesse fator de progressão das mensagens, e com certeza deve existir um meio de fazer esse sistema entender as datas de mes e ano sem ficar no formato americano e tão poco com caracteres 0000/00/00. Penso que além do campo DATE deva existir um para exibir essas mensagens no formato que esta, ou alguma configuração que não encontrei no BD, mesmo que eu tenha que alterar o PHP não importa, o que não pode é eu mudar para DATE e sumir os textos a hora e ainda ficar com 0000/00/00. Forte Abraço! Compartilhar este post Link para o post Compartilhar em outros sites
giesta 29 Denunciar post Postado Março 27, 2010 pesquise sobre DATE_FORMAT Compartilhar este post Link para o post Compartilhar em outros sites
andre002 0 Denunciar post Postado Março 27, 2010 Pesquisando eu bati de novo na mesma tecla, cai no manual de referencia do MySQL e novamente na seção data, em fim novamente li que estou realizando uma operação ilegal para o SQL como mostra o texto a seguir extraído do manual •Quando o MySQL encontra um valor para um tipo de data ou hora que está fora da faixa permitida ou é ilegal neste tipo (veja o início desta seção), ele converte o valor para ``zero''. (A exceção ocorre no campo TIME, onde o valor fora da faixa é ajustado para o valor limite apropriado na faixa de valores deste tipo.) A tabela abaixo mostra o formato do valor ``zero'' para cada tipo: Tipo de Coluna Valor ``Zero'' DATETIME '0000-00-00 00:00:00' DATE '0000-00-00' TIMESTAMP 00000000000000 (tamanho depende do tamanho do display) TIME '00:00:00' YEAR 0000 No entanto o que eu estou fornecendo é a seguinte linha de código em PHP para o SQL <? date_default_timezone_set('America/Sao_Paulo'); include ("conectar.php"); $ip = $_SERVER['REMOTE_ADDR']; //inclui o nosso arquivo de conexão com o bd $nome = $_POST['nome']; $email = $_POST['email']; $mensagem = $_POST['mensagem']; //acima resgatamos as variáveis previamente enviadas pelo formulário $hora = date("H:i"); $data = date("d/m/Y"); $datehora = "A mensagem foi postada em $data às $hora"; /*acima fazemos uma variável que receberá as horas, minutos, dia, mês e ano em que a mensagem foi postada*/ if (strlen($nome) < 4) echo '<p align="center">Escreva seu nome!<BR><a href="javascript:history.back(1);">voltar</a></p>'; elseif (strlen($email) <= 4) echo '<p align="center">E-mail inválido!<BR><a href="javascript:history.back(1);">voltar</a></p>'; elseif (strlen($mensagem) <= 4) echo '<p align="center">Sua mensagem deve conter mais de 4 caracteres!<BR><a href="javascript:history.back(1);">voltar</a></p>'; else{ mysql_query("INSERT INTO mural ( nome , email , mensagem , data , ip) VALUES ( '$nome' , '$email' , '$mensagem' , '$datehora' , '$ip' ) ") or die(mysql_error()); echo '<p align="center"><b><font size=6><font color="#FF0000">Sua mensagem foi enviada com sucesso!</font></font size=6></b></p>'; } /*depois da rotina de confirmação do preenchimento dos campos, inserimos os valores deles dentro da nossa tabela*/ ?> E ele até me retorna corretamente em VARCHAR (45) no primeiro mês, mais no mês seguinte ele passa a assumir a postura relatada anteriormente no tópico. Onde realmente esta esse erro, é isso que eu quero descobrir, para que ai sim eu possa resolvê-lo definitivamente, ou pelo menos estudar uma forma de resolvê-lo. Sem mais obrigado pela atenção! Compartilhar este post Link para o post Compartilhar em outros sites
andre002 0 Denunciar post Postado Abril 2, 2010 Sera que alguem que entenda melhor de mYsql do que eu possa me ajudar a resolver essa bananosa? Compartilhar este post Link para o post Compartilhar em outros sites
klonder 14 Denunciar post Postado Abril 2, 2010 Eu cansei de tentar trabalhar com os formatos de data no MySQL, e passei a salvar tudo como a função time() do próprio php, ou seja, no formato timestamp, que já armazena horas, minutos, segundos... ou seja, tudo que eu preciso, sem precisar ficar preocupado com hífens, pontos, espaços... nada disso... Tudo bem, não sou expert em SQL. Isso é algo que faço em minhas enquetes, livros de visitas e e-mails e não me dá problemas... Compartilhar este post Link para o post Compartilhar em outros sites
macielcr7 9 Denunciar post Postado Abril 3, 2010 coloque o campo como datatime e coloque o codigo assim <? date_default_timezone_set('America/Sao_Paulo'); include ("conectar.php"); $ip = $_SERVER['REMOTE_ADDR']; //inclui o nosso arquivo de conexão com o bd $nome = $_POST['nome']; $email = $_POST['email']; $mensagem = $_POST['mensagem']; //acima resgatamos as variáveis previamente enviadas pelo formulário $hora = date("H:i"); $data = date("Y-m-d"); $datahora = $data." ".$hora ; //$datehora = "A mensagem foi postada em $data às $hora";d/m/Y /*acima fazemos uma variável que receberá as horas, minutos, dia, mês e ano em que a mensagem foi postada*/ if (strlen($nome) < 4) echo '<p align="center">Escreva seu nome!<BR><a href="javascript:history.back(1);">voltar</a></p>'; elseif (strlen($email) <= 4) echo '<p align="center">E-mail inválido!<BR><a href="javascript:history.back(1);">voltar</a></p>'; elseif (strlen($mensagem) <= 4) echo '<p align="center">Sua mensagem deve conter mais de 4 caracteres!<BR><a href="javascript:history.back(1);">voltar</a></p>'; else{ mysql_query("INSERT INTO mural ( nome , email , mensagem , data , ip) VALUES ( '$nome' , '$email' , '$mensagem' , '$datehora' , '$ip' ) ") or die(mysql_error()); echo '<p align="center"><b><font size=6><font color="#FF0000">Sua mensagem foi enviada com sucesso!</font></font size=6></b></p>'; } /*depois da rotina de confirmação do preenchimento dos campos, inserimos os valores deles dentro da nossa tabela*/ ?> Na hora de mostrar a MSG ao usuario faça assim........ <? include ("conectar.php"); $sql = mysql_query("SELECT * FROM mural ORDER BY data"); while ($ver = mysql_fetch_object($sql)){ //nome , email , mensagem , data , ip $data = $ver->data; $msg = $ver->mensagem; $nome = $ver->nome; $email = $ver->email; $ip = $ver->ip; $data_postagem = explode(" ", $data); $data_post = $data_postagem[0]; //data.......... $hora_post = $data_postagem[1]; //hora.......... $date = explode("-", $data_post); $ano = $date[0];//ano.... $mes = $date[1];//mes.... $dia = $date[2];//dia.... $montar = $dia."/".$mes."/".$ano; //agora você monta a tabela....... Não vou me preoculpar com isso...... echo "A mensagem foi postada em ".$montar." às ".$hora_post."<br/>"; echo "<b>Nome:</b>".$nome."<br/>"; echo "<b>Email:</b>".$email."<br/>"; echo "<b>Mensagem:</b><br/>".$msg."<br/>"."<br/>"; } ?> ;) http://forum.imasters.com.br/public/style_emoticons/default/joia.gif :D msn: macielc.ronaldo@hotmail.com Compartilhar este post Link para o post Compartilhar em outros sites
andre002 0 Denunciar post Postado Abril 4, 2010 Klonder Eu cansei de tentar trabalhar com os formatos de data no MySQL, e passei a salvar tudo como a função time() do próprio php, ou seja, no formato timestamp, que já armazena horas, minutos, segundos... ou seja, tudo que eu preciso, sem precisar ficar preocupado com hífens, pontos, espaços... nada disso Entendi, mais teria como eu colocar esse meu livro de visitas em timstamp ou teria que conseguir outro? Macielcr7 coloque o campo como datatime e coloque o codigo assim Tesstei aqui, em parte resolveu alguma coisa, ou seja, os textos voltaram a aparecer, mais os valores numéricos de data e hora continuam assumindo a postura de algarismos neutro, ou seja zero. Se alguem tiver alguma forma de alterar esse codigo para resolver o problema postem ai gente!!! Forte Abraço a Todos!!! Compartilhar este post Link para o post Compartilhar em outros sites