Antonella 0 Denunciar post Postado Junho 12, 2009 Ola galerinha, gostaria de uma ajudinha, fiz um sistema de agenda e gostaria de saber como faço para ela mostrar apenas data ate o dia por exemplo: 11/06/2009 que e hoje, os eventos do dia 10/06/2009 para traz ele nao mostra. Alquem pode me ajudar??? veja como fiz para aparecer so que esta mostrando tudo: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>Untitled Document</title> <style type="text/css"> a { text-decoration: none; } a.classe1:hover { text-decoration: underline; color: #006600; } a.classe1 { color: #006600; } a.classe2 { text-decoration: underline overline; } a.classe2:hover {text-decoration: underline; color: #006600; } .style11, .style13 { font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 12px; color: #006600; } .style13 { font-weight: bold; } .style14 { font-size: 10px; color: #000000; } .style15 {color: #000000} </style> </head> <body> <?php $link = mysql_connect("localhost", "sitecli_portal", "123123"); mysql_select_db("sitecli_portal", $link); $result = mysql_query("SELECT * FROM agenda order by data asc limit 0, 5", $link); $linhas = mysql_num_rows($result); ?> <?php while ($vetor=mysql_fetch_array($result)) { ?> <table width="100%" border="0"> <tr> <td class="style13"><span class="style14">- <a href="mostraragenda.php?exibir=<?php echo $vetor[0] ?>" class="classe1"><?php echo $vetor[1] ?></a></span></td> </tr> <tr> <td class="style5 style11"> <span class="style15"> <? $dia = $vetor['5']; $mes = $vetor['6']; $ano = $vetor['ano']; echo "$dia/$mes/$ano"; ?> </span> </td> </tr> </table> <?php } ?> </body> </html> Compartilhar este post Link para o post Compartilhar em outros sites
Marcio Leandro 0 Denunciar post Postado Junho 12, 2009 Basta voce criar um SQL que te retorne o resultado esperado: o que voce esta usando nao filtra por data, apenas ordena: "SELECT * FROM agenda order by data asc limit 0, 5" Forum de SQL: http://forum.imasters.com.br/index.php?showforum=179 Compartilhar este post Link para o post Compartilhar em outros sites
Antonella 0 Denunciar post Postado Junho 12, 2009 isso, ele ordena as datas para mostrar a agenda, minha duvida e fazer ele filtar as datas Compartilhar este post Link para o post Compartilhar em outros sites
cezaarr 0 Denunciar post Postado Junho 12, 2009 Antonella eu nunk precisei faze isso mas acredito q da certo .... faça o seguinte SELECT * FROM agenda order by data asc limit 0, 5", $link adicione o seguinte SELECT * FROM agenda WHERE data >= '$hj' ORDER BY data asc limit 0, 5" onde a variavel $hj seria a funçao date(); pra funciona direitinho eu axo q o date(); tem que estar da mesma forma q é cadastrado no banco tipo se no banco é cadastrado 12/06/09 o date teria q ser da mesma forma date("d/m/y"); ai você usa >= (maior ou igual) pra exibi os de hj e os q tem pela frente , acredito q funcione , testa ai e da uma resp, abrçs :) :) Compartilhar este post Link para o post Compartilhar em outros sites
Matias Rezende 50 Denunciar post Postado Junho 12, 2009 Acho que só funciona se a data estiver guardada no formato date(AAAA-MM-DD). Carlos Eduardo Compartilhar este post Link para o post Compartilhar em outros sites
cezaarr 0 Denunciar post Postado Junho 12, 2009 Acho que só funciona se a data estiver guardada no formato date(AAAA-MM-DD). Carlos Eduardo intao cara , eu dei uma testada aki com registros de uma tabela q eu tenhu , colokando a data da tabela do mesmo formato tipo no banco eu cadastrei date("d/m/y"); chamando o dia de hj da mesma forma e a principio pego normal , bom sei la ,axo q dessa forma , estando no mesmo formato pega sim , so esperar o script ser testado pra ve se pego ou nao,.... flw Compartilhar este post Link para o post Compartilhar em outros sites
Matias Rezende 50 Denunciar post Postado Junho 13, 2009 Assim... Se estiver d/m/y, a tabela do mysql deve estar como varchar, certo? Então a data ficaria como uma string... O que vai ocorrer... Imagina um evento no dia 2/01/09 no banco... E hoje é dia 11/01/09.. Se você puxar com SELECT * FROM agenda WHERE data >= '$hj' ORDER BY data asc limit 0, 5", ele vai entender que dia 2/01/09 é MAIOR que o dia 11/01/09 e aí vai dar um erro, porque 2 é maior que 1... Entendeu mais ou menos? Fiz alguns testes um dia destes e vi que realmente acontece como eu estou te falando... Por isto digo... O ideal é usar o campo como DATE no mysql e gravar com AAAA-MM-DD (date("Y-m-d")). Carlos Eduardo Compartilhar este post Link para o post Compartilhar em outros sites
cezaarr 0 Denunciar post Postado Junho 13, 2009 Assim... Se estiver d/m/y, a tabela do mysql deve estar como varchar, certo? Então a data ficaria como uma string... O que vai ocorrer... Imagina um evento no dia 2/01/09 no banco... E hoje é dia 11/01/09.. Se você puxar com SELECT * FROM agenda WHERE data >= '$hj' ORDER BY data asc limit 0, 5", ele vai entender que dia 2/01/09 é MAIOR que o dia 11/01/09 e aí vai dar um erro, porque 2 é maior que 1... Entendeu mais ou menos? Fiz alguns testes um dia destes e vi que realmente acontece como eu estou te falando... Por isto digo... O ideal é usar o campo como DATE no mysql e gravar com AAAA-MM-DD (date("Y-m-d")). Carlos Eduardo intendi oq você disse , mas eu sempre gravei no db como varchar(nao sei se e errado mas nunca deu problema) , bom.... acredito q para o caso da amiga ali em cima tem que ver como ela cadastro no banco ,e se necessario alterar o cadastro do campo "data" da forma que você explicou , mas continuo axando que se você chamar date(); da mesma forma que esta no banco (independente sendo date ou varchar) vai resolver o problema dela =], abrss flww Compartilhar este post Link para o post Compartilhar em outros sites
Matias Rezende 50 Denunciar post Postado Junho 13, 2009 Até vai... Mas se você fizer o SELECT com o ORDER BY pela data, ele vai dar aquele erro que eu disse. Além de que você perde a possibilidade de chamar com datas BETWEEN. Espero ter ajudado Carlos Eduardo Compartilhar este post Link para o post Compartilhar em outros sites
André D. Molin 15 Denunciar post Postado Junho 13, 2009 Sempre utilizem DATE ou DATETIME no MySQL para guardar datas pessoal. As vezes isso economiza linhas de código e muito tempo. Alem de que se você quiser passar para o padrão brasileiro, basta usar um date_format na propria consulta. As vantagens são muitas. Compartilhar este post Link para o post Compartilhar em outros sites
cezaarr 0 Denunciar post Postado Junho 13, 2009 e foi oq eu tinha dito no primero post , eu nunk usei , n saberia se ia funfa ou nao , foi a unica coisa q consegui pensa assim de primera ^_^ ainda so meio noob em php , mexo so 1 ano e pokim mas ta beleza eu intendi oq você disse, mas... qual seria a solucao correta intao para o script da antonella? http://forum.imasters.com.br/public/style_emoticons/default/thumbsup.gif Compartilhar este post Link para o post Compartilhar em outros sites
André D. Molin 15 Denunciar post Postado Junho 13, 2009 Ela pode passar a coluna que contem as datas para o formato DATE. Assim, as datas deverão ser gravadas no seguinte formato: YYYY-MM-DD Na hora da consulta, basta fazer uma filtragem. SELECT * FROM `eventos` WHERE `data` >= YYYY-MM-DD Caso ela precise converter a data que esta no banco para o padrão brasileiro, basta fazer isso: $dataEUA = '2009-08-22'; $dt = explode('-', $dataEUA); $dataBR = $dt[2] .'/'. $dt[1] .'/'. $dt[0]; echo $dataBR; //Irá retornar: 22/08/2009 Se for sempre assim, da até para fazer uma funçãozinha. Compartilhar este post Link para o post Compartilhar em outros sites
Antonella 0 Denunciar post Postado Junho 14, 2009 perdao galerinha, meu pc tinha queimado e so hj chego a peça, vou fazer o teste, e no meu bd esta com date sim. bjinhos Compartilhar este post Link para o post Compartilhar em outros sites
Antonella 0 Denunciar post Postado Junho 14, 2009 fiz assim e deu erro: <?php $link = mysql_connect("localhost", "sitecli_portal", "123123"); mysql_select_db("sitecli_portal", $link); $result = mysql_query("SELECT * FROM `agenda` WHERE `data` >= YYYY-MM-DD", $link); $linhas = mysql_num_rows($result); ?> <?php function converterData($data) { $data = implode(preg_match("~\/~", $data) == 0 ? "." : "-", array_reverse(explode(preg_match("~\/~", $data) == 0 ? "-" : "/", $data))); return $data; } ?> <?php while ($vetor=mysql_fetch_array($result)) { ?> <table width="100%" border="0"> <tr> <td class="style13"><span class="style14">- <a href="mostraragenda.php?exibir=<?php echo $vetor[0] ?>" class="classe1"><?php echo $vetor[1] ?></a></span></td> </tr> <tr> <td class="style5 style11"> <span class="style15"> <?php echo "$data"; ?> </span> </td> </tr> </table> <?php } ?> o erro foi: Warning: mysql_num_rows(): supplied argument is not a valid MySQL result resource in /home/sitecli/public_html/inicio/agendainicio.php on line 32 Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in /home/sitecli/public_html/inicio/agendainicio.php on line 41 Compartilhar este post Link para o post Compartilhar em outros sites
Matias Rezende 50 Denunciar post Postado Junho 14, 2009 O erro está na query. Troque isto $result = mysql_query("SELECT * FROM `agenda` WHERE `data` >= YYYY-MM-DD", $link); Por isto $result = mysql_query("SELECT * FROM agenda WHERE data >= '".date("Y-m-d")."' ", $link) or die(mysql_error()); Deve funcionar Carlos Eduardo Compartilhar este post Link para o post Compartilhar em outros sites
Antonella 0 Denunciar post Postado Junho 14, 2009 ola, funciono ok, agora to com um probleminha na hora de converter a data para BR, veja como fiz e o que estou fazendo de errado: <?php $link = mysql_connect("localhost", "sitecli_portal", "123123"); mysql_select_db("sitecli_portal", $link); $result = mysql_query("SELECT * FROM agenda WHERE data >= '".date("Y-m-d")."' order by data asc ", $link) or die(mysql_error()); $linhas = mysql_num_rows($result); ?> <?php function converterData($data) { $data = implode(preg_match("~\/~", $data) == 0 ? "." : "-", array_reverse(explode(preg_match("~\/~", $data) == 0 ? "-" : "/", $data))); return $data; } ?> <?php while ($vetor=mysql_fetch_array($result)) { $data = converterData($vetor[8]); ?> <table width="100%" border="0"> <tr> <td class="style13"><span class="style14">- <a href="mostraragenda.php?exibir=<?php echo $vetor[0] ?>" class="classe1"><?php echo $vetor[1] ?></a></span></td> </tr> <tr> <td class="style5 style11"> <span class="style15"> <?php echo $vetor[8] ?> </span> </td> </tr> </table> <?php } ?> Compartilhar este post Link para o post Compartilhar em outros sites
Matias Rezende 50 Denunciar post Postado Junho 14, 2009 Vou postar o jeito errado de fazer e te dizer o jeito correto. Jeito errado function inverte_data($data){ $date = implode('/',array_reverse(explode('-',$data))); return $date; } O jeito correto é usando date_format no próprio SELECT, mas aí não sei bem como fazer... Dá uma procurada no Google e no manual do Mysql que você vai ver. Carlos Eduardo Compartilhar este post Link para o post Compartilhar em outros sites
André D. Molin 15 Denunciar post Postado Junho 14, 2009 A sintaxe do date_format é essa: SELECT DATE_FORMAT(colunaData,'%d/%m/%Y') FROM `tabela` Irá retornar DD/MM/YYYY. A sintaxe é bem parecida com a função date() do PHP. Só procurar no google que tu acha. Mas o uso é basicamente este. Compartilhar este post Link para o post Compartilhar em outros sites