(simpel?) kalender php problemer
Hej.(først og fremmest: kender intet til PHP!)
Jeg har en kalender der ikke helt virker. Jeg fandt dette script* (tilbage i 2006) og nu virker det ikke mere.. (har virket)
Det viser kun aktuel måned, hverken forrige eller næste virker, derudover virker funktionen "ret i kalender" heller ikke, førhen kom der en knap i hver datofelt hvor man kunne oprette en lille tekst som så blev gemt i en .txt-fil
Denne "ret-i-kalender"-funktion virkede dog heller ikke i første omgang - dataerne blev ikke gemt i .txt-fil.
* php kode:
<?
// *****************************************************************************
// * *
// * Dansk kalender i PHP *
// * *
// * Copyright 2002: Kenneth Lund-Petersen (kenneth@lund-petersen.dk) *
// * *
// * *
// * Dette script er Freeware *
// * Hvis der er en, som er klog og retter i scriptet, vil jeg meget gerne *
// * have forbedringerne/ændringerne at vide :o) *
// * *
// *****************************************************************************
// ************** User settings **************
// Brugernavn og password til siden
$user = "a";
$pass = "a";
// Fil, hvori beskederne ligger
$filnavn = "kalenderbeskeder.txt";
// Formatering af tabellen (kræver lidt HTML kendskab, men hvis du læser det her, kender du det sikkert...)
// ... Gå ned til funktionerne LayoutWeekend og LayoutWorkday, og ændr lidt html strengene, så er du på vej
unset($task);
if(($username == $user) && ($password == $pass))
{
if($action == "TypedLogin") { $task = "ChooseDayToEdit"; }
elseif($action == "HaveChosenDayToEdit") { $task = "EditDay"; }
elseif($action == "HaveEditedMessage") { $task = "SaveMessage"; }
else { $task = "DontKnowWhatToDo"; }
}
else
{
if($action == "AttemptingToLogin") { $task = "ShowLogin"; }
if($action == "TypedLogin") { $task = "ShowLoginWithError"; }
}
echo "<form method=post>";
//Henter kalenderbeskeder til buffer
$fd = @fopen ("$filnavn", "r");
while (!feof ($fd)) {
$buffer[] = fgets($fd, 4096);
}
fclose ($fd);
// Variable som anviser nuværende dato
$date = getdate();
$CurrentDate = $date['mday'];
$CurrentMonth = $date['mon'];
$CurrentYear = $date['year'];
// Variable som anviser den viste måned, m.m.
if(!(isset($month))) $month = $date['mon'];
if ($month == 0)
{ $month = 12;
$year--;}
if ($month == 13)
{ $month = 1;
$year++;}
if(!(isset($year))) $year = $CurrentYear;
// Funktion til at oversætte engelsk til dansk
function Translate($weekday)
{
switch ($weekday) {
case 'Monday': return "Mandag";
case 'Tuesday': return "Tirsdag";
case 'Wednesday': return "Onsdag";
case 'Thursday': return "Torsdag";
case 'Friday': return "Fredag";
case 'Saturday': return "Lørdag";
case 'Sunday': return "Søndag";
case 'January': return "Januar";
case 'February'; return "Februar";
case 'March'; return "Marts";
case 'April'; return "April";
case 'May'; return "Maj";
case 'June'; return "Juni";
case 'July'; return "Juli";
case 'August'; return "August";
case 'September'; return "September";
case 'October'; return "Oktober";
case 'November'; return "November";
case 'December'; return "December";
}
}
// Skal her gemme til filen, hvis der er ændringer
if (($user == $username) && ($pass == $password) && ($task=="SaveMessage"))
{
// Erstatter linjeskift med <br> i Message
$Message = ereg_replace("\n",'<br>',$Message);
//Tjecker om der er noget i bufferen i forvejen, og hvilken plads dagen ligger på
if(sizeof($buffer) > 0)
{
for($i=0 ; $i < sizeof($buffer) ; $i++)
if(ereg($ChosenDay,$buffer[$i]))
{ $PlaceInBuffer = $i; }
}
// Lægger den nye besked over i buffer
if (strlen($Message) > 0)
if (strlen($PlaceInBuffer) > 0)
$buffer[$PlaceInBuffer] = $ChosenDay."|".$Message."\n"; // Hvis der ovenfor ikke findes en plads, vil PlaceInBuffer være tom,
else // og Message vil blive lagt ind i en ny plads i buffer.
$buffer[] = $ChosenDay."|".$Message."\n";
elseif(strlen($PlaceInBuffer) > 0)
$buffer[$PlaceInBuffer] = ''; // Sletter pladsen, hvis der ikke er en besked
// Gemmer filen
$fp = fopen("$filnavn", "w");
for ($a=0; $a < sizeof($buffer); $a++) {
if(strlen($buffer[$a] > 0))
fwrite($fp, $buffer[$a]);
}
fclose($fp);
}
function CheckForMessage($Date)
{
global $buffer, $month, $year;
$Date = $Date."/".$month."-".$year;
if(sizeof($buffer) > 0)
{
//Splitter datoer fra beskeder
for($i=0 ; $i < sizeof($buffer) ; $i++)
{
$temp = explode('|',$buffer[$i]);
$DateArray[] = $temp[0];
$MessageArray[] = $temp[1];
}
for($i=0 ; $i < sizeof($buffer) ; $i++)
{
if((ereg($Date,$DateArray[$i])) && (strlen($Date) == strlen($DateArray[$i])))
{
return $MessageArray[$i];
break;
}
}
}
else
return "";
}
// Funktion hvori layoutet til ugedagene ligger
function LayoutWeekday($date,$weekday)
{
global $CurrentDate, $CurrentMonth, $CurrentYear, $month, $year;
global $password, $pass, $username, $user, $task;
// Hvis brugeren skal redigere
if (($user == $username) && ($pass == $password) && ($task=="ChooseDayToEdit"))
$editbutton = "<input type=submit name=ChosenDay value=".$date."/".$month."-".$year.">";
if((isset($date)) && (strlen($date) > 0) && (isset($weekday)) && (strlen($weekday) > 0)) // En dag i kalenderen
{
if(($CurrentDate == $date) && ($CurrentMonth == $month) && ($CurrentYear == $year))
echo "<td width=120 height=80 align=left valign=top bgcolor=#ff9999><font face=Verdana size=2>".$date." - ".Translate($weekday).$editbutton."<br>".CheckForMessage($date)."</td>\n";
else
echo "<td width=120 height=80 align=left valign=top bgcolor=#aaaaaa><font face=Verdana size=2>".$date." - ".Translate($weekday).$editbutton."<br>".CheckForMessage($date)."</td>\n";
}
else // Uden for kalenderen
echo "<td width=120 height=80 align=center valign=top bgcolor=#aaaaaa> </td>\n";
}
// Funktion hvori layoutet til weekenden ligger
function LayoutWorkday($date,$weekday)
{
global $CurrentDate, $CurrentMonth, $CurrentYear, $month, $year;
global $password, $pass, $username, $user, $task;
// Hvis brugeren skal redigere
if (($user == $username) && ($pass == $password) && ($task=="ChooseDayToEdit"))
$editbutton = "<input type=submit name=ChosenDay value=".$date."/".$month."-".$year.">";
if((isset($date)) && (strlen($date) > 0) && (isset($weekday)) && (strlen($weekday) > 0)) // En dag i kalenderen
{
if(($CurrentDate == $date) && ($CurrentMonth == $month) && ($CurrentYear == $year))
echo "<td width=120 height=80 align=left valign=top bgcolor=#ff9999><font face=Verdana size=2>".$date." - ".Translate($weekday).$editbutton."<br>".CheckForMessage($date)."</td>\n";
else
echo "<td width=120 height=80 align=left valign=top bgcolor=#dddddd><font face=Verdana size=2>".$date." - ".Translate($weekday).$editbutton."<br>".CheckForMessage($date)."</td>\n";
}
else // Uden for kalenderen
echo "<td width=120 height=80 align=center valign=top bgcolor=#dddddd> </td>\n";
}
// Laver en query string, hvor resten af variable foruden month og year kommer med
// Derved bibeholdes andre variable, som siden er kaldt med
$query_string = $argv[0]; //Henter variable over i $query_string
$variables = explode('&',$query_string); // opdeler variable i et array
for($i=0 ; $i < sizeof($variables) ; $i ++) // sorterer month og year fra variable
if (ereg('month',$variables[$i]))
$variables[$i] = "";
elseif (ereg('year',$variables[$i]))
$variables[$i] = "";
unset($query_string);
for($i=0 ; $i < sizeof($variables) ; $i ++) // Skriver resten af variable til $query_string
if (strlen($variables[$i]) > 1)
$query_string = $query_string."&".$variables[$i];
$jdday = GregorianToJD($month,1,$year); //Datonummer i Julian Day
$NoInWeek = JDDayOfWeek($jdday,0); //Nummer dag i ugen
// Tæller antal dage i måned
$i = $jdday;
$DaysInMonth = 0;
while(JDMonthName($i++,1) == JDMonthName($jdday,1))
$DaysInMonth++;
// Tæller dage i første uge
$DaysInFirstWeek = 1;
$i = $jdday;
while(JDDayOfWeek($i++,0) != "Sunday")
$DaysInFirstWeek++;
// Udskriver Måned og links til forrige og næste måned
echo "<table border=0 cellspacing=0 cellpadding=0 width=840>\n<tr>\n<td valign=top>";
echo "<font face=Verdana size=5>".Translate(JDMonthName($jdday,1))." $year</font><br>\n";
echo "<font face=Verdana size=3>";
echo "<a href=$PHP_SELF?month=".($month-1)."&year=$year$query_string>Forrige måned</a> - ";
echo "<a href=$PHP_SELF?month=".($month+1)."&year=$year$query_string>Næste måned</a>";
echo "</font>";
echo "</td><td align=right valign=bottom>\n";
if(!(isset($action)))
{ echo "<input type=submit value='Ret i kalenderen'>";
echo "<input type=hidden name=action value=AttemptingToLogin>";
}
if($task == "SaveMessage")
{
echo "<input type=hidden name=username value=$username>";
echo "<input type=hidden name=password value=$password>";
echo "<input type=submit value='Ret i kalenderen'>";
echo "<input type=hidden name=action value=TypedLogin>";
}
echo "</td>\n</tr>\n</table>";
//Udskriver starten på tabellen
echo "\n<table border=1 cellspacing=0 cellpadding=0>\n";
// ----------- Udskriver kalenderen ------------
$ok = 1;
while($ok == 1)
{
echo "<tr>\n";
for($i=1 ; $i<=7 ; $i++)
{
// Skiller month/day/year fra hinanden
$MonthDayYear = explode('/',JDToGregorian($jdday));
//Opdeler måneden i to (starten, indenfor de første ugedage, og resten)
if($MonthDayYear[1] < $DaysInFirstWeek)
{
if($NoInWeek <= $i) // Skriver først datoer, fra første korrekte ugedag i måneden
{
if(($i == 6) || ($i == 7)) // Weekend-dage i andre farver
LayoutWeekday($MonthDayYear[1],JDDayOfWeek($jdday,1));
else
LayoutWorkday($MonthDayYear[1],JDDayOfWeek($jdday,1));
$NoInWeek++;
$jdday++;
}
else
if(($i == 7) || ($i == 6)) // Weekend-dage i andre farver
LayoutWeekday('','');
else
LayoutWorkday('','');
}
else
{
if(($i == 6) || ($i == 7)) // Weekend-dage i andre farver
LayoutWeekday($MonthDayYear[1],JDDayOfWeek($jdday,1));
else
LayoutWorkday($MonthDayYear[1],JDDayOfWeek($jdday,1));
if($MonthDayYear[1] == $DaysInMonth) // Hér nået til sidste dag i måneden
{
for($i ; $i<7 ; $i++)// Udskriver nu resten af kalenderen for dén måned
{
if(($i == 5) || ($i == 6)) // Weekend-dage i andre farver
LayoutWeekday('','');
else
LayoutWorkday('','');
}
$ok = 0;
break;
}
$jdday++;
}
}
echo "</tr>";
}
// Udskriver afslutning på tabellen
echo "</table>";
// Udskriver form til
if (($user == $username) && ($pass == $password) && ($task=="ChooseDayToEdit"))
{
echo "<input type=hidden name=username value=$username>";
echo "<input type=hidden name=password value=$password>";
echo "<input type=hidden name=action value=HaveChosenDayToEdit>";
}
// Til redigering af kalenderen
if ($task == "ShowLogin") // Brugeren skal indtaste oplysninger for første gang
{
echo "<font face=Verdana size=2>";
echo "<b>Indtast brugeroplysninger</b></font><br>";
}
if ($task == "ShowLoginWithError") // Brugeren har indtastet forkerte logon oplysninger
{
echo "<font face=Verdana size=2>";
echo "<b>Forkerte oplysninger. Du har ikke adgang.</b></font><br>";
}
if (($task == "ShowLoginWithError") || ($task == "ShowLogin")) // Fællesnævner for de to ovenstående
{
echo "<font face=Verdana size=2>";
echo "Brugernavn: <input type=text name=username><br>";
echo "Kodeord: <input type=text name=password><br>";
echo "<input type=hidden name=action value=TypedLogin>";
echo "<input type=submit value=Send></font></font></form>";
}
if (($user == $username) && ($pass == $password) && ($task=="EditDay"))
{
//Henter kalenderbeskeder til buffer
$fd = @fopen ("$filnavn", "r");
while (!feof ($fd)) {
$buffer[] = fgets($fd, 4096);
}
fclose ($fd);
if(sizeof($buffer)>0) //Denne blok udføres kun hvis der blev hentet noget fra filen
{
for($i=0 ; $i < sizeof($buffer) ; $i++)
if(ereg($ChosenDay,$buffer[$i]))
{
$TempBuffer = explode('|',$buffer[$i]);
$Message = $TempBuffer[1];
}
}
//Viser besked på skærm
$Message = ereg_replace("<br>","\n",$Message);
echo "<font face=Verdana size=2><b>Dato: $ChosenDay</b></font><br>\n";
echo "<textarea border=0 name=Message rows=5 cols=52>".trim($Message)."</textarea><br>\n";
echo "<input type=hidden name=username value=$username>";
echo "<input type=hidden name=ChosenDay value=$ChosenDay>";
echo "<input type=hidden name=password value=$password>";
echo "<input type=hidden name=action value=HaveEditedMessage>";
echo "<input type=\"submit\" value=\"Tilføj/Ret\"><br>\n";
// Vil herefter hente siden, og gå op til starten af filen
}
echo "</form>";
?>
anyone ?
|Krel
