Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Galera, bom dia, gostaria que vocês me ajudassem com uma string.
Eu preciso que meu código leia a data com o 0 na frente, datas como 20/04/2012 ele entende perfeitamente, mas quando cadastro uma data com o dia assim 04/04/2012 ele não entende.
O que posso usar para rodar??
Precisaria de uma função inversa da ltrim mas nao achei qual!!!
>
Galera, bom dia, gostaria que vocês me ajudassem com uma string.
Eu preciso que meu código leia a data com o 0 na frente, datas como 20/04/2012 ele entende perfeitamente, mas quando cadastro uma data com o dia assim 04/04/2012 ele não entende.
O que posso usar para rodar??
Eu não sei por que ele só de pegar a data não reconhece os dias com 0 na frente, será que tem alguma string que faça esse reconhecimento?!?!
Vou por só uma
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());
aqui segue o código todo para facilitar .
<?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 = date('m');
$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>';
}
}
?>Primeiro você poderia economizar algumas linhas...
>
if(empty($_GET['data'])){//navegaçao entre os meses
$dia = date('d');
$month = date('m');
$ano = date('Y');
}else{
$data = explode('-',$_GET['data']);//nova data
$dia = $data[0];
$month = $data[1];
$ano = $data[2];
}
Troque por:
if(empty($_GET['data'])){//navegaçao entre os meses
$data1 = date('Y-m-d');
list($ano, $month, $dia) = explode('-', $data1));
}else{
list($ano, $month, $dia) = explode('-', $_GET['data']));
}
Mostre o resultado por favor
$data = substr('04/04/12',0,2);
$value = strpos($data,'0');
if($value === 0 || $value === 1)
echo 'Ok';
else
echo 'Error';Não rolou ele ainda só está pegando se o dia for 4 e não 04!!
Vou fazer uma limpa no código e tirar essas linhas extras rsrs
>
Primeiro você poderia economizar algumas linhas...
Troque por:
if(empty($_GET['data'])){//navegaçao entre os meses
$data1 = date('Y-m-d');
list($ano, $month, $dia) = explode('-', $data1));
}else{
list($ano, $month, $dia) = explode('-', $_GET['data']));
}
Mostre o resultado por favor
Como você esta passando a data via $_GET?
Da um echo em $_GET['data'] e manda ai pra gente ver...Du, devo estar fazendo isso errado então pois quando apliquei o echo
ele retornou Notice: Undefined index: dtevento in C:\Users\Edicao\Desktop\agenda\agenda.php on line 241
mas ai que está, pois as outras datas que estão cadastradas, estão voltando normais, dias como 10/04/2012 ou 22/04/2012
e o dia 4/04/2012 mas com o 0 dia 04/04/2012 não!!!
mande o código deste trecho...
Está é a primeira parte
if(empty($_GET['data'])){//navegaçao entre os meses
$dia = date('d');
$month = date('m');
$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;
}
e este é o código inteiro, só para entender melhor
if(empty($_GET['data'])){//navegaçao entre os meses
$dia = date('d');
$month = date('m');
$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>';
}
}utilize a tag code para enviar seus códigos...
De uma echo assim
if(empty($_GET['data'])){//navegaçao entre os meses
echo $dia = date('d');
echo $month = date('m');
echo $ano = date('Y');
}else{
$data = explode('-',$_GET['data']);//nova data
echo $dia = $data[0];
echo $month = $data[1];
echo $ano = $data[2];
}
A um tempo tive que fazer um calenário assim também, da uma olhada:
Está pegando a data de hoje!! ele printa na tela 19042012
>
utilize a tag code para enviar seus códigos...
De uma echo assim
if(empty($_GET['data'])){//navegaçao entre os meses
echo $dia = date('d');
echo $month = date('m');
echo $ano = date('Y');
}else{
$data = explode('-',$_GET['data']);//nova data
echo $dia = $data[0];
echo $month = $data[1];
echo $ano = $data[2];
}Ainda não rolou nada, alguém tem uma dica ai?!?!?!
>
utilize a tag code para enviar seus códigos...
De uma echo assim
if(empty($_GET['data'])){//navegaçao entre os meses
echo $dia = date('d');
echo $month = date('m');
echo $ano = date('Y');
}else{
$data = explode('-',$_GET['data']);//nova data
echo $dia = $data[0];
echo $month = $data[1];
echo $ano = $data[2];
}
A um tempo tive que fazer um calenário assim também, da uma olhada:
>
Ainda não rolou nada, alguém tem uma dica ai?!?!?!
E quando você envia a data pelo method get?
Cara sinceramente não entendi, esse código é meio monstro pois montem com base em outro código, por isso estou perdido
não sei qual critério ele usa para pegar essa data do banco!! Estou bem confuso!!
>
E quando você envia a data pelo method get?
não entendi sua pergunta!! desculpe!
acho que estou tentando alterar uma parte do código que não tem ligação com essa base que quero, mas tbem não achei mais nada no código que mostre que ele pega essa info do banco eu alterei o código inteiro, vou mandar pra você ver!!
<!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" />
<meta HTTP-EQUIV="refresh" CONTENT="30" />
<!--atualiza a pagina sozinha, no content são os segundos-->
<title>Agenda</title>
<link href="style_agenda.css" rel="stylesheet" type="text/css" />
</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 = date('m');
$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 '<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 tb_controle 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, "cliente");
if($num > 0){/*prevalece qualquer dia especial do calendario, por isso está em primeiro*/
print '<td class="evt">';
$sqlev = mysql_query("SELECT * FROM tb_controle WHERE dtevento = '$idev' ORDER BY hora_a 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, "cliente");/*pegando os valores do banco referente ao evento*/
$dev = @mysql_result($sqlev, $j, "dtevento");
$dsev = @mysql_result($sqlev, $j, "produtora");
$auev = @mysql_result($sqlev, $j, "diretor");
$lev = @mysql_result($sqlev, $j, "estudio");
$hev = @mysql_result($sqlev, $j, "hora_a");
$hev_b = @mysql_result($sqlev, $j, "hora_b");
print '<table width="190" cellspacing="0" cellpadding="0">';/*monta a tabela de eventos*/
print '<tr><td class="show">'.$i.' - '.nl2br($eve).'</td></tr>';
print '<tr><td class="linha"><b>'.$hev.'hs - '.$hev_b.'hs</b></td></tr>';
print '<tr><td class="linha"><b>Local: </b>'.$lev.'</td></tr>';
print '<tr><td class="linha"><b>Dir.: </b>'.$auev.'<b> Prod.: </b>'.nl2br($dsev).'</td></tr>';
print '</table>';
}
print '</td>';
$dt++;/*incrementa os dias da semana*/
@$qt++;/*quantos eventos tem no mes*/
}elseif($dt == 1){/*imprime os domingos*/
print '<td class="dom">';
print $i;
print '</td>';
$dt++;
}elseif($dt == 7){/*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>';
?>
</body>
</html>Bom, vou tentar ajudar.
Essa verificação que você com faz strpos está meio estranha... Porque não verifica a data normalmente, como várias pessoas indicaram, com explode, etc? Eu, geralmente utilizo expressão regular (como mostrado abaixo).
Fiz este código tomando como base que você está usando PHP 5.3
Nele, eu monto um calendário com base na data informada.
Se não informar nenhuma data no GET, eu pego a atual.
Ao invés de fazer uma consulta para cada dia do mes, faço uma consulta que pega os eventos do mes inteiro.
<?
date_default_timezone_set('America/Sao_Paulo');
/ @var $data DateTime Objeto de data /
$data = null;
// se o usuario informou uma data valida
if(!empty($_GET['data']) && preg_match('@^(\d{2})/(\d{2})/(\d{4})$@', $_GET['data'], $reg)){
$data = new DateTime("{$reg[3]}-{$reg[2]}-{$reg[1]}");
}
// se ainda nao tem uma data valida, pegamos a de hoje
if(empty($data)){
$data = new DateTime();
}
// pegamos o mes e ano
$mes = $data->format('m');
$ano = $data->format('Y');
// pegamos a quantidade de dias no mes
$data->setDate($ano, $mes+1, 0);
$qtdDias = $data->format('d');
// dia da semana que cai o ultimo dia do mes
$diaSemanaUltimo = $data->format('w');
// movemos o dia para o primeiro do mes selecionado
$data->setDate($ano, $mes, 1);
// dia da semana do primeiro dia do mes
$diaSemanaPrimeiro = $data->format('w');
// lista de meses
$meses = explode(',',',janeiro,fevereiro,março,abril,maio,junho,julho,agosto,setembro,outubro,novembro,dezembro');
// selecionando os eventos do mes. Assim, ao inves de 28 ~ 30 consultas, fazemos uma so
$sql = 'SELECT codevento, nome, data_evento FROM eventos WHERE data_evento BETWEEN ? AND ?';
$stm = $pdo->prepare($sql);
$stm->bindParam(1, "$ano-$mes-01");
$stm->bindParam(2, "$ano-$mes-$qtdDias");
$stm->execute();
// cache dos eventos indexados pela data
$cacheEventos = array();
// para cada evento, colocamos em cache
while($row = $stm->fetch(PDO::FETCH_ASSOC)){
$cacheEventos[ $row['data_evento'] ][] = $row;
}
//////////////////////////////////////////////////////////////////////////////
// agora, que temos tudo o que precisamos, montamos o calendario
//////////////////////////////////////////////////////////////////////////////
echo '<table width="100%">';
// cabecalho dos dias
echo '
<tr><td colspan="7" align="center">', $meses[ (int) $mes ], '/', $ano, '</td></tr>
<tr>
<th>Dom</th>
<th>Seg</th>
<th>Ter</th>
<th>Qua</th>
<th>Qui</th>
<th>Sex</th>
<th>Sab</th>
</tr>';
// criando os quadros em branco até o primeiro dia da semana
echo '<tr>';
for($dia = 0; $dia < $diaSemanaPrimeiro; $dia++){
echo '<td>-</td>';
}
// escrevemos os dias do calendario
for($dia = 1; $dia<=$qtdDias; $dia++){
// atualizando o objeto de data
$data->setDate($ano, $mes, $dia);
// dia semana
$diaSemana = $data->format('w');
// temos eventos neste dia?
if(!empty($cacheEventos[ $data->format('Y-m-d') ])){
$cor = '#FFCC00';
} else {
// cor da celula se for sabado/domingo
$cor = $diaSemana == 0 || $diaSemana == 6 ? '#EFEFEF' : '#FFFFFF';
}
// exibindo o dia
echo '<td bgcolor="', $cor, '"><span>', $dia, '</span>'; echo '<div>';
foreach($cacheEventos[$data->format('Y-m-d')] as $evento){
echo $evento['nome'], '<br>';
}
echo '</div>';
}
echo '</td>';
// é sabado?
if($diaSemana == 6){
echo '</tr><tr>';
}
}
// escrevendo as celulas remanescentes
for($dia = $diaSemanaUltimo; $dia < 6; $dia++){
echo '<td>-</td>';
}
echo '</tr>';
echo '</table>';
Espero ter ajudado com o exemplo.
Ps.: Usem spoiler ao enviar códigos grandes!
@braços e fique com Deus!
olá Hufersil, segui suas dicas e usando seu código de calendário, tive um pequeno problema, ele da um fatal error em relação ao momento da pesquisa. nesse trecho:
$sql = 'SELECT * FROM tb_controle WHERE dtevento BETWEEN ? AND ?';
$stm = $pdo->prepare['$sql'];
$stm->bindParam(1, "$ano-$mes-01");
$stm->bindParam(2, "$ano-$mes-$qtdDias");
$stm->execute();
da erro no $pdo e nesse blindParam, como resolver??
>
Bom, vou tentar ajudar.
Essa verificação que você com faz strpos está meio estranha... Porque não verifica a data normalmente, como várias pessoas indicaram, com explode, etc? Eu, geralmente utilizo expressão regular (como mostrado abaixo).
Fiz este código tomando como base que você está usando PHP 5.3
Nele, eu monto um calendário com base na data informada.
Se não informar nenhuma data no GET, eu pego a atual.
Ao invés de fazer uma consulta para cada dia do mes, faço uma consulta que pega os eventos do mes inteiro.
<?
date_default_timezone_set('America/Sao_Paulo');
/ @var $data DateTime Objeto de data /
$data = null;
// se o usuario informou uma data valida
if(!empty($_GET['data']) && preg_match('@^(\d{2})/(\d{2})/(\d{4})$@', $_GET['data'], $reg)){
$data = new DateTime("{$reg[3]}-{$reg[2]}-{$reg[1]}");
}
// se ainda nao tem uma data valida, pegamos a de hoje
if(empty($data)){
$data = new DateTime();
}
// pegamos o mes e ano
$mes = $data->format('m');
$ano = $data->format('Y');
// pegamos a quantidade de dias no mes
$data->setDate($ano, $mes+1, 0);
$qtdDias = $data->format('d');
// dia da semana que cai o ultimo dia do mes
$diaSemanaUltimo = $data->format('w');
// movemos o dia para o primeiro do mes selecionado
$data->setDate($ano, $mes, 1);
// dia da semana do primeiro dia do mes
$diaSemanaPrimeiro = $data->format('w');
// lista de meses
$meses = explode(',',',janeiro,fevereiro,março,abril,maio,junho,julho,agosto,setembro,outubro,novembro,dezembro');
// selecionando os eventos do mes. Assim, ao inves de 28 ~ 30 consultas, fazemos uma so
$sql = 'SELECT codevento, nome, data_evento FROM eventos WHERE data_evento BETWEEN ? AND ?';
$stm = $pdo->prepare($sql);
$stm->bindParam(1, "$ano-$mes-01");
$stm->bindParam(2, "$ano-$mes-$qtdDias");
$stm->execute();
// cache dos eventos indexados pela data
$cacheEventos = array();
// para cada evento, colocamos em cache
while($row = $stm->fetch(PDO::FETCH_ASSOC)){
$cacheEventos[ $row['data_evento'] ][] = $row;
}
//////////////////////////////////////////////////////////////////////////////
// agora, que temos tudo o que precisamos, montamos o calendario
//////////////////////////////////////////////////////////////////////////////
echo '<table width="100%">';
// cabecalho dos dias
echo '
<tr><td colspan="7" align="center">', $meses[ (int) $mes ], '/', $ano, '</td></tr>
<tr>
<th>Dom</th>
<th>Seg</th>
<th>Ter</th>
<th>Qua</th>
<th>Qui</th>
<th>Sex</th>
<th>Sab</th>
</tr>';
// criando os quadros em branco até o primeiro dia da semana
echo '<tr>';
for($dia = 0; $dia < $diaSemanaPrimeiro; $dia++){
echo '<td>-</td>';
}
// escrevemos os dias do calendario
for($dia = 1; $dia<=$qtdDias; $dia++){
// atualizando o objeto de data
$data->setDate($ano, $mes, $dia);
// dia semana
$diaSemana = $data->format('w');
// temos eventos neste dia?
if(!empty($cacheEventos[ $data->format('Y-m-d') ])){
$cor = '#FFCC00';
} else {
// cor da celula se for sabado/domingo
$cor = $diaSemana == 0 || $diaSemana == 6 ? '#EFEFEF' : '#FFFFFF';
}
// exibindo o dia
echo '<td bgcolor="', $cor, '"><span>', $dia, '</span>'; echo '<div>';
foreach($cacheEventos[$data->format('Y-m-d')] as $evento){
echo $evento['nome'], '<br>';
}
echo '</div>';
}
echo '</td>';
// é sabado?
if($diaSemana == 6){
echo '</tr><tr>';
}
}
// escrevendo as celulas remanescentes
for($dia = $diaSemanaUltimo; $dia < 6; $dia++){
echo '<td>-</td>';
}
echo '</tr>';
echo '</table>';
Espero ter ajudado com o exemplo.
Ps.: Usem spoiler ao enviar códigos grandes!
@braços e fique com Deus!
O correto são parenteses, e não colchetes em:
$stm = $pdo->prepare($sql);
Note também que ali, onde você passa a variavel, não tem aspas.
@braços
sim sim, esse código eu tinha feito um teste mesmo, mas com o seu código do jeito certinho que você mandou!! da o erro!!
>
O correto são parenteses, e não colchetes em:
$stm = $pdo->prepare($sql);
Note também que ali, onde você passa a variavel, não tem aspas.
@braços
esses erros
Notice: Undefined variable: pdo in C:\Users\Edicao\Desktop\agenda\agenda_teste.php on line 279
Fatal error: Call to a member function prepare() on a non-object in C:\Users\Edicao\Desktop\agenda\agenda_teste.php on line 279
Gregorcs,
Você sabe o que é PDO?
Dê uma lida nela, e então você vai entender o porque está dando este erro ;)
@braços e fique com Deus!
resolvido!!!
Posta seu código para entendermos melhor como você está lendo esta data.
Até mais
>
Galera, bom dia, gostaria que vocês me ajudassem com uma string.
Eu preciso que meu código leia a data com o 0 na frente, datas como 20/04/2012 ele entende perfeitamente, mas quando cadastro uma data com o dia assim 04/04/2012 ele não entende.
O que posso usar para rodar??
Precisaria de uma função inversa da ltrim mas nao achei qual!!!