Ok ho risolto il problema. Nel caso possa servire posto il codice completo in riferimento alle tabelle indicate sopra, è un codice utile per creare un calendario per eventi che permette cliccando su ogni data di visualizzare per quella stessa data tutti gli eventi disponibili. Può essere usato per programmare i film disponibili in una sala cinematografica, per dei concerti, per offerte come quelle del supermercato che hanno valenza per diverse settimane o altro ancora.
Oltre alle tabelle di cui sopra e al classico file config.php (e un'area amministrativa se si vuole permettere a un eventuale cliente di caricarsi da solo i propri eventi) ci vogliono 2 file (si potrebbe fare tutto in un unico file volendo, ma rendo le cose più semplici):
calendario.php
eventi.php
Questi i codici funzionanti:
calendario.php
Codice PHP:
<?php
function ShowCalendar($m,$y)
{
if ((!isset($_GET['d']))||($_GET['d'] == ""))
{
$m = date('n');
$y = date('Y');
}else{
$m = (int)strftime( "%m" ,(int)$_GET['d']);
$y = (int)strftime( "%Y" ,(int)$_GET['d']);
$m = $m;
$y = $y;
}
$precedente = mktime(0, 0, 0, $m -1, 1, $y);
$successivo = mktime(0, 0, 0, $m +1, 1, $y);
$nomi_mesi = array( //nome mesi in italiano
"Gen",
"Feb",
"Mar",
"Apr",
"Mag",
"Giu",
"Lug",
"Ago",
"Set",
"Ott",
"Nov",
"Dic"
);
$nomi_giorni = array( //nome giorni in italiano
"Lun",
"Mar",
"Mer",
"Gio",
"Ven",
"Sab",
"Dom"
); //con questo codice abbiamo impostato in italiano giorni e mesi
$cols = 7; //impostiamo le colonne della tabella del calendario
$days = date("t",mktime(0, 0, 0, $m, 1, $y));
$lunedi= date("w",mktime(0, 0, 0, $m, 1, $y));
if($lunedi==0) $lunedi = 7;
echo "<table>\n";
echo "<tr>\n
<td colspan=\"".$cols."\">
<a href=\"?d=" . $precedente . "\"><<</a>
" . $nomi_mesi[$m-1] . " " . $y . "
<a href=\"?d=" . $successivo . "\">>></a></td></tr>"; //questo codice è servito per la navigazione tra i mesi
foreach($nomi_giorni as $v)
{
echo "<td><b>".$v."</b></td>\n";
}
echo "</tr>";
for($j = 1; $j<$days+$lunedi; $j++)
{
if($j%$cols+1==0)
{
echo "<tr>\n";
}
if($j<$lunedi)
{
echo "<td> </td>\n";
}else{
$day= $j-($lunedi-1);
$data = strtotime(date($y."-".$m."-".$day));
$oggi = strtotime(date("Y-m-d"));
//estraiamo dalla tabella i valori per ogni data del calendario solo nel caso in cui tale data sia compresa tra la data di inizio evento e quella di fine evento
include 'config.php';
$sql = "SELECT * FROM tabella_eventi WHERE $data BETWEEN start_data AND end_data";
$result = mysql_query($sql) or die (mysql_error());
if(mysql_num_rows($result) > 0)
{
while($fetch = mysql_fetch_array($result))
{
if ($str_data == ($data <= $fetch['start_data'] && $data >= $fetch['end_data'])) //verifico se la data è compresa tra quelle indicate in tabella
{
$day = "<a href=\"eventi.php?day=$data\">$day</a>"; //in caso il record esista si crea un link che rimanda allo stesso record
}
}
}
if($data != $oggi) //imposta la visualizzazione sulla data di oggi
{
echo "<td>".$day."</td>"; //se non è la data di oggi si vedrà normalmente
}else{
echo "<td bgcolor=\"#CCFFCC\"><b>".$day."</b></td>"; //se la data è quella di oggi sarà in grassetto e con sfondo colorato
}
}
if($j%$cols==0)
{
echo "</tr>";
}
}
echo "<tr></tr>";
echo "</table>";
}
ShowCalendar(date("m"),date("Y"));
?>
eventi.php
Codice PHP:
<?php
if(isset($_GET['day']) && is_numeric($_GET['day']))
{
$day = $_GET['day'];
include 'config.php';
$sql = "SELECT * FROM tabella_eventi WHERE start_data <= $day && end_data >= $day"; //selezioniamo i record che comprendono la data passata tramite GET
$result = mysql_query($sql) or die (mysql_error());
if(mysql_num_rows($result) > 0)
{
while($fetch = mysql_fetch_array($result)) //cicliamo tutti i risultati ottenuti per mostrare tutti gli eventi disponibili in tale data
{
$titolo = stripslashes($fetch['evento']);
$testo = stripslashes($fetch['descrizione']);
echo "" . $titolo . "<br>" . $testo . "<br>
<hr>";
}
}
}
?>
Spero possa essere utile per chi cerca un qualcosa del genere, dato che in giro non ne vedevo di cose del genere