Avatar billede the_email Nybegynder
06. marts 2007 - 11:15 Der er 6 kommentarer og
1 løsning

Generer kalender som tabel eller div?

Kære eksperter
Jeg er ved at udvikle et vagtskema i PHP. Jeg har en MySQL, som indeholder en kolonne med dato og en kolonne med userID.

Hvordan kan jeg lettest få genereret en kalender som lister alle disse userID op?

Jeg har lavet en tabel hvor alle datoer står skrevet som tekst og jeg tænkte på at lave noget preg_replace, men det virker "klodset".
Der må være en mere intelligent måde at lave det på.

Nogle forslag?

Mvh TheEmail
Avatar billede jakobdo Ekspert
06. marts 2007 - 11:43 #1
Hvordan har du lavet din tabel med datoer?
Jeg har tidligere lavet noget, hvor jeg træk alle datoer ud af mysql fra en given måned, og efterfølgende kontrollere jeg så hver dato mod den dato jeg har i dag, matcher den, så udskriver jeg userid.
Dog skal du lave noget kode, som tager højde for flere brugere kunne måske have samme dag.
Avatar billede jakobdo Ekspert
06. marts 2007 - 11:45 #2
Du kunne også evt. kigge på denne calendar: http://keithdevens.com/software/php_calendar
Der kan du hurtigt tilføje data.
Avatar billede the_email Nybegynder
07. marts 2007 - 14:29 #3
Der er ikke flere brugere som skal have vagt samme dag.
En person pr. dag.

Må jeg evt. se den kode du har lavet?

/TheEmail
Avatar billede jakobdo Ekspert
07. marts 2007 - 15:03 #4
Nu får du lige det hele... Det er længe siden jeg har kodet det, så det kan garanteret laves smartere!

<?php

    echo "<div class='overskrift'>KALENDER</div><br>\n";

    include("connect.php");

    setlocale(LC_TIME, 'da_DK.ISO_8859-1');

    function this_timestamp()
    {
    return mktime(0, 0, 0, $_GET['month'], $_GET['day'], $_GET['year']);
    }

    function weekday()
    {
        $day = date("w", this_timestamp());
            return ($day ? $day : 7);
    }

    $todayArray = getdate();
    $today = mktime(0,0,0,$todayArray['mon'],$todayArray['mday'],$todayArray['year'])."<br>";

    if (!is_numeric($_GET['year']))
        $_GET['year'] = date("Y");
    if (!is_numeric($_GET['month']))
        $_GET['month'] = date("n");
    $_GET['day'] = 1;

    $kampeEventQ = mysql_query("
    SELECT
    id,
    hold,
    unix_timestamp(date_format(datotid, '%Y-%m-%d')) AS unix,
    unix_timestamp(datotid) AS unixTid
    FROM kampe
    WHERE YEAR(datotid)=".$_GET['year']."
    AND MONTH(datotid)=".$_GET['month']."
    ORDER BY datotid, hold
    ");
   
    $kalenderEventQ = mysql_query("
    SELECT
    kalender.id AS kId,
    kalender.overskrift AS kOverskrift,
    unix_timestamp(date_format(datotid, '%Y-%m-%d')) AS unix,
    brugere.nick AS bNick
    FROM kalender, brugere
    WHERE YEAR(datotid)=".$_GET['year']."
    AND MONTH(datotid)=".$_GET['month']."
    AND brugere.id = kalender.b_id
    ORDER BY kalender.datotid, kalender.overskrift
    ");
   
    $birthdayQ = mysql_query("
    SELECT
    nick, id,
    unix_timestamp(date_format(birthday, '%Y-%m-%d')) AS unix
    FROM brugere
    WHERE MONTH(birthday)=".$_GET['month']."
    ORDER BY DAYOFMONTH(birthday)
    ");

    if ($_GET['month'] > 1)
    {
        $forrigeMonth = $_GET['month']-1;
        $forrigeYear = $_GET['year'];
    }
    else
    {
        $forrigeMonth = 12;
        $forrigeYear = $_GET['year']-1;
    }

    if ($_GET['month'] < 12)
    {
        $naesteMonth = $_GET['month']+1;
        $naesteYear = $_GET['year'];
    }
    else
    {
        $naesteMonth = 1;
        $naesteYear = $_GET['year']+1;
    }
   
    $kampeEventR = @mysql_fetch_assoc($kampeEventQ);
    $kalenderEventR = @mysql_fetch_assoc($kalenderEventQ);
    $birthdayR = @mysql_fetch_assoc($birthdayQ);
    echo "<table class='standard'><tr>";
    echo "<th class='left'><a href=".$_SERVER['PHP_SELF']."?month=".$forrigeMonth."&year=".$forrigeYear."><- Forrige </a></th>";
    echo "<th>".strtoupper(strftime("%B",this_timestamp()))." ".date('Y', this_timestamp())."</th>";
    echo "<th class='right'><a href=".$_SERVER['PHP_SELF']."?month=".$naesteMonth."&year=".$naesteYear.">Næste -></a></th>";
    echo "</tr></table><br>";

    echo "<table class='standard'>\n";
    echo "<tr>\n";
    echo "<th>Man</th>\n";
    echo "<th>Tir</th>\n";
    echo "<th>Ons</th>\n";
    echo "<th>Tor</th>\n";
    echo "<th>Fre</th>\n";
    echo "<th>Lør</th>\n";
    echo "<th>Søn</th>\n";
    echo "</tr><tr class='calRow'>\n";
   
    if (weekday() > 1)
    {
        for ($i = 1; $i < weekday(); $i++)
            echo "<td class='calEmpty'><img src='images/trans.gif' alt='trans.gif'></td>\n";
    }

    $days = date("t", this_timestamp());

    $missingDays = 42 - ((weekday() - 1) + $days);

    for ($_GET['day'] = 1; $_GET['day'] <= $days; $_GET['day'] ++)
    {
        if ($today == this_timestamp())
        {
            echo "<td class='calCurrent'>";
        }
        else
        {
            echo "<td class='calDay'>";
        }
        ?>
        <table class="calDay"><tr><td class="left"><img src="images/trans.gif" alt="trans.gif"></td>
        <?
        echo "<td class='center'>".$_GET['day']."</td>";
        echo "<td class='right'><td class='left'><img src='images/trans.gif' alt='trans.gif'></td></td>";
        echo "</tr></table>";
       
        if (@mysql_num_rows($kampeEventQ) > 0)
        {
            while($kampeEventR['unix'] == this_timestamp())
            {
                echo "<a onClick=\"java script:popUpWindow('kampinfo.php?kampid=".$kampeEventR['id']."')\" title='Kamp mod: ".$kampeEventR['hold']." - ".strftime('%H:%M', $kampeEventR['unixTid'])."' href='#'>Kamp</a><br>";
                $kampeEventR = mysql_fetch_assoc($kampeEventQ);
            }
        }
        if (@mysql_num_rows($birthdayQ) > 0)
        {
            while(strcmp(strftime("%d-%m",this_timestamp()),strftime("%d-%m",$birthdayR['unix'])) == 0)
            {
                $alder = strftime("%Y",this_timestamp()) - strftime("%Y",$birthdayR['unix']);
                echo "&nbsp;<img src='/images/flag.jpg' alt='FLAG'>&nbsp;<a title='".$birthdayR['nick']." bliver ".$alder." år!' href='/spillerProfil.php?bid=".$birthdayR['id']."'>".$birthdayR['nick']."</a><br>";
                $birthdayR = mysql_fetch_assoc($birthdayQ);
            }
        }
        if (@mysql_num_rows($kalenderEventQ) > 0)
        {
            while($kalenderEventR['unix'] == this_timestamp())
            {
                echo "<a onClick=\"java script:popUpWindow('kalenderinfo.php?eventid=".$kalenderEventR['kId']."')\" title='Oprettet af: ".$kalenderEventR['bNick']."' href='#'>".$kalenderEventR['kOverskrift']."</a><br>";
                $kalenderEventR = mysql_fetch_assoc($kalenderEventQ);
            }
        }
        echo "</td>\n";

        if (weekday() == 7)
            echo "</tr><tr class='calRow'>\n";
    }

    $missingDays = $missingDays % 7;
   
    for ($i = 0; $i < $missingDays; $i++)
    {
        echo "<td class='calEmpty'><img src='images/trans.gif' alt='trans.gif'></td>\n";
    }
?>
Avatar billede the_email Nybegynder
02. oktober 2007 - 13:46 #5
Hey. Endte med jeg skrev et script der generede MySQL-databasen, hvor jeg generede en måned af gangen først med alle datoer og derefter kørte jeg et script der tog datoen og på baggrund af ugedagen indsatte et userid i en seperat kolonne.

Mit problem er således løst.

Vil du dele points, så smid et svar inden for 2 dage.

/TheEmail
Avatar billede jakobdo Ekspert
02. oktober 2007 - 13:50 #6
Svar!
Avatar billede jakobdo Ekspert
02. oktober 2007 - 15:01 #7
Takker for point.
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