Jump to content


Photo

Calendário Em Php E Mysql


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

#1 Luciano Oliveira Lima

Luciano Oliveira Lima

    Novato no fórum

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

Posted 08/03/2010, 14:33

Galera!
estou precisando criar algo parecido com um calendário acadêmico..

um exemplo: www.catolicaceara.edu.br .. o calendario academico deles na home só lista da data que está em diante..
e quando voce clica em acessa mais.. ai lista todo o ano!

alguém teria algum exemplo.. tutorial ou algo do tipo?

abraço.

#2 MBA

MBA

    24 Horas

  • Usuários
  • 412 posts
  • Sexo:Masculino
  • Localidade:Belo Horizonte
  • Interesses:Desenvolvimento WEB

Posted 08/03/2010, 15:45

Boa tarde amigo, tudo bom?
Pronto eu não tenho exemplo mas posso lhe ajudar a desenvolver o seu.

Basicamente você tem um nome do evento, uma data inicial, uma data final e uma descrição.
Dados esses campos você lista ordenados por data e separados pelo mês.

Se quiser continuar a partir dai, venha com suas dúvidas que tanto eu quanto o resto do pessoal lhe ajudaremos.
Caso prefira realmente achar um pronto, pesquise no google por "PHP event calendar".
Será fácil encontrar...

Abraços e até a próxima.
Mateus Antunes
Mateus Antunes
MBASistemas

#3 Luciano Oliveira Lima

Luciano Oliveira Lima

    Novato no fórum

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

Posted 08/03/2010, 18:38

Boa tarde amigo, tudo bom?
Pronto eu não tenho exemplo mas posso lhe ajudar a desenvolver o seu.

Basicamente você tem um nome do evento, uma data inicial, uma data final e uma descrição.
Dados esses campos você lista ordenados por data e separados pelo mês.

Se quiser continuar a partir dai, venha com suas dúvidas que tanto eu quanto o resto do pessoal lhe ajudaremos.
Caso prefira realmente achar um pronto, pesquise no google por "PHP event calendar".
Será fácil encontrar...

Abraços e até a próxima.
Mateus Antunes


Grande Mateus!
valeu ai pela dicas..
bem vamos lá:

tenho um banco de dados já pronto com os seguintes campos:

id_agenda
titulo
descricao
local
data

no site ele já lista na chamada pela a data do mês!
só que preciso fazer uma página interna listando de todo o ano!

exemplo: Janeiro ( eventos de janeiro ) Fevereiro ( eventos de fevereiro )
um listão apenas..
o problema é que não sei como fazer esse listão no php e mysql trazendo do banco de dados o conteudo.

poderia me da uma dica de como fazer?

abraço.

#4 MBA

MBA

    24 Horas

  • Usuários
  • 412 posts
  • Sexo:Masculino
  • Localidade:Belo Horizonte
  • Interesses:Desenvolvimento WEB

Posted 09/03/2010, 08:25

Claro.
Você pode dar um select em todos os registros ordenando pelo mês.

Alguma coisa assim:
ORDER BY DATE_FOTMAT(data,'%m')

Se não der certo é só voltar ai.
Abraços!

Mateus Antunes
Mateus Antunes
MBASistemas

#5 Luciano Oliveira Lima

Luciano Oliveira Lima

    Novato no fórum

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

Posted 09/03/2010, 09:31

Claro.
Você pode dar um select em todos os registros ordenando pelo mês.

Alguma coisa assim:

ORDER BY DATE_FOTMAT(data,'%m')

Se não der certo é só voltar ai.
Abraços!

Mateus Antunes


beleza.. mais assim..
o php como fazer?
por que tem que fazer uma array com os mêses e em cada mês lista o determinado evento.
o problema e que ainda não descobri a logica e nem como fazer esse array para lista!

#6 MBA

MBA

    24 Horas

  • Usuários
  • 412 posts
  • Sexo:Masculino
  • Localidade:Belo Horizonte
  • Interesses:Desenvolvimento WEB

Posted 09/03/2010, 12:04

Só para me situar sobre como lhe ajudar.
Você tem a manha de fazer uma consulta simples no banco e recuperar os valores?
Mateus Antunes
MBASistemas

#7 Luciano Oliveira Lima

Luciano Oliveira Lima

    Novato no fórum

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

Posted 09/03/2010, 21:21

Só para me situar sobre como lhe ajudar.
Você tem a manha de fazer uma consulta simples no banco e recuperar os valores?


sim sim..
sei um pouco de sql e php!
só não sei complicado!
e isso tá me complicando esse calendario!

eu quero estilo esse calendario aqui oh:

http://www.catolicac...r/?p=calendario

att.
Luciano Olvieira

#8 Crab

Crab

    Da paz, mas preparado para Guerra

  • Ex-Admins
  • 2521 posts
  • Sexo:Masculino
  • Localidade:Florianópolis - SC
  • Interesses:Desenvolvimento Gráfico e Web.

Posted 09/03/2010, 22:08

Tá.. mas todos os meses terão eventos??

Não neh... estamos em Março.. se for listar o calendário de 2010 só vai até março no momento.

O unico array que vai montar é com a seleção feita dos eventos no bd, nenhuma outra.

O MBA te deu o caminho das pedras, e se sabe um pouco de php com mysql como disse teria visto a simplicidade do lance.

Mas se não sabe o básico do PHP com MySql, não tem problema, mas precisa deixar entendido pra te ajudar no teu nível.
Se não continuaremos falando grego aqui e perdendo tempo, pois não entenderá nada.

Veja bem... vc disse que tem aqueles campos no bd montado já neh?

então é o seguinte

id_agenda int
titulo varchar
descricao text
local varchar
data datetime ou só date ou time... (uso date ou datetime quando quero horas, pra uma ordenação mais exata datetime é melhor que date)

bom partindo que a estrutura dos teus campos no bd estão assim
Precisamos saber como está cadastrando esses eventos.

INSERT bla bla bla

Como está cadastrando a data??
pegando ela em um form de que forma??

Importante: não importa a forma que é enviada no form desde que seja dia mes e ano da seguinte forma

dia 00
mes 00
ano 0000

Depois é só gravar no bd desta forma 0000-00-00 00:00, pois o formato datetime no bd aceita os dados somnte nesse formato
pra exibir depois na página no formato BR, é simples.. basta usar DATEFORMAT() na própria query de consulta como o MBA exemplificou, porém com mais informações na formatação, mas isso é outra coisa.

Enfim... se vc estiver com o bd nessa estrutura, e estiver cadastrado os eventos de forma correta, então listar será muito mais fácil.

através do SELECT .... vc ordenará primeiramente pelo mês depois pelo dia, hora:minuto

acho que da pra fazer alguma coisa com isso
pelo menos a lógica, que vc disse que estava tendo dificuldade, está aí.

(y)Até mais

#9 Luciano Oliveira Lima

Luciano Oliveira Lima

    Novato no fórum

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

Posted 10/03/2010, 14:39

Tá.. mas todos os meses terão eventos??

Não neh... estamos em Março.. se for listar o calendário de 2010 só vai até março no momento.

O unico array que vai montar é com a seleção feita dos eventos no bd, nenhuma outra.

O MBA te deu o caminho das pedras, e se sabe um pouco de php com mysql como disse teria visto a simplicidade do lance.

Mas se não sabe o básico do PHP com MySql, não tem problema, mas precisa deixar entendido pra te ajudar no teu nível.
Se não continuaremos falando grego aqui e perdendo tempo, pois não entenderá nada.

Veja bem... vc disse que tem aqueles campos no bd montado já neh?

então é o seguinte

id_agenda int
titulo varchar
descricao text
local varchar
data datetime ou só date ou time... (uso date ou datetime quando quero horas, pra uma ordenação mais exata datetime é melhor que date)

bom partindo que a estrutura dos teus campos no bd estão assim
Precisamos saber como está cadastrando esses eventos.

INSERT bla bla bla

Como está cadastrando a data??
pegando ela em um form de que forma??

Importante: não importa a forma que é enviada no form desde que seja dia mes e ano da seguinte forma

dia 00
mes 00
ano 0000

Depois é só gravar no bd desta forma 0000-00-00 00:00, pois o formato datetime no bd aceita os dados somnte nesse formato
pra exibir depois na página no formato BR, é simples.. basta usar DATEFORMAT() na própria query de consulta como o MBA exemplificou, porém com mais informações na formatação, mas isso é outra coisa.

Enfim... se vc estiver com o bd nessa estrutura, e estiver cadastrado os eventos de forma correta, então listar será muito mais fácil.

através do SELECT .... vc ordenará primeiramente pelo mês depois pelo dia, hora:minuto

acho que da pra fazer alguma coisa com isso
pelo menos a lógica, que vc disse que estava tendo dificuldade, está aí.

(y)


valeu ajudou bastante!!
mais isso ai eu já fiz!
tá gravando normal 0000-00-00..
ta pegando a data de uma calendario em jquery funcionando perfeito..

o que to com dificuldade mesmo é de fazer o codigo em php...
por que eu sei que tenho que fazer um array com os meses e da o select chamando o mês..
só que não sei por onde começa..
fiz um chamando.. mais ele lista apenas o mês que estamos e preciso de um geral, que liste todos os mês!

ex: $mes_atual = date("m");
$sql = mysql_query("SELECT DATE_FORMAT(data, '%d/%m/%Y') AS data,titulo,id_agenda FROM agenda WHERE Month(data) = '$mes_atual' order by data desc");

só que eu preciso de um que liste todos os mês em ordem: Janeiro, Fevereiro, Março, Abril e etc...
como é no link que mostrei..
e estou com dificuldade de fazer o codigo!

#10 Crab

Crab

    Da paz, mas preparado para Guerra

  • Ex-Admins
  • 2521 posts
  • Sexo:Masculino
  • Localidade:Florianópolis - SC
  • Interesses:Desenvolvimento Gráfico e Web.

Posted 10/03/2010, 16:13

vc não precisa disso $mes_atual = date("m");

vc precisa fazer mais ou menos como o MBA disse lá no exemplo do ORDER e depois pode usar while() para resgatar os resultados todos do array

Se vc não usar um laço só resultará um registro na consulta, no teu caso ali seria o registro com data igual ao $mes_atual

com um laço ele retorna todos os registros ordenados pelo Mês ou conforme condicionar

(y)

Leia também sobre GROUP BY

(y) Até mais

#11 Luciano Oliveira Lima

Luciano Oliveira Lima

    Novato no fórum

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

Posted 11/03/2010, 13:56

estou fazendo da seguinte maneira:

include "conexao.php";
$sql = "SELECT DATE_FORMAT(data, '%d/%m/%Y') AS data,titulo,id_agenda,local,descricao FROM agenda ORDER BY DATE_FOTMAT(data,'%m') desc";
$query = mysql_query($sql);
while ($linha = mysql_fetch_array($query)) {
echo $linha["data"];
echo $linha["titulo"];
}

mais não lista!
fui no sql e dei um select no sql..
e apareceu o seguinte erro:

#1305 - FUNCTION ideia3.DATE_FOTMAT does not exist

alguém pode me dá uma ajuda?

Edição feita por: Luciano Oliveira Lima, 11/03/2010, 13:57.


#12 MBA

MBA

    24 Horas

  • Usuários
  • 412 posts
  • Sexo:Masculino
  • Localidade:Belo Horizonte
  • Interesses:Desenvolvimento WEB

Posted 11/03/2010, 14:13

DATE_FOTMAT => DATE_FORMAT
Mateus Antunes
MBASistemas

#13 Luciano Oliveira Lima

Luciano Oliveira Lima

    Novato no fórum

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

Posted 11/03/2010, 14:50

Valeu MBA meu caro,

seguinte:

tá listando as datas:

mais agora quero coloca o titulo..

meu codigo está assim:

<?
	include "conexao.php";
	
	// Select do mes Janeiro
	$sql = "SELECT * FROM agenda ORDER BY DATE_FORMAT(data,'%m') desc";
	$query = mysql_query($sql);
	
 ?>
<div id="lateralInt">
	<? while ($linha = mysql_fetch_array($query)) { ?>    
   <p><a href="?id=agenda&id_age=<?=$linha["id_agenda"] ?>"><?=$linha["data"] ?> - <?=$linha["titulo"] ?></a></p>
    <?	} ?>
</div>

e no site ele lista assim:

2010-01-16 - Mostra de Responsabilidade Social na Indústria

0000-00-00 - IV Encontro Nacional de Pesquisadores em Gestão Social – ENAPEGS 2010,

queria que fosse divido por grupos ex:

Janeiro

2010-01-16 - Mostra de Responsabilidade Social na Indústria

Fevereiro

2010-02-05 - IV Encontro Nacional de Pesquisadores em Gestão Social – ENAPEGS 2010..

alguém pode me da alguma ideia?

#14 Crab

Crab

    Da paz, mas preparado para Guerra

  • Ex-Admins
  • 2521 posts
  • Sexo:Masculino
  • Localidade:Florianópolis - SC
  • Interesses:Desenvolvimento Gráfico e Web.

Posted 11/03/2010, 16:03

Amigo, ia comentar sobre vc ter escrito a função DATE_FORMAT errado, mas deixa pra lá... isso acontece.
Procure revisar bem sempre pra poupar tempo... as vezes é só um ponto e vírgula faltando.

Vou tentar ajudar:

Seguindo a tua linha:

<?php

include "conexao.php";

/* estas duas linhas abaixo podem ficar direto no arquivo conexao.php */

mysql_query("SET NAMES 'utf8'");
mysql_query("SET lc_time_names = 'pt_BR'");

$sql = "SELECT *, DATE_FORMAT(data, '%d/%m/%Y') AS dataBR, MONTHNAME(data) AS mes FROM agenda ORDER BY MONTH(data) DESC";

$query = mysql_query($sql);

$mes = NULL;

echo "<div id=\"lateralInt\">";

while ($linha = mysql_fetch_array($query)) {

    if ($mes != $linha['mes']){

        $mes = $linha['mes']; 

        echo "<h2>".$mes."</h2>";

    }

    echo "<a href=\"?id=agenda&id_age=".$linha['id_agenda']. "\"> ";

    echo $linha['dataBR']." - ".$linha['titulo'];

    echo "</a>";

    echo "<br />";

}

echo "</div>";

?>


Só que os meses serão exibidos em Inglês, mas aí da pra fazer uma função em js mesmo pra alterar isso.
Se vacilar tem como recuperar no proprio PHP em PT-BR, mas eu desconheço.


Aquelas duas linhas lá em cima que acrescentei, fazem o trabalho de transformar a data pra lingua pt_BR
Junto com o MONTHNAME(campo) escreve o mês por extenso.

Agradeça ao Felipe Pena pela dica em um tópico que ensina esse método.
Resolvi postar a dica aqui tbm pra quem for visitar este tópico, visto que acredito que o autor não irá.

(y)Até mais

Edição feita por: Crab, 18/03/2010, 16:14.
Adicionando formas otimizadas de conversão do idioma da data


#15 Luciano Oliveira Lima

Luciano Oliveira Lima

    Novato no fórum

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

Posted 11/03/2010, 16:58

ok! obrigado Crab..

mais seguinte..
no PHP

estou tentando fazer assim mais dá um erro

$sql = "SELECT * FROM agenda ORDER BY DATE_FORMAT(data,'%m') desc";
$query = mysql_query($sql);
while ($linha = mysql_fetch_array($query)) {
if($linha["date"] == "01" ){
// aqui imprimi as datas de janeiro
<p>Janeiro</p>
}
if($linha["date"] == "02") {
// aqui imprimi as datas de fevereiro..
<p>Fevereiro</p>
}
}

mais não tá dando certo por que a variavel $linha["date"] está trazendo data no formato 0000-00-00

a minha pergunta é? como fazer essa variavel $linha["date"] trazer apenas o mês? para comparar se é 01,02,03,04 ...
para dizer qual é o mês!
se a minha lógica está errada..
queria algum exemplo!

abraço.




1 user(s) are reading this topic

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

IPB Skin By Virteq