Avatar billede arkanoid Nybegynder
07. august 2005 - 01:02 Der er 12 kommentarer

Kalenderscript fejler

Hej. Jeg har et problem med følgende script. Det burde generere et output bestående af en tabel med en kalender, men der går simpelthen ged i den. Der er en masse ting, der ikke fungerer som de skal:
1) Hvis et event strækker sig over flere dage (i databasen er start og slut angivet ved to epoch timestamps) BLiver kun den første dag listet. Problemet ligger formentlig i SQL-kaldet, men jeg kan ikke se fejlen.
2) Rowspan i tabellen går galt. Men jeg kan (igen) ikke se hvorfor

Koden ligger på pastebin: http://pastebin.com/330894
Avatar billede coderdk Praktikant
07. august 2005 - 01:40 #1
Prøv at ændre din SQL til:

    $sql = "
        SELECT
            *
        FROM
            kalender
        WHERE
            (date_start >= ".$time_start."
            AND date_start < ".$time_end.")
            OR
            (date_end >= ".$time_start."
            AND date_end < ".$time_end.")
            OR
            (date_start < ".$time_start."
            AND date_end > ".$time_end."
        ORDER BY
            date_start ASC
            ";

Du er nødt til at tænke analytisk, og finde alle muligheder. Disser er muglihederne:
1) Et starttidspunkt er mellem time_start og time_end
2) Et sluttidspunkt er mellem time_start og time_end
3) Et starttidspunkt er før time_start men efter time_end

Dit andet spørgsmål kan jeg ikke lige se - Kigger lidt nærmere på det...
Avatar billede coderdk Praktikant
07. august 2005 - 01:51 #2
Hmmm jeg forstår det ikke lige, du starter med:

$num_events = mysql_num_rows($result);

Altså antallet af rækker fundet. Længere nede:

          if ($num_classes != "1"){
                $num_events = $num_events+$num_classes;
          }

Og så sætter du:

$html .= "<tr><td rowspan='".$num_events."' class='calendar_date'>".$i."</td></tr>".$output;

Hvorefter det bliver skrevet ud... Jeg kan ikke helt se meningen...
Avatar billede arkanoid Nybegynder
07. august 2005 - 02:52 #3
$num_events skal finde antallet af rækker, ud for hver dato.
Først finder den antallet af poster, der er blevet valgt (som opfylder kriterierne). En post kan godt tilhøre flere klasser og skal så udskrives flere gange (en gang pr. klasse)
Avatar billede coderdk Praktikant
07. august 2005 - 04:03 #4
hehe giver stadig ikke så meget mening for mig - hvorfor lave rowspan?

LOL så lige:

3) Et starttidspunkt er før time_start men efter time_end

Skal være:

3) Et starttidspunkt er før time_start men sluttidspunkt er efter time_end
Avatar billede arkanoid Nybegynder
07. august 2005 - 14:08 #5
Rowspan: fordi der er et felt, der indeholder datoen... det felt skal spænde over så mange felter, som der er events på den pågældende dato
Avatar billede arkanoid Nybegynder
07. august 2005 - 17:21 #6
Derudover giver SQL-kaldet også det problem, at enkelt poster bliver taget flere gange, og derfor udskrevet flere gange. F.eks en post, der har et start og et sluttidspunkt mellem time_start og time_end
Avatar billede coderdk Praktikant
07. august 2005 - 17:27 #7
Nej, den SQL-query vil kun tage den samme event én gang. At du så looper og risikerer at den bliver taget flere gange, er noget du skal kode dig ud af. Der er intet galt med query'en, det kan du evt. gøre ved at gemme ID'erne og i SQL'ens WHERE tilføje: AND id NOT IN (dine id'er kommasepareret)
Avatar billede arkanoid Nybegynder
07. august 2005 - 18:03 #8
ok... jeg kigger på det igen, og vender tilbage
Avatar billede arkanoid Nybegynder
07. august 2005 - 19:12 #9
Jeg er godt klar over, at jeg er en besværlig kunde. Men der er stadig ngoet der ikke hænger sammen.
Det er efterhånden svært at forklare, men problemet er, at et arrangement, der strækker sig over flere dage kun bliver vist den første dage, og dage hvor der er andre arrangementer.
Til gengæld er det nu sådan, at arrangementer, der har være vist en gang før, bliver vist igen, når der er et nyt arrangement (hvilket formentlig også er årsagen til at at arrangementerne, der strækker sig over flere dage, kun bliver listet når der er et andet arrangemnet)
Koden er i en opdateret version her: http://pastebin.com/331362
Og scriptet i funktion kan ses her: http://fdfk8.dk/kalender/calendar.php
Avatar billede coderdk Praktikant
07. august 2005 - 19:53 #10
"problemet er, at et arrangement, der strækker sig over flere dage kun bliver vist den første dage, og dage hvor der er andre arrangementer"

Ja, du har sagt at det kun skal vises første gang du tager fat i arrangementet, med "id NOT IN"-delen, derfor optræder det kun én gang.
Jeg forstår ikke at du skriver at nogle bliver vist flere gange; de vil jo ikke opfylde "id NOT IN"-delen. Det lyder meget underligt - Prøv at udskrive din $ids i loopet og id'en for hvert arrangement.
Avatar billede arkanoid Nybegynder
07. august 2005 - 19:57 #11
ja, det var jeg godt klar over :) Spørgsmålet, er bare, om man på nogen måde kan gøåre noget ved det? Eller om problemet, i sidste ende, skal gribes fuldstændigt anderledes an?
Avatar billede arkanoid Nybegynder
07. august 2005 - 22:14 #12
Den udskriver de forskellige ID-værdier, og listen over id'er i "NOT IN"-delen... Som du/i kan se er det underligt, ja...
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