Avatar billede kaktus Nybegynder
01. juli 2008 - 11:25 Der er 30 kommentarer og
1 løsning

kalender i php med avent gemt i database

Jeg har brugt kalenderen på http://keithdevens.com/software/php_calendar som flere steder her på eksperten anbefales. (syntes også selv den er god)
Spørgsmål:
Er der nogen af jer eksperter der har fået indbygget events i denne kalender?
Jeg ønsker events gemt i sql db. (den del er jeg vand til via et adminpanel.) og ved mus over en specifik dato skal der (fra db) vises  et titel tag og samtidig være et link der kan hente avents fra db via get i url.
Jeg har fået specifikke datoer til at være link og der (?archive=2008/May/03) kommer også noget fornuftigt i url via dette array forslag som er hentet i de mange eksempler på kiethé hjemmeside.
days = array(

      2=>array('?archive=2008/May/02'),
        3=>array('?archive=2008/May/03','linked-day'),
MEN hvordan for jeg dette array fra db?????

VIGTIGT.
Jeg ønsker kun hjælp til denne kalender og ikke andre.
Ligeledes er det vel rimeligt at point først afgives når den fungere som jeg har beskrevet at jeg ønsker.
Se evt. her som ligner det jeg går efter....
http://www.hockeyklubben-odin.dk/
Avatar billede kaktus Nybegynder
01. juli 2008 - 12:03 #1
Kalender kører på (developer) ikke offentlig server, så jeg kan ikke tilbyde at vise den som den er nu.......
MEN spørg hvis du ikke forstår min beskrivelse/spørgsmål/ønsker :-)
Avatar billede jakobdo Ekspert
01. juli 2008 - 21:08 #2
Du vil garanteret vise en måned af gangen, så du kan lave noget ala:

SELECT * FROM events WHERE MONTH(dato) = 7 AND YEAR(dato) = 2008 ORDER BY DAY(dato)

Så skal du bare have formatteret datoen, så du får DAY(dato) og den smider du så ind.
Dog har jeg tidligere leget med den kalender, og du skal lave noget hack, da jeg ikke mener den kan klare flere events pr dag, som den er bygget nu.
Avatar billede kaktus Nybegynder
02. juli 2008 - 00:38 #3
Tak til jakobdo
Jeg har smidt kalenderen op offentligt, så er det vist lidt nemmere at se hvad jeg mener

http://testkalender.sluk.dk/inc_calendar.php

Det er stadig det array kommende fra db jeg ikke ved hvordan jeg håndterer....
Avatar billede kaktus Nybegynder
02. juli 2008 - 16:36 #4
Ved ikke hvorfor jakobdo, men select metoden virker ikke for mig.......

SELECT * FROM calendar WHERE MONTH(dato) = 3 AND YEAR(dato) = 2008 ORDER BY DAY(dato)
virker ikke for mig, men
SELECT * FROM calendar kommer korrekt med de data der er......
mener dog det skulle virke med din select metode.......mere info her....
http://www.tizag.com/sqlTutorial/sqldate.php
her prøvet at ændre DAY(dato) til DAYOFMONTH(dato).......
min db er som følger:
DROP TABLE IF EXISTS `calendar`;
CREATE TABLE IF NOT EXISTS `calendar` (
  `id` int(11) NOT NULL auto_increment,
  `dato` varchar(33) NOT NULL,
  `text` text character set utf8 collate utf8_unicode_ci NOT NULL,
  PRIMARY KEY  (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=3 ;


INSERT INTO `calendar` (`id`, `dato`, `text`) VALUES
(1, '1206618676', 'dag som skal huskes'),
(2, '1206705076', 'en anden vigtig dag.\r\n');
Avatar billede jakobdo Ekspert
02. juli 2008 - 18:31 #5
Ahh, du må ALDRIG gemme dato som en varchar.
Brug de indbyggede datatype i mysql.
DATE (ren dato)
DATETIME dato + tid.
Avatar billede kaktus Nybegynder
02. juli 2008 - 22:48 #6
Takker endnu engang......jakobdo
Ved du måske så også hvordan jeg får lavet et array som nedenstående fra/via et database kald...

$days = array(

        25=>array('?archive=2008-6-25&month='.$_GET["month"].''),
        12=>array('?archive=2008-3-12&month='.$_GET["month"].''),
        27=>array('?archive=2008-3-27&month='.$_GET["month"].''),
    $today=>array(NULL,NULL,$today_custom));// formaterer dags dato
Avatar billede jakobdo Ekspert
03. juli 2008 - 07:01 #7
Du kunne jo lave:

$query = mysql_query("SELECT DAY(dato) as DAG WHERE month(dato) = intval($_GET['month']) AND year(dato) = intval($_GET['year']) ORDER BY DAY(dato)");
$days = array();
while($row = mysql_fetch_assoc($query)){
$days[$row['dag']] = array('DIT_LINK_ELLER_INDHOLD');
}
Avatar billede kaktus Nybegynder
03. juli 2008 - 10:41 #8
Ser interessant ud.......
Fik fejl pga. ''pinger....troe jwg de hedder..rettede

$query = mysql_query("SELECT DAY(dato) as DAG WHERE month(dato) = intval($_GET['month']) AND year(dato) = intval($_GET['year']) ORDER BY DAY(dato)");
til
$query = mysql_query("SELECT DAY(dato) as DAG WHERE month(dato) = intval($_GET[month]) AND year(dato) = intval($_GET[year]) ORDER BY DAY(dato)");
og fejl forsvandt....
men der er nu følgende fejl i fetch_assoc()
Warning: mysql_fetch_assoc(): supplied argument is not a valid MySQL result resource

Database:
DROP TABLE IF EXISTS `calendar`;
CREATE TABLE IF NOT EXISTS `calendar` (
  `id` int(11) NOT NULL auto_increment,
  `dato` date NOT NULL,
  `text` text character set utf8 collate utf8_unicode_ci NOT NULL,
  PRIMARY KEY  (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=5 ;

INSERT INTO `calendar` (`id`, `dato`, `text`) VALUES
(1, '2008-03-27', 'en 2008-03-27 dag som skal huskes '),
(2, '2008-03-12', 'en 2008-03-12 anden vigtig dag.\r\n'),
(3, '2008-06-25', 'hej:2008 og måned 06\r\ndet er den 26 i dag'),
(4, '2008-07-03', 'hej med dig i 7 måned den 3');
Avatar billede kaktus Nybegynder
03. juli 2008 - 10:42 #9
Fik fejl pga. 'enkelt-pinger'....tror jeg de hedder..rettede...
undskyld min stavemåde... :-) (ovenfor)
Avatar billede jakobdo Ekspert
03. juli 2008 - 11:33 #10
pling'er kaldes de! :o)
Avatar billede jakobdo Ekspert
03. juli 2008 - 11:33 #11
Husker du at kalde filen med fil.php?month=6&year=2007
Avatar billede kaktus Nybegynder
03. juli 2008 - 11:40 #12
Der er jeg ikke med hvad du mener........
Måske det er hvor du skriver......DIT_LINK_ELLER_INDHOLD
at du mener der skal stå noget ala....
fil.php?month=6&year=2007
MEN nu ved jeg at det hedder pling'er .. hiihi
Avatar billede kaktus Nybegynder
03. juli 2008 - 11:43 #13
Er det forøvrigt lige meget om man skriver (som du har gjort) 'intval'
eller som Google gerne vil have det til at hedde 'interval'
som her eks. http://dev.mysql.com/doc/refman/5.0/en/date-and-time-functions.html
Avatar billede kaktus Nybegynder
03. juli 2008 - 11:47 #14
Har prøvet at sat kaldet i urlén til.....
først
?archive=2008-03-27
og
?month=6&year=2007
MEN uden held
Avatar billede jakobdo Ekspert
03. juli 2008 - 11:53 #15
intval() betyder den giver dig en integer værdi fra input.
Det sikrer at folk ikke smider andet ind i din sql.
Avatar billede kaktus Nybegynder
03. juli 2008 - 14:33 #16
TAK igen for oplysningen.......
Største udfordring lå i at finde ud af at der ikke blev angivet fra hvilken db tabel data skulle hentes fra....
FROM calendar hvor tabel navn er calendar........
NÅ det virker nu...MEN der hvor der står $row[dato] i nedenstående kommer ikke noget op i urlén ved mus over eller click  eksempelvis den 3 july 2008 på kalenderen http://testkalender.sluk.dk/inc_calendar.php


$days = array();
while($row = mysql_fetch_assoc($query)){
$days[$row['dag']] = array('?archive=$row[dato]&month='.$_GET["month"].'');
}
Avatar billede kaktus Nybegynder
03. juli 2008 - 14:35 #17
$row[dato] skulle gerne skrive 2008-07-03
Avatar billede jakobdo Ekspert
03. juli 2008 - 14:58 #18
Ret: SELECT DAY(dato) as DAG FROM calendar WHERE
til: SELECT DAY(dato) as DAG, dato FROM calendar WHERE
Avatar billede kaktus Nybegynder
03. juli 2008 - 15:03 #19
Løsningen blev.........denne select
SELECT DAY(dato) as dag , MONTH(dato) as md , YEAR(dato) as aar FROM calendar WHERE MONTH(dato) = '$_SESSION[month]' ORDER BY DAY(dato)
TUSINDE TAK jacobdo jeg har lært meget......om select

ved du om det er muligt at hægte denne på det nu eksisterende array (som virker)...
$today=>array(NULL,NULL,$today_custom));// formaterer dags dato
skulle ind som sidste linie gerne. (altså efter while løkken)
Avatar billede jakobdo Ekspert
03. juli 2008 - 15:15 #20
Du bør kigge på dette eksempel:

<?php

$time = time();

$today = date('j',$time);

$days = array($today=>array(NULL,NULL,'<span style="color: red; font-weight: bold; font-size: larger; text-decoration: blink;">'.$today.'</span>'));

echo generate_calendar(date('Y', $time), date('n', $time), $days);

?>

Dog skal du smide det med ind i din while() da en dag fra din tabel, jo godt kan være current day.
Avatar billede jakobdo Ekspert
03. juli 2008 - 15:15 #21
Og du får et svar.
Avatar billede kaktus Nybegynder
03. juli 2008 - 15:49 #22
Det er netop dette eksempel jeg har brugt som udgangspunkt.......MEN ønsker ikke blink som alligevel ikke understøttes af alle browsere......
Jeg har derfor fået følgende til at virke uden/inden db understyttelse........
$time = time();
if($_GET["month"]=="" || date("n", $time) == $_GET["month"]){//  hvis ingen gæt værdi eller get værdi er samme som nuværende måned
$today = date('j',$time);//sætter dags dato
}

if(strlen($today) == 1) {$today_custom =  "<span id=\"now\">&nbsp;$today&nbsp;</span>";}
else {$today_custom = "<span id=\"now\">$today</span>";};

og derfor skal dette med i $days arrayet......
$today=>array(NULL,NULL,$today_custom));// formaterer dags dato
Avatar billede kaktus Nybegynder
03. juli 2008 - 15:50 #23
og du har foreløbig været til stor hjælp......derfor et accepteret svar
Avatar billede kaktus Nybegynder
03. juli 2008 - 15:53 #24
og du har foreløbig været til stor hjælp......derfor et accepteret svar
Avatar billede kaktus Nybegynder
03. juli 2008 - 15:54 #25
nu ved jeg ik lige hvad der sker...... når jeg klikker på accepter knappen!!!!!!!!!!!
Avatar billede jakobdo Ekspert
03. juli 2008 - 15:54 #26
Jeg ville nok lave:

$time = time();
$today = date('j',$time);
$days = array();
$todayFound = false;
while($row = mysql_fetch_assoc($query)){
    if($row['dag'] == $today){
        $days[$row['dag']] = array('?archive=$row[dato]&month='.$_GET["month"].'',NULL,'<span id="now">'.$today.'</span>');
        $todayFound = true;
    }
}
if(!$todayFound){
    $days[$today] = array(NULL,NULL,'<span id="now">'.$today.'</span>');
}
Avatar billede kaktus Nybegynder
09. juli 2008 - 15:22 #27
Ja nu fik vi jo aldrig det beskrevet mouse over event haløj til at virke.. men point er afgivet og velfortjent.
Er der mon nogen der ved om 'Mo    Tu We Th Fr Sa Su, kan ændres til danske ugedage i dette script...
http://keithdevens.com/software/php_calendar
men virker ellers nogenlunde som tiltænkt...
http://testkalender.sluk.dk/inc_calendar.php
Avatar billede jakobdo Ekspert
09. juli 2008 - 15:59 #28
Du skal bruge kode ala:

<?php
$time = time();
setlocale(LC_TIME, 'nl_NL'); #dutch
echo generate_calendar(date('Y', $time), date('n', $time));
?>
Avatar billede jakobdo Ekspert
09. juli 2008 - 16:00 #29
Og brug denne setlocale()

setlocale(LC_ALL, 'danish', "da", "da_DK", "da_DK.iso8859-1");
Avatar billede kaktus Nybegynder
09. juli 2008 - 21:38 #30
$time = time();
setlocale(LC_ALL, 'danish', "da", "da_DK", "da_DK.iso8859-1");
$maaned = date("n", $time);
echo generate_calendar(date('Y', $time),  $maaned ,$days, 2, NULL, 1, $pn);
-------------------------
Går ud fra at det er sådan du mener, men desværre ingen ændring....
script kører på linux server
Avatar billede kaktus Nybegynder
09. juli 2008 - 21:43 #31
UNDSKYLD......
selvfølgelig virker forslaget fra jakobdo...;-)
Jeg satte linien ind i admin panelet (som også viser kalender) men tjekkede på front-end siden.....øv bøv kvajebajer
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