Avatar billede djsteiner Nybegynder
13. januar 2009 - 21:02 Der er 26 kommentarer og
1 løsning

PHP Kalender

X Hej jeg står og kunne godt bruge noget hjælp til en PHP kalender

jeg har studeret denne artikel(http://www.eksperten.dk/spm/371619 ) som også er ganske god men da jeg lige er begyndt med PHP er det lidt svært for mig at overskue.
Jeg har lidt erfaring med ASp og kender også lidt til Mysql.

Men det jeg gerne ville lave var noget i stil med denne her side

http://www.hedens-telt.dk/kalender.php

Deres kalender køre i perioden 1. april - 30. september

De har også lavet det sådan at man kan vægler en bestemt dato og år ud fra en sellectform menu.

Der udover skulle det også være muligt at man skulle kunne vægler en dato hvor teltet er udlejet og derefter skulle dato så blive rød i kalenderen.
Til dette skal der være et login system.

På forhånd Mange tak for hjælpen.

Ps. Hvis der skal flere poin på bordet så må i lige sige til



PÅ forhånd Tak for hjælpen
Avatar billede jakobdo Ekspert
13. januar 2009 - 21:25 #1
Når folk snakker/spørger om en kalender, så plejer jeg altid at anbefale denne: http://keithdevens.com/software/php_calendar

Og den kan nemt udbygges med de info du ønsker.
Så hvis du starter med at få den sat op og med noget select boks, så er du nået langt. :o)
Avatar billede djsteiner Nybegynder
13. januar 2009 - 22:28 #2
Hej nu har jeg lige kigget lidt på det link du sendte og fandt denne her kode på siden
som jeg så ville prøve men kunne ikke få det til at virke, den viser bare en tom side i browsen.

Her er koden

<?php
# PHP Calendar (version 2.3), written by Keith Devens
# http://keithdevens.com/software/php_calendar
#  see example at http://keithdevens.com/weblog
# License: http://keithdevens.com/software/license

function generate_calendar($year, $month, $days = array(), $day_name_length = 3, $month_href = NULL, $first_day = 0, $pn = array()){
    $first_of_month = gmmktime(0,0,0,$month,1,$year);
    #remember that mktime will automatically correct if invalid dates are entered
    # for instance, mktime(0,0,0,12,32,1997) will be the date for Jan 1, 1998
    # this provides a built in "rounding" feature to generate_calendar()

    $day_names = array(); #generate all the day names according to the current locale
    for($n=0,$t=(3+$first_day)*86400; $n<7; $n++,$t+=86400) #January 4, 1970 was a Sunday
        $day_names[$n] = ucfirst(gmstrftime('%A',$t)); #%A means full textual day name

    list($month, $year, $month_name, $weekday) = explode(',',gmstrftime('%m,%Y,%B,%w',$first_of_month));
    $weekday = ($weekday + 7 - $first_day) % 7; #adjust for $first_day
    $title  = htmlentities(ucfirst($month_name)).'&nbsp;'.$year;  #note that some locales don't capitalize month and day names

    #Begin calendar. Uses a real <caption>. See http://diveintomark.org/archives/2002/07/03
    @list($p, $pl) = each($pn); @list($n, $nl) = each($pn); #previous and next links, if applicable
    if($p) $p = '<span class="calendar-prev">'.($pl ? '<a href="'.htmlspecialchars($pl).'">'.$p.'</a>' : $p).'</span>&nbsp;';
    if($n) $n = '&nbsp;<span class="calendar-next">'.($nl ? '<a href="'.htmlspecialchars($nl).'">'.$n.'</a>' : $n).'</span>';
    $calendar = '<table class="calendar">'."\n".
        '<caption class="calendar-month">'.$p.($month_href ? '<a href="'.htmlspecialchars($month_href).'">'.$title.'</a>' : $title).$n."</caption>\n<tr>";

    if($day_name_length){ #if the day names should be shown ($day_name_length > 0)
        #if day_name_length is >3, the full name of the day will be printed
        foreach($day_names as $d)
            $calendar .= '<th abbr="'.htmlentities($d).'">'.htmlentities($day_name_length < 4 ? substr($d,0,$day_name_length) : $d).'</th>';
        $calendar .= "</tr>\n<tr>";
    }

    if($weekday > 0) $calendar .= '<td colspan="'.$weekday.'">&nbsp;</td>'; #initial 'empty' days
    for($day=1,$days_in_month=gmdate('t',$first_of_month); $day<=$days_in_month; $day++,$weekday++){
        if($weekday == 7){
            $weekday  = 0; #start a new week
            $calendar .= "</tr>\n<tr>";
        }
        if(isset($days[$day]) and is_array($days[$day])){
            @list($link, $classes, $content) = $days[$day];
            if(is_null($content))  $content  = $day;
            $calendar .= '<td'.($classes ? ' class="'.htmlspecialchars($classes).'">' : '>').
                ($link ? '<a href="'.htmlspecialchars($link).'">'.$content.'</a>' : $content).'</td>';
        }
        else $calendar .= "<td>$day</td>";
    }
    if($weekday != 7) $calendar .= '<td colspan="'.(7-$weekday).'">&nbsp;</td>'; #remaining "empty" days

    return $calendar."</tr>\n</table>\n";
}
?>
Avatar billede zips Juniormester
13. januar 2009 - 22:37 #3
En tom side vil du få hvis du mangler at sætte koden ind som er under Examples, indsæt den efter din kode du har nu, her under er en af de koder du kan indsætte.

<?php
    $time = time();
    echo generate_calendar(date('Y', $time), date('n', $time));
?>
Avatar billede djsteiner Nybegynder
13. januar 2009 - 22:42 #4
Okay på den måde vil lige studere det lidt mere
Avatar billede djsteiner Nybegynder
13. januar 2009 - 23:02 #5
Ved du om der er en funktion på siden der kan gå til næste månede altså frem og tilbage mellem månederne ??
Avatar billede jakobdo Ekspert
14. januar 2009 - 06:27 #6
Du kigger ikke eksemplerne godt nok igennem.
Test denne kode:

<?php

    $pn = array('&laquo;'=>'/weblog/archive/2004/Jul', '&raquo;'=>'/weblog/archive/2004/Sep');

    echo generate_calendar(2004, 8, NULL, 3, NULL, 0, $pn);

?>
Avatar billede djsteiner Nybegynder
14. januar 2009 - 09:25 #7
Har som godt set det eksemple, men det er så lige at finde ud af hvordan det virker når man skal vidre til næste månede.
Avatar billede jakobdo Ekspert
14. januar 2009 - 11:54 #8
Så laver du dine links, så næste er måned + 1 og hvis måned = 12, så år + 1
Og modsat med tilbage.
Avatar billede djsteiner Nybegynder
14. januar 2009 - 14:07 #9
Jeg kan ikke lige finde ud af hvor henne i koden man skal lave de ændringer??
Avatar billede jakobdo Ekspert
14. januar 2009 - 14:18 #10
Det er noget kode du selv skal lave.
For så skal du bruge det til at ændre år og måned.

2004, 8
2004 = år
8 = måned
Avatar billede djsteiner Nybegynder
14. januar 2009 - 15:23 #11
skal det ikke være if else noget??

noget i stil med det ??

<?php
if($month == 12){
      $$p = -1;
      $yearnext = $year-1;
      $$p = month-1;
     

?>
Avatar billede jakobdo Ekspert
14. januar 2009 - 15:52 #12
Test denne kode:

<?php
//php calendar koden...

$month = (isset($_GET['m']) && is_numeric($_GET['m']) && $_GET['m'] > 0 && $_GET['m'] < 13) ? intval($_GET['m']) : date('j');
$year  = (isset($_GET['y']) && is_numeric($_GET['y'])) ? intval($_GET['y']) : date('Y');

if($month == 12){
    $next_month = 1;
    $next_year  = $year + 1;
}

if($month == 1){
    $prev_month = 12;
    $prev_year  = $year - 1;
}

$pn = array('&laquo;'=>'/?m='.$prev_month.'&amp;y='.$prev_year, '&raquo;'=>'/?m='.$next_month.'&amp;y='.$next_year);
echo generate_calendar($year, $month, NULL, 3, NULL, 0, $pn);
?>
Avatar billede djsteiner Nybegynder
14. januar 2009 - 17:19 #13
jeg for denne fejmedelse



Notice: Undefined variable: prev_month in D:\websider_PHP\Begynder PHP\kalender.php on line 74

Notice: Undefined variable: prev_year in D:\websider_PHP\Begynder PHP\kalender.php on line 74

Notice: Undefined variable: next_month in D:\websider_PHP\Begynder PHP\kalender.php on line 74

Notice: Undefined variable: next_year in D:\websider_PHP\Begynder PHP\kalender.php on line 74
Avatar billede jakobdo Ekspert
14. januar 2009 - 19:34 #14
<?php
//php calendar koden...

$month = (isset($_GET['m']) && is_numeric($_GET['m']) && $_GET['m'] > 0 && $_GET['m'] < 13) ? intval($_GET['m']) : date('j');
$year  = (isset($_GET['y']) && is_numeric($_GET['y'])) ? intval($_GET['y']) : date('Y');

if($month == 12){
    $next_month = 1;
    $next_year  = $year + 1;
}else{
    $next_month = $month + 1;
    $next_year  = $year;
}

if($month == 1){
    $prev_month = 12;
    $prev_year  = $year - 1;
}else{
    $prev_month = $month - 1;
    $prev_year  = $year;
}

$pn = array('&laquo;'=>'/?m='.$prev_month.'&amp;y='.$prev_year, '&raquo;'=>'/?m='.$next_month.'&amp;y='.$next_year);
echo generate_calendar($year, $month, NULL, 3, NULL, 0, $pn);
?>
Avatar billede djsteiner Nybegynder
14. januar 2009 - 22:27 #15
hej ja nu kommer der ikke nogle fejmedelser længer, men når man trykker på linket så kommer det her frem "Opretter forbindelse til minegen." altså den beder om
brugernavn og password .

Hvordan for man kalenderen til at starte i 2009 sådan den køre i perioden 1. april - 30. september    nu starter den i febuar 2010.
Avatar billede jakobdo Ekspert
15. januar 2009 - 08:23 #16
Der var en lille fejl.

Test denne kode:

<?php
//http://www.eksperten.dk/spm/859662
# PHP Calendar (version 2.3), written by Keith Devens
# http://keithdevens.com/software/php_calendar
#  see example at http://keithdevens.com/weblog
# License: http://keithdevens.com/software/license

function generate_calendar($year, $month, $days = array(), $day_name_length = 3, $month_href = NULL, $first_day = 0, $pn = array()){
    $first_of_month = gmmktime(0,0,0,$month,1,$year);
    #remember that mktime will automatically correct if invalid dates are entered
    # for instance, mktime(0,0,0,12,32,1997) will be the date for Jan 1, 1998
    # this provides a built in "rounding" feature to generate_calendar()

    $day_names = array(); #generate all the day names according to the current locale
    for($n=0,$t=(3+$first_day)*86400; $n<7; $n++,$t+=86400) #January 4, 1970 was a Sunday
        $day_names[$n] = ucfirst(gmstrftime('%A',$t)); #%A means full textual day name

    list($month, $year, $month_name, $weekday) = explode(',',gmstrftime('%m,%Y,%B,%w',$first_of_month));
    $weekday = ($weekday + 7 - $first_day) % 7; #adjust for $first_day
    $title  = htmlentities(ucfirst($month_name)).'&nbsp;'.$year;  #note that some locales don't capitalize month and day names

    #Begin calendar. Uses a real <caption>. See http://diveintomark.org/archives/2002/07/03
    @list($p, $pl) = each($pn); @list($n, $nl) = each($pn); #previous and next links, if applicable
    if($p) $p = '<span class="calendar-prev">'.($pl ? '<a href="'.htmlspecialchars($pl).'">'.$p.'</a>' : $p).'</span>&nbsp;';
    if($n) $n = '&nbsp;<span class="calendar-next">'.($nl ? '<a href="'.htmlspecialchars($nl).'">'.$n.'</a>' : $n).'</span>';
    $calendar = '<table class="calendar">'."\n".
        '<caption class="calendar-month">'.$p.($month_href ? '<a href="'.htmlspecialchars($month_href).'">'.$title.'</a>' : $title).$n."</caption>\n<tr>";

    if($day_name_length){ #if the day names should be shown ($day_name_length > 0)
        #if day_name_length is >3, the full name of the day will be printed
        foreach($day_names as $d)
            $calendar .= '<th abbr="'.htmlentities($d).'">'.htmlentities($day_name_length < 4 ? substr($d,0,$day_name_length) : $d).'</th>';
        $calendar .= "</tr>\n<tr>";
    }

    if($weekday > 0) $calendar .= '<td colspan="'.$weekday.'">&nbsp;</td>'; #initial 'empty' days
    for($day=1,$days_in_month=gmdate('t',$first_of_month); $day<=$days_in_month; $day++,$weekday++){
        if($weekday == 7){
            $weekday  = 0; #start a new week
            $calendar .= "</tr>\n<tr>";
        }
        if(isset($days[$day]) and is_array($days[$day])){
            @list($link, $classes, $content) = $days[$day];
            if(is_null($content))  $content  = $day;
            $calendar .= '<td'.($classes ? ' class="'.htmlspecialchars($classes).'">' : '>').
                ($link ? '<a href="'.htmlspecialchars($link).'">'.$content.'</a>' : $content).'</td>';
        }
        else $calendar .= "<td>$day</td>";
    }
    if($weekday != 7) $calendar .= '<td colspan="'.(7-$weekday).'">&nbsp;</td>'; #remaining "empty" days

    return $calendar."</tr>\n</table>\n";
}


$month = (isset($_GET['m']) && is_numeric($_GET['m']) && $_GET['m'] > 0 && $_GET['m'] < 13) ? intval($_GET['m']) : date('n');
$year  = (isset($_GET['y']) && is_numeric($_GET['y'])) ? intval($_GET['y']) : date('Y');

if($month == 12){
    $next_month = 1;
    $next_year  = $year + 1;
}else{
    $next_month = $month + 1;
    $next_year  = $year;
}

if($month == 1){
    $prev_month = 12;
    $prev_year  = $year - 1;
}else{
    $prev_month = $month - 1;
    $prev_year  = $year;
}

$pn = array('&laquo;'=>'?m='.$prev_month.'&y='.$prev_year, '&raquo;'=>'?m='.$next_month.'&amp;y='.$next_year);

setlocale(LC_TIME, 'da','dan','da_DK','da_DK.ISO8859-1','danish');
echo generate_calendar($year, $month, NULL, 3, NULL, 0, $pn);
?>
Avatar billede djsteiner Nybegynder
16. januar 2009 - 15:11 #17
Mit problem er nu at når kalenderen kommer til december 2009 og man trykket næste så starter den forfra altså går tilbage til Januar 2009.

Er der et sted i koden hvor man kan sætte en start månede hvis man nu gerne ville have at kalenderen kun sklal gå fra April til Sepember?
Avatar billede jakobdo Ekspert
17. januar 2009 - 10:11 #18
Ret lige:
$pn = array('&laquo;'=>'?m='.$prev_month.'&y='.$prev_year, '&raquo;'=>'?m='.$next_month.'&amp;y='.$next_year);

til:
$pn = array('&laquo;'=>'?m='.$prev_month.'&y='.$prev_year, '&raquo;'=>'?m='.$next_month.'&y='.$next_year);
Avatar billede djsteiner Nybegynder
18. januar 2009 - 11:35 #19
Så så lang så godt. Så er spørgsmålet så hvordan  man for kalenderen til at starte i April og slutte September altså  så den køre perioden 1. april - 30. september.
Avatar billede jakobdo Ekspert
18. januar 2009 - 15:46 #20
Det kunne jo være noget med at lave:

$month = (isset($_GET['m']) && is_numeric($_GET['m']) && $_GET['m'] > 0 && $_GET['m'] < 13) ? intval($_GET['m']) : date('n');

om til:

$month = (isset($_GET['m']) && is_numeric($_GET['m']) && $_GET['m'] > 3 && $_GET['m'] < 10) ? intval($_GET['m']) : 4;
Avatar billede djsteiner Nybegynder
18. januar 2009 - 18:08 #21
Nu når man kommer frem til September 2009 og trykker på næste så går den tilbage til April 2009 og ikke 2010 hvordan det ???
Avatar billede jakobdo Ekspert
18. januar 2009 - 20:26 #22
Der skal jo så rettes i resten af koden.
Jeg sidder ikke bare her og retter til hver gang.
Du må meget gerne prøve lidt selv. :o)
Avatar billede djsteiner Nybegynder
18. januar 2009 - 21:08 #23
Helt i orden
Avatar billede djsteiner Nybegynder
14. februar 2009 - 17:06 #24
Hej jakobdo jeg har selv fundet en løsning.

Mange tak for hjælpen du skal da lige have point som kom bare med et svar.
Avatar billede jakobdo Ekspert
14. februar 2009 - 20:53 #25
Svar!
Og du må gerne vise din løsning, så andre kan nyde gavn af den! :o)
Avatar billede djsteiner Nybegynder
14. februar 2009 - 23:27 #26
Jeg er ved at lave en løsning med ASP i stedet men kommer nok tilbage til PHP på et andet tisdpunk.
Avatar billede jakobdo Ekspert
15. februar 2009 - 09:59 #27
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