Avatar billede soccoro Nybegynder
06. juni 2003 - 11:15 Der er 49 kommentarer og
1 løsning

Hvordan sætter jeg dage på kalender?

Hej alle Eksperter,

jeg har lavet et lille simpelt kalender system, der kan ses på: http://www.pxq.dk/calendar.php

Nu kommer spørgsmålet så: Hvordan laver jeg noget i stil med: Hvis den 1. = En mandag, så skal den skrive navnet på dagen øverst i tabellen.

//soccoro
Avatar billede avminarm Juniormester
06. juni 2003 - 11:36 #1
du bruger dette:

//finder ugedagene
$day  = mktime (0,0,0,$maaned,$i,$aar);
$day_of_week = date(w, $day);

dage i ugen 0=søndag, 1= Mandag ... og 6=lørdag

dvs hvis $day_of_week = 2  så er det tirsdag :o)

Lækker lille kalender i øvrigt - det er vel ikke en kode stump man kan lokke ud af dig :-)
Avatar billede avminarm Juniormester
06. juni 2003 - 11:37 #2
hov ved $i skal der stå $dato
Avatar billede soccoro Nybegynder
06. juni 2003 - 11:42 #3
avminarm, jo da. Den kommer her: (Så har andre også glæde af den)

<?
  $current_day = date("d");
  $current_month = date("m");
  $query = mysql_query("SELECT * FROM calendar WHERE month = '$current_month'");
  $row = mysql_fetch_array($query);
  $month = $row["text"];
  $days = $row["days"];
  echo "<b>" . $month . "</b><br><br>\n";
  echo "<tr>";
    for($i=1;$i<=$days;$i++){
      $qry = mysql_query("SELECT * FROM events WHERE day = '$i' AND month = '$current_month'");
        $rows = mysql_num_rows($qry);
      if($rows == "0"){
        $class = "cal";
        $link = "";
        $endlink = "";
      }
        if($i == $current_day){
        $class = "cal-day";
        $link = "";
        $endlink = "";
        }
      if($rows > "0" AND $i == $current_day){
        $class = "cal-event-day";
        $link = "<a href=\"event.php?day=" . $i . "&month=" . $current_month . "\" class=\"callink\">";
        $endlink = "</a>";
      }
      elseif($rows > "0"){
        $class = "cal-event";
        $link = "<a href=\"event.php?day=" . $i . "&month=" . $current_month . "\" class=\"callink\">";
        $endlink = "</a>";
      }
      echo "<td align=\"center\" class=\"" . $class ."\">" . $link . "" . $i . "" . $endlink ."</td>";
        if(!is_float($i/7)){
            echo "</tr>\n<tr>";
        }
    }
?>

Ja, den er vel lidt uoverskuelig ;)

Men hvad fanden. Den virker :P
Avatar billede fangel Nybegynder
06. juni 2003 - 11:42 #4
jeg lavede engang denne kalnder:

http://htd.mfa.ath.cx/multihuset_net/kalender/grafisk/kalenderen.php

men kildekoden er ikke verdens bedste, men kort fortalt går det ud på at man laver et array med alle månedens dage, men før man laver array laver man en lille løkke der tilføjer et par tomme felter...

nu har jeg jeg lavet et nyt et der ikke er så advanceret, men du kan bare udbygge det

---
<?php
$maanede = 6; // kan slf. automatiseres
$aar = 2003; // samme her

// så laver vi et array "indhold" med de gænse ugedage i
  // men først et par tomme rum, så det kommer til at passe med ugedag...
  $day_of_week = date("w",mktime(0,0,0,$maanede,1,$aar))-1; // finder dag på ugen for første dag i måneden
  for($i=0;$i<$day_of_week;$i++){
    $indhold[] = "&nbsp;";
  }

  // så laver vi de rigtige ugedage...
  $num_days = date("t",mktime(0,0,0,$maanede,1,$aar))-1; // finder dag på ugen for første dag i måneden
  for($i=1;$i<$num_days;$i++){
    $indhold[] = $i;
  }

  // så udskriver du array så det kommer til at være i et array:
 
  $brede_paa_table = 400; // brede på tabel i pixel

  $cellwidth = round($brede_paa_table/7, 2);
  $runtimes = 7*(ceil($antal_posts/$brede))
  $str =  "<table width=$brede_paa_table>\n\t<tr>\n";
  for($i=0; $runtimes>$i; $i++){
    if($i % $brede == 0){
      $str .= "\t</tr>\n\t<tr>\n";
    }
    if(isset($indhold[$i])){
    $str .=  "\t\t<td width=\"" . $cellwidth . "\">". $indhold[$i] . "</td>\n";
    }
    else{
      $str .= "\t\t<td width=\"" . $cellwidth . ">&nbsp;</td>\n";
    }
  }
  $str .= " </tr>\n</table>";

  echo $str;

?>
---

da scriptet er skrevet i denne lille box, så giver jeg ingen garentier for at det virker... men prøv engang...

Morten
Avatar billede fangel Nybegynder
06. juni 2003 - 11:47 #5
hov, lidt stave fejl i nogle af kommentarene... men hva fann...

og her er den fejlrettede version:

--
<?php
$maanede = 7; // kan slf. automatiseres
$aar = 2003; // samme her

// så laver vi et array "indhold" med de gænse ugedage i
  // men først et par tomme rum, så det kommer til at passe med ugedag...
  $day_of_week = date("w",mktime(0,0,0,$maanede,1,$aar))-1; // finder dag på ugen for første dag i måneden
  for($i=0;$i<$day_of_week;$i++){
    $indhold[] = "&nbsp;";
  }

  // så laver vi de rigtige ugedage...
  $num_days = date("t",mktime(0,0,0,$maanede,1,$aar))-1; // finder dag på ugen for første dag i måneden
  for($i=1;$i<$num_days;$i++){
    $indhold[] = $i;
  }

  // så udskriver du array så det kommer til at være i et table:

  $brede_paa_table = 400; // brede på tabel i pixel

  $cellwidth = round($brede_paa_table/7, 2);
  $runtimes = 7*(ceil(count($indhold)/7));
  $str =  "<table width=$brede_paa_table>\n\t<tr>\n";
  for($i=0; $runtimes>$i; $i++){
    if($i % 7 == 0){
      $str .= "\t</tr>\n\t<tr>\n";
    }
    if(isset($indhold[$i])){
    $str .=  "\t\t<td width=\"" . $cellwidth . "\">". $indhold[$i] . "</td>\n";
    }
    else{
      $str .= "\t\t<td width=\"" . $cellwidth . ">&nbsp;</td>\n";
    }
  }
  $str .= " </tr>\n</table>";

  echo $str;

?>
---

Morten
Avatar billede fangel Nybegynder
06. juni 2003 - 11:56 #6
hov, der denne linie

$str .= "\t\t<td width=\"" . $cellwidth . ">&nbsp;</td>\n";

skal ændres til denne:

$str .= "\t\t<td width=\"" . $cellwidth . "\">&nbsp;</td>\n";

der manglede et " til sidst efter width...

Morten
Avatar billede fangel Nybegynder
06. juni 2003 - 11:58 #7
OK, fandt et par fejl mere... hent koden her:

http://mfa.ath.cx/kalender.php

Morten
Avatar billede soccoro Nybegynder
06. juni 2003 - 21:31 #8
avminarm,

jeg er simpelthen for dum. Gider du integrere din kode i mit system?

//soccoro
Avatar billede avminarm Juniormester
10. juni 2003 - 09:35 #9
vil du have den stillet op som dea_pg's ?? altså med blanke felter indtil der kommer den 1 i måneden - det kræver lidt udregningsprogramering, man skal regne ud hvad den første dag i måneden er for en dag og så sætte blanke felter foran denne hvis det er en onsdag - kig lidt på det dea_pg har skrevet, med at finde "de tomme rum" - jeg vil meget gerne hjælpe, men er hængt lidt op i øjeblikket ;o( - jeg skal prøve og se om jeg kan komme til at se på det.

kan du ikke lige lave et dump af din database tabel - så er det lidt nemmere for mig at teste selv
Avatar billede soccoro Nybegynder
10. juni 2003 - 11:02 #10
Avminarm,

jo. Her er dump: http://dynamic.lir.dk/calendar.txt

Ja, jeg vil gerne have det stillet op som dea_pg, men med navne på dagene!

Sig til hvis det kræver flere points...
Avatar billede avminarm Juniormester
10. juni 2003 - 11:07 #11
soccoro - nu mente jeg mere strukturen af databasen ;o)
Avatar billede fangel Nybegynder
10. juni 2003 - 11:13 #12
soccoro => du kan jo bare tilføje navne på dagene...

Morten
Avatar billede soccoro Nybegynder
10. juni 2003 - 13:25 #13
avminarm, den kommer her: http://dynamic.lir.dk/calendar-struc.txt
Avatar billede soccoro Nybegynder
20. juni 2003 - 15:06 #14
avminarm, kan du ikke bare sende mig sourcen til min mail jakob@inetsoft.dk når du får det lavet?
Avatar billede avminarm Juniormester
23. juni 2003 - 12:03 #15
soccoro>> jeg er desværre hængt op her det næste stykke tid - jeg skal dog prøve at får presset det ind, men hvis du synes der går for lang tid - så ryk mig lige ;o) på exp@avminmusearm.dk
Avatar billede soccoro Nybegynder
23. juni 2003 - 12:09 #16
jeg skal nok holde dig i ørene :P
Avatar billede avminarm Juniormester
24. juni 2003 - 10:02 #17
halløj - jeg mangler strukturen for tabellen: events
Avatar billede soccoro Nybegynder
24. juni 2003 - 11:30 #18
Avatar billede avminarm Juniormester
24. juni 2003 - 12:01 #19
der må mangle et eller andet  se: http://wagners.users.whitehat.dk/cal.php - her burde kalenderen være øverst??
Avatar billede soccoro Nybegynder
24. juni 2003 - 12:13 #20
hvad mener du? hvad mangler der?
Avatar billede avminarm Juniormester
24. juni 2003 - 12:58 #21
selve kalenderen bliver ikke dannet - hvis du klikker på mit link burde kalenderen blive dannet ovenover visningen af koden - men der ske ikke en dyt - det er ike sådan a du har hele scriptet vedr. kalenderen ??
Avatar billede soccoro Nybegynder
24. juni 2003 - 13:12 #22
http://www.pxq.dk/calendar.php <- der er html koden!
Avatar billede avminarm Juniormester
24. juni 2003 - 13:48 #23
kan du sende mig hele den fil? på exp@avminmusearm.dk
Avatar billede avminarm Juniormester
25. juni 2003 - 14:53 #24
Så skulle den være der ;o)

<?php
 
  $current_month = date("n");
  $year = date("Y");

  // så laver vi et array "indhold" med de gænse ugedage i 0=søndag, 1= Mandag ... og 6=lørdag
  // men først et par tomme rum, så det kommer til at passe med ugedag...
  $day_of_week = date("w",mktime(0,0,0,$current_month,1,$year)); // finder dag på ugen for første dag i måneden

  //hvor mange tomme dage skal sættes før den 1. i måneden
  switch($day_of_week){
  case '0':
    $dage = 6;
  break;
  case '1':
    $dage = 0;
  break;
  case '2':
    $dage = 1;
  break;
  case '3':
    $dage = 2;
  break;
  case '4':
    $dage = 3;
  break;
  case '5':
    $dage = 4;
  break;
  case '6':
    $dage = 5;
  break;
  }

  for($i=0;$i<$dage;$i++){
    $tomme .= "<td align=\"center\" class=\"" . $class ."\"> </td>";
  }

  $current_day = date("d");
  $query = mysql_query("SELECT * FROM calendar WHERE month = '$current_month'");
  $row = mysql_fetch_array($query);
  $month = $row["text"];
  $days = $row["days"];
  echo "<b>" . $month . "</b><br><br>\n";
  //ugedagene - kan godt sættes pænere op
  echo "<tr><td>Man</td><td>Tir</td><td>Ons</td><td>Tor</td><td>Fre</td><td>Lør</td><td>Søn</td></tr>";
  echo "<tr>";

    if($i <= 7){
    echo $tomme;
    }

    for($i=1;$i<=$days;$i++){
      $qry = mysql_query("SELECT * FROM events WHERE day = '$i' AND month = '$current_month'");
        $rows = mysql_num_rows($qry);
      if($rows == "0"){
        $class = "cal";
        $link = "";
        $endlink = "";
      }
        if($i == $current_day){
        $class = "cal-day";
        $link = "";
        $endlink = "";
        }
      if($rows > "0" AND $i == $current_day){
        $class = "cal-event-day";
        $link = "<a href=\"event.php?day=" . $i . "&month=" . $current_month . "\" class=\"callink\">";
        $endlink = "</a>";
      }
      elseif($rows > "0"){
        $class = "cal-event";
        $link = "<a href=\"event.php?day=" . $i . "&month=" . $current_month . "\" class=\"callink\">";
        $endlink = "</a>";
      }

      echo "<td align=\"center\" class=\"" . $class ."\">" . $link . "" . $i . "" . $endlink ."</td>";

        $x = $i+$dage;
        if(!is_float($x/7)){
            echo "</tr>\n<tr>";
        }
    }
?>
Avatar billede soccoro Nybegynder
25. juni 2003 - 15:31 #25
http://www.pxq.dk/calendar.php <- Den viser kun ugedagene!
Avatar billede avminarm Juniormester
26. juni 2003 - 09:28 #26
se på http://wagners.users.whitehat.dk/calendar.php - den virker - har du husket at udfylde databasen med antal dage måned osv?
Avatar billede krigsspil Nybegynder
26. juni 2003 - 10:40 #27
DB definitionerne er ikke at finde på serveren mere - er det muligt at få dem lagt ind her eller tilsendt pr. email?
Avatar billede soccoro Nybegynder
27. juni 2003 - 10:09 #28
avminarm,

jeg har udfyldt databasen ja, og den viser stadig kun ugedagene!
Avatar billede soccoro Nybegynder
27. juni 2003 - 10:11 #29
Den virker nu!

Der manglede et 0 foran en variabel! Tusind tak for hjælpen! Er der mulighed for at du kan få flere points?
Avatar billede avminarm Juniormester
27. juni 2003 - 12:05 #30
ja da du kan oprette et nyt sprg "points til avminarm" - lægge et link til det her

og btw - det er nok for di jeg har rettet $current_month = date("m"); til $current_month = date("n");  - altsp m til n - så det kan du bare rette retur ;o)
Avatar billede soccoro Nybegynder
27. juni 2003 - 12:34 #31
Avatar billede krigsspil Nybegynder
27. juni 2003 - 12:40 #32
var det muligt at få db-definitionerne tilsendt eller lagt op på din server igen soccoro????
det ligner et script man kunne få glæde af :-)
Avatar billede soccoro Nybegynder
27. juni 2003 - 12:55 #33
krigsspil, jeg smider det op engang i dag! har lige nogle vigtige ting jeg skal have klaret!
Avatar billede krigsspil Nybegynder
27. juni 2003 - 13:01 #34
takker - glæder mig til at se det :)
du må også gerne sende det hvis du vil : cpaludan@worldonline.dk
Avatar billede dennism Nybegynder
30. juni 2003 - 10:39 #35
Kan jeg også få jer til at sende det til mig:
webmaster@demaweb.dk

??
Avatar billede avminarm Juniormester
30. juni 2003 - 13:26 #36
her er db strukturen - håber det er ok med soccoro

#
# Struktur dump for tabellen `calendar`
#

CREATE TABLE calendar (
  month char(2) NOT NULL default '',
  days int(2) NOT NULL default '0',
  text varchar(20) NOT NULL default ''
) TYPE=MyISAM;
# --------------------------------------------------------

#
# Struktur dump for tabellen `events`
#

CREATE TABLE events (
  id int(3) NOT NULL auto_increment,
  day int(2) NOT NULL default '0',
  month int(2) NOT NULL default '0',
  text text NOT NULL,
  participants text NOT NULL,
  type varchar(50) NOT NULL default '',
  vs varchar(50) NOT NULL default '',
  PRIMARY KEY  (id)
) TYPE=MyISAM;
Avatar billede dennism Nybegynder
30. juni 2003 - 16:04 #37
Hvordan er den endelige kode til kalenderes så?
Avatar billede avminarm Juniormester
30. juni 2003 - 21:03 #38
det er den du ser foroven - du skal selv udfylde databasen med dage, md, år
Avatar billede dennism Nybegynder
30. juni 2003 - 21:13 #39
Har I ikke ændret under vejs?
Avatar billede avminarm Juniormester
01. juli 2003 - 09:01 #40
nej sidste ændring er: Kommentar: avminarm 25/06-2003 14:53:31
Avatar billede krigsspil Nybegynder
01. juli 2003 - 09:09 #41
Populerer i calender tabellen med hvor mange dage der er i hver måned? Og hvad bruger i "text" feltet til (i samme tabel)?
Avatar billede avminarm Juniormester
01. juli 2003 - 09:50 #42
text er månedens navn f.eks juni under days skal du selv udfylde hvormange dage der er i måneden
Avatar billede krigsspil Nybegynder
01. juli 2003 - 10:01 #43
Ok - hvordan håndterer i så februar der fx har forskellige antal dage?
Avatar billede avminarm Juniormester
01. juli 2003 - 13:23 #44
man laver dem hvert eneste år ;o) - det er ikke automatisered
Avatar billede avminarm Juniormester
02. juli 2003 - 10:48 #45
har lige ændret lidt i kalenderen - nu behøves databasen 'calender' ikke mere -datoerne er automatiserede :o)

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
    <title>Kalender</title>
    <link rel=stylesheet type="text/css" href="style.css">
</head>
<body >

<?php
  include("config.php");
?>
<table>
<tr>
<td class="main" valign="top">
<table width="350" height="100" cellpadding="0" cellspacing="4">
<?php
 
  $current_month = date("n");
  $year = date("Y");
  $dkmdr = array("Januar", "Februar", "Marts", "April", "Maj", "Juni", "Juli", "August", "September", "Oktober", "November", "December");
  $days = date ("t", mktime(0,0,0,1,$month,$year)); //finder antal dage i den valgte måned
  $current_day = date("d"); //dagsda date
  $charmonth = date("n")-1;

  // så laver vi et array "indhold" med de gænse ugedage i 0=søndag, 1= Mandag ... og 6=lørdag
  // men først et par tomme rum, så det kommer til at passe med ugedag...
  $day_of_week = date("w",mktime(0,0,0,$current_month,1,$year)); // finder dag på ugen for første dag i måneden

  //hvor mange tomme dage skal sættes før den 1. i måneden
  switch($day_of_week){
  case '0':
    $dage = 6;
  break;
  case '1':
    $dage = 0;
  break;
  case '2':
    $dage = 1;
  break;
  case '3':
    $dage = 2;
  break;
  case '4':
    $dage = 3;
  break;
  case '5':
    $dage = 4;
  break;
  case '6':
    $dage = 5;
  break;
  }

  for($i=0;$i<$dage;$i++){
    $tomme .= "<td align=\"center\" class=\"" . $class ."\"> </td>";
  }


  echo "<tr><td colspan=\"7\"><b>" . $dkmdr[$charmonth] . "</b></td></tr>\n";
  echo "<tr><td>Man</td><td>Tir</td><td>Ons</td><td>Tor</td><td>Fre</td><td>Lør</td><td>Søn</td></tr>";
  echo "<tr>";

    if($i <= 7){
    echo $tomme;
    }

    for($i=1;$i<=$days;$i++){
      $qry = mysql_query("SELECT * FROM events WHERE day = '$i' AND month = '$current_month'");
        $rows = mysql_num_rows($qry);
      if($rows == "0"){
        $class = "cal";
        $link = "";
        $endlink = "";
      }
        if($i == $current_day){
        $class = "cal-day";
        $link = "";
        $endlink = "";
        }
      if($rows > "0" AND $i == $current_day){
        $class = "cal-event-day";
        $link = "<a href=\"event.php?day=" . $i . "&month=" . $current_month . "\" class=\"callink\">";
        $endlink = "</a>";
      }
      elseif($rows > "0"){
        $class = "cal-event";
        $link = "<a href=\"event.php?day=" . $i . "&month=" . $current_month . "\" class=\"callink\">";
        $endlink = "</a>";
      }

      echo "<td align=\"center\" class=\"" . $class ."\">" . $link . "" . $i . "" . $endlink ."</td>";

        $x = $i+$dage;
        if(!is_float($x/7)){
            echo "</tr>\n<tr>";
        }
    }
?>
</tr>
</table>
</td>
</tr>
</table>
Avatar billede krigsspil Nybegynder
02. juli 2003 - 11:02 #46
Hehe - nice!
Avatar billede avminarm Juniormester
02. juli 2003 - 14:05 #47
takker :o)
Avatar billede dennism Nybegynder
02. juli 2003 - 19:23 #48
Hvordan ser din config.php ud? Er det udelukkende connections til mySQL?
Avatar billede avminarm Juniormester
03. juli 2003 - 08:11 #49
denism>> ja
Avatar billede avminarm Juniormester
03. juli 2003 - 11:57 #50
hejsa - der er lige et par småfejl i det automatiserede script, men der ligger en ny version her: http://wagners.users.whitehat.dk/kalender/

OBS: scriptet til events passer ikke til den gamle databasestruktur
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