[PHP] Probleem met kalender script

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • Megamind
  • Registratie: Augustus 2002
  • Laatst online: 10-09 22:45
Ik ben bezig met een kalender script, dat werkt nu nog wel aardig, maar zit met een probleempje die ik niet snap.

Eerst een stukje code:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
  $done=array("");
  $counts=0;
  for($a=0;$a<8;$a++){
    if($counts==count($times1)){
      break;
    };
    $counts=0;
    echo"<tr bgcolor=\"#ffffcc\">";
    for($i=0;$i<count($times1);$i++){
      $howlong=0;
      $time=$times1[$i].":00";
      $query=mysql_query("SELECT * FROM kalender WHERE timestart='$time'");
      $plan=mysql_fetch_object($query);
      if($plan->timestart==$time && !in_array($plan->id,$done)){
        $howlong=$plan->minutes/60;
        $i+=$howlong-1;
        $done[]=$plan->id;
        echo"<td colspan=\"$howlong\">$plan->type</td>\n";
      }else{
        $counts++;
        echo"<td></td>\n";
      };
    };
    echo"</tr>";
  };


Het is nog in beginfase, maar hij bouwt dus nu een tabel op van 8 tot 12 uur 's avonds, daaronder de kolommen... De eerste FOR is gewoon dat hij 8x rond gaat om te kijken of er geen overlappende events zijn... De 2e FOR gaat gewoon een array met tijden langs ("08:00","09:00") enz.. Het gedeelte erna tekent de tabel inclusief doorlopende kolommen... $done zorgt ervoor dat hij overlappende in de volgende rij meeneemt

Maar als ik in de database 2 events zet met verschillende lengtes maar met dezelfde begintijden dan laat hij gewoon de laatst ingevoerde weg, terwijl die NIET in de array $done staat en hij toch door de 1e FOR loop gezien moet worden :/

Ik snap het niet meer :(

[ Voor 10% gewijzigd door Megamind op 11-04-2004 16:37 ]


Acties:
  • 0 Henk 'm!

Verwijderd

Wat zit er in de variabele times1?
En wat is de inhoud van de tabel `kalender`?

[ Voor 5% gewijzigd door Verwijderd op 11-04-2004 16:54 ]


Acties:
  • 0 Henk 'm!

  • T-MOB
  • Registratie: Maart 2001
  • Laatst online: 22:34
Maar als ik in de database 2 events zet met verschillende lengtes maar met dezelfde begintijden dan laat hij gewoon de laatst ingevoerde weg
Dat is logisch door de manier waarop je de database queried: je vraagt om alle items met een bepaalde starttijd en werkt vervolgens verder met één result uit je db. Hoe vaak je ook loopt dit geeft altijd hetzelfde kalenderpunt. Die staat al in array done waardoor hij geen tweede keer wordt weergegeven.

Aangezien je zij dat je nog in de beginfase zit zou ik zowieso overwegen om met unix time stamps te werken in je database. mktime() en localtime() zijn je vrienden om deze om te zetten naar "echte" datums en tijd.
Als je datum is omgezet in een getal kun je er makkelijker mee werken (dat is tenminste mijn ervaring). Je kunt je tabel opbouwen en per cel vragen om alle items binnen het interval dat de cel voorstelt.

Regeren is vooruitschuiven


Acties:
  • 0 Henk 'm!

  • Megamind
  • Registratie: Augustus 2002
  • Laatst online: 10-09 22:45
T-MOB schreef op 11 april 2004 @ 18:04:
[...]


Dat is logisch door de manier waarop je de database queried: je vraagt om alle items met een bepaalde starttijd en werkt vervolgens verder met één result uit je db. Hoe vaak je ook loopt dit geeft altijd hetzelfde kalenderpunt. Die staat al in array done waardoor hij geen tweede keer wordt weergegeven.

Aangezien je zij dat je nog in de beginfase zit zou ik zowieso overwegen om met unix time stamps te werken in je database. mktime() en localtime() zijn je vrienden om deze om te zetten naar "echte" datums en tijd.
Als je datum is omgezet in een getal kun je er makkelijker mee werken (dat is tenminste mijn ervaring). Je kunt je tabel opbouwen en per cel vragen om alle items binnen het interval dat de cel voorstelt.
Maar dan zit ik met een table probleem, als er meerdere events zijn die overlappen hoe krijg ik dan deze makkelijk op verschillende rijen (ontwerp table's dus)...

Of bedoel je dat ik beter eerst ALLE items binnenhaal, dan opsla in bv arrays en die verwerken?

/edit ik snap het van je eerste stukje ja! :D

[ Voor 4% gewijzigd door Megamind op 11-04-2004 18:33 ]


Acties:
  • 0 Henk 'm!

  • Megamind
  • Registratie: Augustus 2002
  • Laatst online: 10-09 22:45
Verwijderd schreef op 11 april 2004 @ 16:54:
Wat zit er in de variabele times1?
En wat is de inhoud van de tabel `kalender`?
$times1=array("08:00:00","09:00:00","10:00:00","11:00:00","12:00:00","13:00:00","14:00:00","15:00:00");

tabel kalender:
id(int)
date(date)
timestart(time)
minutes(smallint)
type(enum)

en nog wat velden die niet belangrijk zijn..

Acties:
  • 0 Henk 'm!

  • Megamind
  • Registratie: Augustus 2002
  • Laatst online: 10-09 22:45
Ik had zelfs iets verzonnen:

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
  $done="0";
  $counts=0;
  for($a=0;$a<10;$a++){
    if($counts==count($times1)){
      break;
    };
    $counts=0;
    echo"<tr bgcolor=\"#ffffcc\">";
    for($i=0;$i<count($times1);$i++){
      $howlong=0;
      $time=$times1[$i];
      $query=mysql_query("SELECT * FROM kalender WHERE timestart='$time' AND (id NOT LIKE '%$done%')")or die(mysql_error());
      $plan=mysql_fetch_object($query);
      $noi=mysql_num_rows($query);
      if($plan->type=="les")$color="#9999ff";
      elseif($plan->type=="huur")$color="#00cc99";
      elseif($plan->type=="gereserveerd")$color="#ff0033";
      
      if($plan->timestart==$time && !eregi($plan->id,$done)){
        $howlong=$plan->minutes/60;
        $i+=$howlong-1;
        $done.=$plan->id;
        echo"<td bgcolor=\"$color\" colspan=\"$howlong\">$done $plan->minutes $plan->type</td>\n";
      }else{
        $counts++;
        echo"<td></td>\n";
      };
    };
    echo"</tr>";
  };


heb nu van die $done array een $done string gemaakt, alle ID's die voorbij zijn gekomen worden daarin toegevoegd, en query kijkt dan of de ID nog niet in de $done string is geweest met
code:
1
mysql_query("SELECT * FROM kalender WHERE timestart='$time' AND (id NOT LIKE '%$done%')")


maar krijg hetzelfde effect als eerst... is die query niet helemaal juist?
Pagina: 1