Avatar billede tobiassen Nybegynder
14. april 2008 - 21:58 Der er 19 kommentarer og
1 løsning

kalender fejl søndag

Hej eksperter.

Jeg har en kalender hvor der er en fejl i. hver gang søndag er den første dag i måneden springer den søndagen over og hopper til mandag i stedet.

så det der skal rettes er altså, at søndag godt kan være d. 1

på forhånd tak

koden ser således ud:


<?


    $filnavn = "../../../kalenderbeskeder.txt";


    if($action == "ChooseDayToEdit") { $task = "ChooseDayToEdit"; }
    elseif($action == "HaveChosenDayToEdit") { $task = "EditDay"; }
    elseif($action == "HaveEditedMessage") { $task = "SaveMessage"; }
    else { $task = "DontKnowWhatToDo"; }



echo "<form method=post name='ret'>";


//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 (($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 $task;

    // Hvis brugeren skal redigere
    if ($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=#33FF66><font face=Verdana size=2>".$date."".$editbutton."<br /><a href='vis.php?day=".$date."&month=".$month."&year=".$year."'><span style='color:#3e3e3e;'>".substr(CheckForMessage($date), 0, 25)."</span></a></td>\n";
        else
            echo "<td width=120 height=80 align=left valign=top bgcolor=#aaaaaa><font face=Verdana size=2>".$date."".$editbutton."<br /><a href='vis.php?day=".$date."&month=".$month."&year=".$year."'><span style='color:#3e3e3e;'>".substr(CheckForMessage($date), 0, 25)."</span></a></td>\n";
    }
    else // Uden for kalenderen
        echo "<td width=120 height=80 align=center valign=top bgcolor=#aaaaaa>&nbsp;</td>\n";
}

// Funktion hvori layoutet til weekenden ligger
function LayoutWorkday($date,$weekday)
{
    global $CurrentDate, $CurrentMonth, $CurrentYear, $month, $year;
    global $task;

    // Hvis brugeren skal redigere
    if ($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=#33FF66><font face=Verdana size=2>".$date."".$editbutton."<br /><a href='vis.php?day=".$date."&month=".$month."&year=".$year."'><span style='color:#3e3e3e;'>".substr(CheckForMessage($date), 0, 25)."</span></a></td>\n";
        else
            echo "<td width=120 height=80 align=left valign=top bgcolor=#dddddd><font face=Verdana size=2>".$date."".$editbutton."<br /><a href='vis.php?day=".$date."&month=".$month."&year=".$year."'><span style='color:#3e3e3e;'>".substr(CheckForMessage($date), 0, 25)."</span></a></td>\n";
    }
    else // Uden for kalenderen
        echo "<td width=120 height=80 align=center valign=top bgcolor=#dddddd>&nbsp;</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 "
<center>
<table id='bg_greypattern' border='0' cellspacing='0' cellpadding='2' width='840px'>
<tr>
    <td class='overskrift' colspan='3'>
<center>".Translate(JDMonthName($jdday,1))." $year</center>
    </td>
  </tr>

  <tr>";



if(!(isset($action)))
                    {   
                        echo "<td style='text-align:left;'><a href=$PHP_SELF?month=".($month-1)."&year=$year$query_string>Forrige måned</a></td>";
                        echo "<td style='text-align:center;'><a href='#' onclick='document.ret.submit();'><img src='../billeder/edit.jpg' alt='Rediger information' /></a></td>";
                        echo "<td style='text-align:right;'><a href=$PHP_SELF?month=".($month+1)."&year=$year$query_string>Næste måned</a></td>";
                        echo "<input type=hidden name=action value=ChooseDayToEdit>";
                    }
if($task == "SaveMessage")
                    {
                        echo "<td style='text-align:left;'><a href=$PHP_SELF?month=".($month-1)."&year=$year$query_string>Forrige måned</a></td>";
                        echo "<td style='text-align:center;'><a href='#' onclick='document.ret.submit();'><img src='../billeder/edit.jpg' alt='Rediger information' /></a></td>";
                        echo "<td style='text-align:right;'><a href=$PHP_SELF?month=".($month+1)."&year=$year$query_string>Næste måned</a></td>";
                        echo "<input type=hidden name=action value=ChooseDayToEdit>";
                    }

echo "</td></tr></table>
<table id='bg_greypattern' border='0' cellspacing='2' cellpadding='2' width='840px'>
<tr><td id='day'>Mandag</td><td id='day'>Tirsdag</td><td id='day'>Onsdag</td><td id='day'>Torsdag</td><td id='day'>Fredag</td><td id='day'>Lørdag</td><td id='day'>Søndag</td></tr>


";
$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>";
}
echo "</td></tr></table>";



// Udskriver form til
if ($task=="ChooseDayToEdit")
{
    echo "<input type=hidden name=action value=HaveChosenDayToEdit>";
}




if ($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 style='width:840px; height:300px;'>".trim($Message)."</textarea><br>\n";
echo "<input type=hidden name=ChosenDay value=$ChosenDay>";
echo "<input type=hidden name=action value=HaveEditedMessage>";
echo "<input type=\"submit\" value=\"Tilføj/Ret\" style='width:840px;'><br>\n";
// Vil herefter hente siden, og gå op til starten af filen
}
echo "</form>";


?>
Avatar billede jakobdo Ekspert
15. april 2008 - 11:14 #1
Har du ikke et link til din side ?
Den kode er der ingen som gider kigge hele vejen igennem, for at finde fejlen. :o)
Avatar billede tobiassen Nybegynder
15. april 2008 - 12:12 #2
linket kommer senere
Avatar billede jakobdo Ekspert
15. april 2008 - 12:43 #3
Ok!
Avatar billede tobiassen Nybegynder
15. april 2008 - 16:59 #4
kalenderen kan ses på:

http://easy-websolutions.dk/exp/kalender.php

se f.eks. overgangen fra maj 2008 til juni 2008, der skulle sødagen have været d. 1 men den bliver sprunget over og i stedet bliver det mandagen der bliver d.1
Avatar billede jakobdo Ekspert
15. april 2008 - 19:41 #5
Jeg ved det måske kræver lidt ekstra arbejde fra din side, men har du overvejet at bruge denne kalender som udgangspunkt ?

http://keithdevens.com/software/php_calendar
Den spiller max og kan nemt tilrettes.

Og ellers ville jeg smide noget DEBUG kode ind i din kode, så man kan se hvor og hvorfor den fejler ang. 1. juni.
Avatar billede tobiassen Nybegynder
15. april 2008 - 20:39 #6
ville helst bruge den anden, for den har jeg tilpasset helt som jeg gerne vil have den, det eneste der er galt er den lille fejl der?

og fejlen er jo et eller andet med når søndag er d.1. kan bare ik lige lurer den selv
Avatar billede jakobdo Ekspert
15. april 2008 - 21:35 #7
Er ikke sikker på det er her, men hvad er dette:

while(JDDayOfWeek($i++,0) != "Sunday")
    $DaysInFirstWeek++;
Avatar billede tobiassen Nybegynder
15. april 2008 - 22:04 #8
det har noget at gøre med julian day,

http://en.wikipedia.org/wiki/Julian_day
Avatar billede __ak Nybegynder
17. april 2008 - 12:43 #9
Jeg havde nogenlunde samme problem da jeg lavede en kalender for noget tid siden.
Det kan være du kan finde noget hjælp i min  kode:
http://akmedia.dk/projects/akcalendar/index.php
Avatar billede jakobdo Ekspert
17. april 2008 - 12:52 #10
ak: Var det ikke nemmere at fortælle hvad problemet var og hvordan du rettede det ?
Avatar billede tobiassen Nybegynder
19. april 2008 - 21:35 #11
ak: hvad var fejlen så ?
Avatar billede tobiassen Nybegynder
20. april 2008 - 22:00 #12
ak ?
Avatar billede __ak Nybegynder
24. april 2008 - 14:21 #13
Jeg kunne forestille mig du har en "tæller" der holder styr på hvilken ugedag den første i måneden skal printes på.
Det virker ikke hvis søndag er den første i måneden da søndag i PHP hedder 0 og ikke 7.
Avatar billede tobiassen Nybegynder
24. april 2008 - 16:10 #14
og hvordan kan det så rettes i koden ?
Avatar billede jakobdo Ekspert
24. april 2008 - 17:57 #15
Et gæt kunne være her: for($i=1 ; $i<=7 ; $i++)
Avatar billede tobiassen Nybegynder
24. april 2008 - 22:50 #16
og hva sku det så rettes til ?
Avatar billede jakobdo Ekspert
25. april 2008 - 06:57 #17
Det er bare et skud fra hoften, men: for($i=0 ; $i<7 ; $i++)
Avatar billede tobiassen Nybegynder
25. april 2008 - 16:09 #18
det hjalp ikke, desværre
Avatar billede jakobdo Ekspert
25. april 2008 - 16:20 #19
Øv
Avatar billede tobiassen Nybegynder
26. april 2008 - 21:42 #20
men lukker, det er for uoverskueligt. laver en ny
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester