[PHP] Script calendario - Problema gestione date.

Versione Completa   Stampa   Cerca   Utenti   Iscriviti     Condividi : FacebookTwitter
Arkantos01
00sabato 3 marzo 2007 14:11
Questo script è visibile qui: brambilla.netsons.org/cns/cal.php

Ho 2 problemi principali.
1. Talvolta sfogliando tra i mesi la tabella risulta mal fatta (celle in più (vuote) in fondo a DX).
2. Gli avvenimenti pianifacati vengono visualizzata solo quelli del mese visualizzato, ma sfogliando non ci sono nei mesi successivi o precedenti (ce n'è uno ad Aprile e ce ne sono 4 a Febbraio).
Ecco il codice:

Funzione "eventi" richiamata:

function eventi($aaaa, $mm, $gg) {
//CONTROLLARE SE LA DATE('m') RESTITUISCE SEMPRE 2 CIFRE (ex 08) O SE NE RESISTITUISCE UNA (EX 8).
$data = $aaaa.'-'.$mm.'-'.$gg;
$query = "SELECT * FROM 'calendario' WHERE 'data' = '".$data."';";
//print $query;
$result = mysql_query($query);

while ($row = mysql_fetch_array($result)) {
echo('<div class="div_cal" style="background-color:'.colore($row["sez"]).';">');

if ($row['news'] == NULL) {
echo('<span class="cal_txt">'.$row["descr"].'</span>');
}
else {
echo('<a href="'.$row["news"].'" class="cal_link">'.$row["descr"].'</a>');
}

echo('</div>');
}
}



Pagina cal.php:

<?php
include_once('top.inc.php');
include_once('db.php');
include_once('funzioni.php');

//Global $_GET;

if ($_GET['x'] == NULL){
$mese_ = date('m');
$anno_ = date('Y');
}
else{
$mese_ = (int)strftime( "%m" ,(int)$_GET['x']);
$anno_ = (int)strftime( "%Y" ,(int)$_GET['x']);
}


$prev = mktime(0, 0, 0, $mese_ -1, 1,  $anno_);

$next = mktime(0, 0, 0, $mese_ +1, 1,  $anno_);


$human_month = array("error", "Gennaio", "Febbraio", "Marzo", "Aprile", "Maggio", "Giugno", "Luglio", "Agosto", "Settembre", "Ottobre", "Novembre", "Dicembre" ); 


$settimana   = array("Lunedì", "Martedì", "Mercoledì", "Giovedì", "Venerdì", "Sabato", "Domenica"); 
$colonne     = 7;
$giorni      = date("t",mktime(0, 0, 0, $mese_, 1, $anno_));  //giorni del mese in questione
$primo_lunedi= date("w",mktime(0, 0, 0, $mese_, 1, $anno_));  //Array_parte da 0

if($primo_lunedi==0){
$primo_lunedi = 7;  //siamo mica americani
}

echo('<div><a href="?x='.$prev.'" class="cal_gg">«</a> <span class="cal_gg">'.$human_month[(int)$mese_].' '.$anno_.'</span> <a href="?x='.$next.'" class="cal_gg">»</a></div><br />'); //mese - anno 	
echo('<table width="90%" class="tab_cal" border="1"><tr>'); //table

foreach($settimana as $val){

echo('<td class="cal_gg">'.$val.'</td>');

}
echo('</tr>');
$tr = TRUE;
for($i = 1; $i<$giorni+$primo_lunedi; $i++){

if($tr==TRUE){
echo('<tr>');
$tr = FALSE;
}

if($i<$primo_lunedi){

echo('<td class="td_cal_vuota"> </td>');
$tr = false;
if ($vuoti == NULL) {
$vuoti = 1;
}
else {
$vuoti++;
}
}
else{

$giorno_= $i-($primo_lunedi-1);
$a = strtotime(date($anno_."-".$mese_."-".$giorno_));
$b = strtotime(date("Y-m-d"));

// uncomment when debugging
/*echo($giorno_."-".$mese_."-".$anno_);
echo(" -> ");
echo(strftime("%d-%m-%Y",$a));
//echo($a);
echo(" -> ");
echo(strftime("%d-%m-%Y",$b));
//echo($b);
echo("<br>");
*/

if($a != $b){

echo('<td class="txt_day">'.$giorno_);

eventi($anno_, $mese_, $giorno_);
echo('</td>');
}

else{

echo('<td class="txt_today">'.$giorno_);
eventi($anno_, $mese_, $giorno_);
echo('</td>');
}


}
if($i % $colonne==0){
echo('</tr>');
$tr = TRUE;
}
}
//disegno le celle vuote
for ($rim = $giorni % 7 + $vuoti; $rim >= 0; $rim--) {
echo('<td class="td_cal_vuota"> </td>');
}

echo('</tr></table>');

include_once('bottom.inc.php');
?>



Questo è il DB:

CREATE TABLE 'calendario' (
  'id' tinyint(3) NOT NULL auto_increment,
  'data' varchar(16) character set utf8 collate utf8_bin NOT NULL default '',
  'sez' varchar(16) character set utf8 collate utf8_bin NOT NULL default '',
  'descr' text character set utf8 collate utf8_bin NOT NULL,
  'news' varchar(255) character set utf8 collate utf8_bin default NULL,
  KEY 'id' ('id')
) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=6 ;

-- 
-- Dump dei dati per la tabella 'calendario'
-- 

INSERT INTO 'calendario' ('id', 'data', 'sez', 'descr', 'news') VALUES (1, '2007-04-08', '', 'Apertura sede estiva.', ''),
(2, '2007-02-11', 'REG', 'Prova regata', NULL),
(3, '2007-02-11', 'CEN', 'sezione CENE', NULL),
(4, '2007-02-11', 'ATT', 'sezione attività..', NULL),
(5, '2007-02-11', 'EV', 'Nuovo evento speciale..', NULL);



Grazie a tutti per l'aiuto [SM=x53911]
Modificato da Arkantos01 03/03/2007 14.12
Arkantos01
00domenica 4 marzo 2007 18:09
risolto il problema delle celle vuote. Questo è il nuovo for:


//disegno le celle vuote

for ($rim = $vuoti + $giorni; $rim % 7 != 0; $rim++):
echo('<td class="td_cal_vuota">&nbsp;</td>');
endfor;

Arkantos01
00domenica 4 marzo 2007 18:18
Risolto anche il problema delle query eventi.

il primo else è ora così:

else{
$mese_ = strftime( "%m" ,(int)$_GET['x']);
$anno_ = strftime( "%Y" ,(int)$_GET['x']);
}



(ho eliminato (int), in PHP 5 non paiono esserci problemi con le altre funzioni delle date).
Prima $mese_ era ad esempio "4" mentre nel DB avevo "04" (in conformità alla funzione date senza int), per poter avere anche un ordien cronologico..
Questa è la versione 'lo-fi' del Forum Per visualizzare la versione completa clicca qui
Tutti gli orari sono GMT+01:00. Adesso sono le 18:07.
Copyright © 2000-2024 FFZ srl - www.freeforumzone.com