Jump to content
Gasparzinho

Calendário de Eventos com PHP e MySQL

Recommended Posts

Olá Imasters,

Bom eu queria desenvover um calendário que fosse fácil de usar e que fosse simples, dinâmico e tranquilo para o usuário. Como tenho estudado um pouco o PHP ultimamente e cada vez mais descubro coisas novas com esta ferramenta, me motivei para desenvover este calendário.

Espero que vcs gostem e que apreciem o uso dele em seus sites. Podem alterar o que quiserem. Este calendario é livre para qualquer alteração, porém não me responsabilizo caso haja bugs na execução após as alterações. :blink:

IMPORTANTE:

Seguinte: Fiz a área administrativa bem simples, porém funcional para inserir, listar, atualizar e deletar eventos. Baixar em http://www.4shared.com/zip/hDWkUfnA/admagenda.html

Uma imagem do visual do calendário:
agenda.jpg?sbsr=3581a3c406c6d35b5b8afd7e

Legal agora vamos a obra:

Abra o seu phpmyadmin e crie insira a instrução abaixo:

CREATE TABLE IF NOT EXISTS `agenda` (
	 `id` int(11) NOT NULL auto_increment,
	 `evento` varchar(200) NOT NULL,
	 `dtevento` varchar(10) NOT NULL,
	 `autor` varchar(200) NOT NULL,
	 `data` timestamp NOT NULL default CURRENT_TIMESTAMP,
	 `hora` varchar(5) NOT NULL,
	 `conteudo` text NOT NULL,
	 `local` varchar(200) NOT NULL,
	 PRIMARY KEY  (`id`)
   ) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=1;

Bom agora vamos criar a página de conexão com o banco:

sql.php

<?php
   $host = "localhost";//caso esteja usando o xampp ou wamp
   $user = "root";
   $pass = "";
   $db = "db";
   $conn = mysql_connect($host, $user, $pass) or die (mysql_error());
   
   @mysql_select_db($db);
   
   ?>

Agora vamos criar a pagina propriamente dita:

agenda.php

<?php
   
   ########################################
   #											
   #		Calendário de Eventos PHP 5 e MySQL			
   #		Documento: Agenda de Eventos Dinâmica		
   #		Autor: Gaspar Teixeira					
   #		E-mail: gaspar.teixeira@gmail.com			
   #		Data: 14/11/2008						
   #		Direito de Uso: Livre						
   #		Declaração: O autor não se responsabiliza		
   #		pelo utilização deste calendário!					
   #												
   ########################################
   
   ?>
   
   <!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=iso-8859-1" />
   <title>Agenda de Eventos by Gaspar</title>
   <style type="text/css">
   .tabela{
   background:#fff;
   width:200px;
   padding:0px;
   border:1px solid #f0f0f0;
   float:left;
   margin-right:20px;
   }
   .td{
   background:#f8f8f8;
   width:20px;
   height:20px;
   text-align:center;
   
   }
   .hj{
   background: #FFFFCC;
   width:20px;
   height:20px;
   text-align:center;
   }
   .dom{
   background: #FFCC99;
   width:20px;
   height:20px;
   text-align:center;
   }
   .evt{
   background: #CCFF99;
   width:20px;
   height:20px;
   text-align:center;
   }
   .mes{
   background:#fff;
   width:auto;
   height:20px;
   text-align:center;
   }
   .show{
   background:#202020;
   width:300px;
   height:30px;
   text-align:left;
   font-size:12px;
   font-weight:bold;
   color:#CCFF00;
   padding-left:5px;
   }
   .linha{
   background:#404040;
   width:300px;
   height:20px;
   text-align:left;
   font-size:11px;
   color:#f0f0f0;
   padding:1px 1px 1px 10px;
   }
   .sem{
   background: #ECE6D9;
   width:auto;
   height:20px;
   text-align:center;
   font-size:12px;
   font-weight:bold;
   font-family:Verdana;
   }
   body,td,th {
	   font-family: Verdana;
	   font-size: 11px;
	   color: #000000;
   }
   a:link {
	   color: #000000;
	   text-decoration: none;
   }
   a:visited {
	   text-decoration: none;
	   color: #000000;
   }
   a:hover {
	   text-decoration: underline;
	   color: #FF9900;
   }
   a:active {
	   text-decoration: none;
   }
   </style>
   </head>
   
   <body>
   
   <?php 
   include "sql.php";//conexão com o banco de dados
   
   @mysql_select_db($db);//selecione o banco de dados
   
   if(empty($_GET['data'])){//navegaçao entre os meses
	   $dia = date('d');
	   $month = ltrim(date('m'),"0");
	   $ano = date('Y');
   }else{
	   $data = explode('/',$_GET['data']);//nova data
	   $dia = $data[0];
	   $month = $data[1];
	   $ano = $data[2];
   }
   
   if($month==1){//mês anterior se janeiro mudar valor
	   $mes_ant = 12;
	   $ano_ant = $ano - 1;
   }else{
	   $mes_ant = $month - 1;
	   $ano_ant = $ano;
   }
   
   if($month==12){//proximo mês se dezembro tem que mudar
	   $mes_prox = 1;
	   $ano_prox = $ano + 1;
   }else{
	   $mes_prox = $month + 1;
	   $ano_prox = $ano;
   }
   
   $hoje = date('j');//função importante pego o dia corrente
   switch($month.$n){/*notem duas variaveis para o switch para identificar dia e limitar numero de dias*/
	   case 1: $mes = "JANEIRO";
			   $n = 31;
	   break;
	   case 2: $mes = "FEVEREIRO";// todo ano bixesto fev tem 29 dias
			   $bi = $ano % 4;//anos multiplos de 4 são bixestos
			   if($bi == 0){
				   $n = 29;
			   }else{
				   $n = 28;
			   }
	   break;
	   case 3: $mes = "MARÇO";
			   $n = 31;
	   break;
	   case 4: $mes = "ABRIL";
			   $n = 30;
	   break;
	   case 5: $mes = "MAIO";
			   $n = 31;
	   break;
	   case 6: $mes = "JUNHO";
			   $n = 30;
	   break;
	   case 7: $mes = "JULHO";
			   $n = 31;
	   break;
	   case 8: $mes = "AGOSTO";
			   $n = 31;
	   break;
	   case 9: $mes = "SETEMBRO";
			   $n = 30;
	   break;
	   case 10: $mes = "OUTUBRO";
			   $n = 31;
	   break;
	   case 11: $mes = "NOVEMBRO";
			   $n = 30;
	   break;
	   case 12: $mes = "DEZEMBRO";
			   $n = 31;
	   break;
   }
   
   $pdianu = mktime(0,0,0,$month,1,$ano);//primeiros dias do mes
   $dialet = date('D', $pdianu);//escolhe pelo dia da semana
   switch($dialet){//verifica que dia cai
	   case "Sun": $branco = 0; break;
	   case "Mon": $branco = 1; break;
	   case "Tue": $branco = 2; break;
	   case "Wed": $branco = 3; break;
	   case "Thu": $branco = 4; break;
	   case "Fri": $branco = 5; break;
	   case "Sat": $branco = 6; break;
   }			
   
	   print '<table class="tabela" >';//construção do calendario
	   print '<tr>';
	   print '<td class="mes"><a href="?data='.$dia.'/'.$mes_ant.'/'.$ano_ant.'" title="Mês anterior">  « </a></td>';/*mês anterior*/
	   print '<td class="mes" colspan="5">'.$mes.'/'.$ano.'</td>';/*mes atual e ano*/
	   print '<td class="mes"><a href="?data='.$dia.'/'.$mes_prox.'/'.$ano_prox.'" title="Próximo mês">  » </a></td>';/*Proximo mês*/
	   print '</tr><tr>';
	   print '<td class="sem">D</td>';//printar os dias da semana
	   print '<td class="sem">S</td>';
	   print '<td class="sem">T</td>';
	   print '<td class="sem">Q</td>';
	   print '<td class="sem">Q</td>';
	   print '<td class="sem">S</td>';
	   print '<td class="sem">S</td>';
	   print '</tr><tr>';
	   $dt = 1;
	   if($branco > 0){
		   for($x = 0; $x < $branco; $x++){
				print '<td> </td>';/*preenche os espaços em branco*/
			   $dt++;
		   }
	   }
	   
	   for($i = 1; $i <= $n; $i++ ){/*agora vamos no banco de dados verificar os evendos*/
			   $dtevento = $i."-".$month."-".$ano;
		   $sqlag = mysql_query("SELECT * FROM agenda WHERE dtevento = '$dtevento'") or die(mysql_error());
				   $num = mysql_num_rows($sqlag);/*quantos eventos tem para o mes*/
				   $idev = @mysql_result($sqlag, 0, "dtevento");
				   $eve = @mysql_result($sqlag, 0, "evento");			   
				   if($num > 0){/*prevalece qualquer dia especial do calendario, por isso está em primeiro*/
			  print '<td class="evt">';
			  print '<a href="?d='.$idev.'&data='.$dia.'/'.$month.'/'.$ano.'" title="'.$eve.'">'.$i.'</a>';
			  print '</td>';
			  $dt++;/*incrementa os dias da semana*/
					  $qt++;/*quantos eventos tem no mes*/
		   }elseif($i == $hoje){/*imprime os dia corrente*/
			   print '<td class="hj">';
			   print $i;
			   print '</td>';
			   $dt++;
		   
		   }elseif($dt == 1){/*imprime os domingos*/
			   print '<td class="dom">';
			   print $i;
			   print '</td>';
			   $dt++;
		   }else{/*imprime os dias normais*/
					   print '<td class="td">';
			   print $i;
			   print '</td>';
			   $dt++;
				   }
		   if($dt > 7){/*faz a quebra no sabado*/
		   print '</tr><tr>';
		   $dt = 1;
		   }
	   }
	   print '</tr>';
	   print '</table>';
		   if($qt > 0){/*se tiver evento no mês imprime quantos tem */
			 print "Temos ".$qt." evento(s) em ".strtolower($mes)."<br>";/*mudar para caixa baixa as letras do mes*/
		   }
   if(isset($_GET['d'])){/*link dos dias de eventos*/
	   $idev = $_GET['d'];
	   $sqlev = mysql_query("SELECT * FROM agenda WHERE dtevento = '$idev' ORDER BY hora ASC") or die(mysql_error());
	   $numev = mysql_num_rows($sqlev);
	   for($j = 0; $j < $numev; $j++){/*caso no mesmo dia tenha mais eventos continua imprimindo */
	   $eve = @mysql_result($sqlev, $j, "evento");/*pegando os valores do banco referente ao evento*/
	   $dev = @mysql_result($sqlev, $j, "dtevento");
	   $dsev = @mysql_result($sqlev, $j, "conteudo");
	   $auev = @mysql_result($sqlev, $j, "autor");
	   $lev = @mysql_result($sqlev, $j, "local");
	   $psev = @mysql_result($sqlev, $j, "data");
	   $nowev = date('d/m/Y - H:i', strtotime($psev));/*transforma a data para data padrão brazil*/
	   $hev = @mysql_result($sqlev, $j, "hora"); 
   print '<table width="300" cellspacing="0" cellpadding="0">';/*monta a tabela de eventos*/
   print '<tr><td class="show">'.$dev.' - '.$eve.'</td></tr>';
   print '<tr><td class="linha"><b>Hora: </b>'.$hev.'hs</td></tr>';
   print '<tr><td class="linha"><b>Local: </b>'.$lev.'</td></tr>';
   print '<tr><td class="linha"><b>Descrição: </b>'.nl2br($dsev).'</td></tr>';/*mantem o quebra da linha para dascriçao do evento*/
   print '<tr><td class="linha"><b>Postado: </b><small>'.$nowev.'hs por '.$auev.'</small></td></tr>';
   print '</table>';
	   }
   }
   
   ?>
   
   </body>
   </html>

Bom acho que é isso aí galera!!! http://forum.imasters.com.br/public/style_emoticons/default/thumbsup.gif

Link para baixar os arquivos da agenda: DOWNLOAD

Abraço à todos e qual quer dúvida posta aí ou, envie-me um e-mail (gaspar.teixeira@gmail.com)

Flw

Share this post


Link to post
Share on other sites

Muito bom mesmo.

Seria possível ele interagir com AJAX de uma forma que mudando o mês ele não use o método get para atualizar, e sim apenas atualize com em AJAX? :)

 

Um detalhe muito importante, é que você alterando o mês, ele permanece o 'hoje' em questão para outros meses.

Ex.: Hoje é dia 10, porem no próximo mês também mostra o dia 10 como hoje.

Acho que isso é um bug simples de fixar certo?

Share this post


Link to post
Share on other sites

Muito bom mesmo.

Seria possível ele interagir com AJAX de uma forma que mudando o mês ele não use o método get para atualizar, e sim apenas atualize com em AJAX? :)

 

Um detalhe muito importante, é que você alterando o mês, ele permanece o 'hoje' em questão para outros meses.

Ex.: Hoje é dia 10, porem no próximo mês também mostra o dia 10 como hoje.

Acho que isso é um bug simples de fixar certo?

Bem, ainda estou trabalhando em cima desse script.

No entanto, já consegui alguns beneficios para encrementar o script.

De uma olhada em como visualiza os evento: http://www.pibemfigueira.com.br/agenda.php

(Só tem eventos em Dezembro/2008)

 

Agora estou tentando fazer mudar o mesmo sem dar refresh na página, para não dar problema com navegabilidade do usuário.

Até

Share this post


Link to post
Share on other sites

Parabéns, Gaspar! Estava atrás de um script como esse, o que eu tinha parou de funcionar por alguma razão que não consegui descobrir qual é, nem com a dona dele.

 

Enfim, tenho uma pequena dica pra te dar: coloca um txt de instruções no zip explicando a instalação passo-a-passo. Trabalho com scripts em PHP gringos pra fanlists e cliques há mais de cinco anos e todos vieram com instruções, então acho que ficaria bem mais tranquilo pra ti fazer um manual e tirar alguma dúvida e corrigir uma ou outra coisa lá de vez em quando, do que fazer isso o tempo todo. Não é relapsar, é uma grande ajuda até pra quem recém começou a mexer com MySQL, PHP e etc. ;)

Share this post


Link to post
Share on other sites

Acho que isso é um bug simples de fixar certo?

Muito legal neoHaT,

 

Na verdade este foi o meu intuito, deixar o dia em evidência como forma de localização no mês seguinte ou anterior, entende? É uma forma da pessoa se orientar pelo dia.

 

Eu estou implementando o calendário em ajax... em seguida vai ter um novo post do calendário em ajax.

 

Obrigado pela colaboração.

 

ABC

Share this post


Link to post
Share on other sites

Parabéns, Gaspar! Estava atrás de um script como esse, o que eu tinha parou de funcionar por alguma razão que não consegui descobrir qual é, nem com a dona dele.

 

Enfim, tenho uma pequena dica pra te dar: coloca um txt de instruções no zip explicando a instalação passo-a-passo. Trabalho com scripts em PHP gringos pra fanlists e cliques há mais de cinco anos e todos vieram com instruções, então acho que ficaria bem mais tranquilo pra ti fazer um manual e tirar alguma dúvida e corrigir uma ou outra coisa lá de vez em quando, do que fazer isso o tempo todo. Não é relapsar, é uma grande ajuda até pra quem recém começou a mexer com MySQL, PHP e etc. ;)

Maneiro biba c.

 

Eu vou providenciar este "leia-me.txt" na próxima versão que estarei disponibilizando em ajax.

 

Obrigado pela sugestão!

 

ABC

Share this post


Link to post
Share on other sites

Mto bom o scrip....parabéns!!!! Estava procurando algo funcional e simples!!!

O arquivo TXT realmente foi de grande valia para mim!!!! Sou completamente inciante em programação!!! http://forum.imasters.com.br/public/style_emoticons/default/upset.gif http://forum.imasters.com.br/public/style_emoticons/default/upset.gif http://forum.imasters.com.br/public/style_emoticons/default/upset.gif Dai fico meio perdido no inicio!!!!

 

 

valeu!!!

Share this post


Link to post
Share on other sites

Olá "Gasparzinho",

Bom dia.

Tem como disponibilizar esse script na sua versão mais atual?

Achei maneiro demais e com certeza vou poder ajudar em algumas coisas, por exemplo com um form de upload.

Valeu e espero uma resposta.

 

Valeu

Share this post


Link to post
Share on other sites

fala man achei bem interessante, fiz um parecido, agora estou tentano incrementa-lo com ajax ou jquery..

ja fez algo no seu?? abrass

Share this post


Link to post
Share on other sites

Olá formigoni e demais,

 

Seguinte: estou trabalhando bastante com framework agora. Symfony, XAJAX e tals ... então meu tempo está um pouco curto, mas prometo estar disponibilizando uma versão bem completa do calendário. Uma vez que, que há muitos elogios ao script.

 

Bem, realmente é algo de principiante... mas prometo colocar algo mais profissional nas versões futuras. E certamente o upload de imagens e a integração com modalWindow vão estar presente http://forum.imasters.com.br/public/style_emoticons/default/thumbsup.gif

 

ABC

 

Gaspar

Share this post


Link to post
Share on other sites

Muito bom o script, mas esta dando esse erro, alguém pode me ajudar, Warning: mysql_connect() [function.mysql-connect]: Acesso negado para o usuário 'root'@'localhost' (senha usada: NÃO) in C:\Program Files\EasyPHP 3.0\www\sql.php on line 6

Acesso negado para o usuário 'root'@'localhost' (senha usada: NÃO)

Share this post


Link to post
Share on other sites

Notice: Undefined variable: n in C:\Arquivos de programas\EasyPHP 3.0\www\eq_col_direita.php on line 251

 
Notice: Undefined variable: qt in C:\Arquivos de programas\EasyPHP 3.0\www\eq_col_direita.php on line

 

 

Tá dando o seguinte erro, não estou entendendo..... acima do calendário aparece isso.

Share this post


Link to post
Share on other sites

Notice: Undefined variable: n in C:\Arquivos de programas\EasyPHP 3.0\www\eq_col_direita.php on line 251

 
Notice: Undefined variable: qt in C:\Arquivos de programas\EasyPHP 3.0\www\eq_col_direita.php on line

 

 

Tá dando o seguinte erro, não estou entendendo..... acima do calendário aparece isso.

 

Olá Geovane,

 

Cara por incrível que pareça ... todos que utilizaram com EasyPHP tiveram problema ... exatamente o mesmo problema. Emfim, tente instalar o wampserver20! Acredito que não terá problema ... ou até mesmo no php.ini do seu Easy... verifique se a versão do php é 5.2.x... Mais outra coisa ele deve ter "error_reporting = E_ALL", troque por isso ";error_reporting = E_ALL" Ou tente declarar estas variáveis antes, no inicio do script atribua:

 


var $n = "";
var $qt = "";

Isso é algo que seria necessário nas versões anteriores do PHP (4.x.x) ... na versão 5.X.X não é necessário.

 

Bom, peço desculpa pelo atraso... Peço ao pessoal que remeta e-mails para gaspar.teixeira@gmail.com ... é mais rápido!

 

ABC

Share this post


Link to post
Share on other sites

Olá Gaspar,

 

Quando fui executar o arquivo "TabelaDB.sql", deu o seguinte erro:

 

consulta SQL: ERRO

 

CREATE TABLE IF NOT EXISTS `agenda` (

 

`id` int( 11 ) NOT NULL AUTO_INCREMENT ,

`evento` varchar( 200 ) NOT NULL ,

`dtevento` varchar( 10 ) NOT NULL ,

`autor` varchar( 200 ) NOT NULL ,

`data` timestamp NOT NULL default CURRENT_TIMESTAMP ,

`hora` varchar( 5 ) NOT NULL ,

`conteudo` text NOT NULL ,

`local` varchar( 200 ) NOT NULL ,

PRIMARY KEY ( `id` ) ) ENGINE = MYISAM DEFAULT CHARSET = latin1 AUTO_INCREMENT =1

 

Mensagens do MySQL :

 

#1064 - You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'CURRENT_TIMESTAMP,

`hora` varchar(5) NOT NULL,

`conteudo`

 

Share this post


Link to post
Share on other sites

Muito bom o trabalho, só tenho uma dúvida.

 

E já tinha um tabela criada para eventos, e gostaria de saber se tem com integra-la automaticamente ao código da agenda.

 

Ex.

 

Quando o usuário clicada na data ela iria direta para a página do evento.

Share this post


Link to post
Share on other sites

Sim cara é barbada... dá uma olhada no código que você tem. Quais os campos das tabela que você ja possui que precisam ser alterados ... depois olha os campos da tabela que eu fiz. Verifique quais tem que ser alterados e altere no script da agenda. Caso tenha alguma dúvida posta aí ou envia e-mail. gaspar.teixeira@gmail.com.

 

Grande abraço!

 

 

 

Olá amigão.

 

Troque o nome deste campo conteudo por `texto'.

 

Seguinte. o mysql pode estar criando restrições com nomes semelhantes. CONT é uma sintax SQL então pode estar dando conflito aí.

 

Não esqueça de trocar onde aparece conteudo no script por texto ... caso obtenha sucesso na sugestão acima.

 

Caso não consiga mande um e-mail para gaspar.teixeira@gmail.com

 

Abraço.

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

×

Important Information

Ao usar o fórum, você concorda com nossos Terms of Use.