Avatar billede plazm Nybegynder
28. april 2005 - 12:41 Der er 1 kommentar og
2 løsninger

Skoleskema problemer - næste time.

Hejsa.
Jeg sidder og er ved at lave en side hvor jeg har lavet mit skoleskema. Jeg har så arbejdet lidt på at få lavet så at jeg kan se hvilken time jeg har nu og hvilken der er næste gang. Det er ikke så svært med den første del, altså denne time. Men det er næste time som driller mig.

Hvis jeg har dansk i de to første timer og så en fri time og så der efter en kemi, så skal den ikke skrive
Denne time: 08:50 - 09:35 Dansk
Næste time: 09:50 - 10:35 Fri
men
Denne time: 08:50 - 09:35 Dansk
Næste time: 10:40 - 11:25 Kemi

Jeg har valgt at fjerne alt hvad jeg havde, da det var en gang lort jeg havde fået lavet, så jeg har valgt at starte forfra på koden, dog mener jeg at følgende funtioner kan bruges

  function ft($k = 0){
    global $row,$dag;
    $v = $dag + $k;
    if($v < 1) {$v = 5;}
    if($v > 5) {$v = 1;}
    for($b=9;$b>0;$b--) {
      if ($row["time-".$v."-".$b] != "Fri") { $n = $b; }
    }
    return $n;
  }
Denne funtion finder første time på dagen, hvis ft() kaldes så returneres dagens første time, hvis ft(1) så er det morgendagens første time og ft(-1) dagen før, osv.

  function st($k = 0) {
    global $row,$dag;
    $v = $dag + $k;
    if($v < 1) {$v = 5;}
    if($v > 5) {$v = 1;}
    for($b=1;$b<=9;$b++) {
      if ($row["time-".$v."-".$b] != "Fri") { $n = $b; }
    }
    return $n;
  }
Denne funtion finder sidste time på dagen, hvis st() kaldes så returneres dagens sidste time, hvis st(1) så er det morgendagens sidste time og ft(-1) dagen før, osv.


  function nt($k) {
    global $row,$dag;
    for($b=$k+1;$b<=9;$b++) {
      if ($row["time-".$dag."-".$b] != "Fri" && !isset($n)) { $n = $b; }
    }
    return $n;
  }
Denne funktion har jeg lige lavet. Hvis nuværende time er 2(dansk) så vil nt(2) returnere 4(kemi) og ikke 3 som er en fri(time)

Hvordan vil i råde mig til at bygge det op ?

Jeg har følgende som jeg ved virker.

  $q = "SELECT * FROM Skema WHERE BrugerID='".$_SESSION['BrugerID']."'";
  $r = mysql_query($q) or die(mysql_error());
  $row = mysql_fetch_array($r);
  $start[] = "Fri";
  $slut[] = "Fri";
  $nu = time() - ((60+35)*60);
  $dag=date("w",$nu);
  if($dag==0){$dag=7;}
  for($a=1;$a<=9;$a++) {
    $starttid = explode(":",$row["klokken-".$a."-start"]);
    $sluttid = explode(":",$row["klokken-".$a."-slut"]);
    $start[] = mktime($starttid[0],$starttid[1],00,date("m",$nu),date("d",$nu),date("Y",$nu));
    $slut[] = mktime($sluttid[0],$sluttid[1],00,date("m",$nu),date("d",$nu),date("Y",$nu));
  }

arrayet $start indeholder alle de tidpunkter timerne starter, i formatet unixtime
arrayet $slut indeholder alle de tidpunkter timerne slutter, i formatet unixtime
så $start[1] vil returnere 08:00 i unix tid.

her er starttidspunkterne på mit skema og hvordan en af mine dage ser ud
08:00 - 08:45 Matematik
08:50 - 09:35 Matematik
10:10 - 10:35 Samfundsfag
10:45 - 11:30 Fri
11:55 - 12:40 Teknologi
12:45 - 13:30 Kemi
13:40 - 14:25 Fysik
14:30 - 15:15 Fysik
15:25 - 16:10 Fri

Håber i kan hjælpe mig på vej

  if ($nu < $start[$ft]) {
    her ved jeg hvad skal være
  } elseif ($nu > $slut[$st]) {
    her ved jeg også hvad skal være
  } else {
    her er jeg lidt lost
  }
Avatar billede busschou Praktikant
28. april 2005 - 14:55 #1
Jeg er ikke super haj til php
Men hvorfor ikke hive dagenes timer ud i et array, og start og slut tider og så sammenligne
pseudo kode:
--
if ($nu < $start[0]){
echo "Ingen timer nu, næste time $start[1] - $slut[1] $time[1]";
}elseif ($nu > $slut[9]){
echo "Ingen timer nu, og der er ikke flere timer idag weee";
}else{
for($a=0;$a<9;$a++) {
  if($start[a] <= $nu && $nu <= $slut[a]){
  if($time[a] == "Fri"){
    echo "Lige nu har jeg fritime";
  }else{
    echo "Lige nu har jeg $time[a]";
  }
  for($b=$a;$b<9;$b++){
    if($time[b] != "Fri"){
    echo "og min næste time er $start[b] - slut[b] $time[b]";
    exit();
    }elseif($b == 8){
    echo "og jeg har ikke flere timer idag";
    exit();
    }
  }
  }
}
}
Avatar billede plazm Nybegynder
28. april 2005 - 17:57 #2
Var godt nok ikke helt det jeg søgte, men du kan da få halv skade for dit forsøg, smid et svar.
Til syneladende virker dette:

  $q = "SELECT * FROM Skema WHERE BrugerID='".$_SESSION['BrugerID']."'";
  $r = mysql_query($q) or die(mysql_error());
  $row = mysql_fetch_array($r);
  $sstart[] = "Fri";
  $sslut[] = "Fri";
  $start[] = "Fri";
  $slut[] = "Fri";
  $nu = time() - ((60+35)*60);
  $dag=date("w",$nu);
  if($dag==0){$dag=7;}
  for($a=1;$a<=9;$a++) {
    $starttid = explode(":",$row["klokken-".$a."-start"]);
    $sluttid = explode(":",$row["klokken-".$a."-slut"]);
    $start[] = mktime($starttid[0],$starttid[1],00,date("m",$nu),date("d",$nu),date("Y",$nu));
    $slut[] = mktime($sluttid[0],$sluttid[1],00,date("m",$nu),date("d",$nu),date("Y",$nu));
  }
  function foerstetime($k = 0){
    global $row,$dag;
    $v = $dag + $k;
    if($v < 1) {$v = 5;}
    if($v > 5) {$v = 1;}
    for($b=9;$b>0;$b--) {
      if ($row["time-".$v."-".$b] != "Fri") { $n = $b; }
    }
    return $n;
  }
  function sidstetime($k = 0) {
    global $row,$dag;
    $v = $dag + $k;
    if($v < 1) {$v = 5;}
    if($v > 5) {$v = 1;}
    for($b=1;$b<=9;$b++) {
      if ($row["time-".$v."-".$b] != "Fri") { $n = $b; }
    }
    return $n;
  }
  function naestetime($k) {
    global $row,$dag;
    for($b=$k+1;$b<=9;$b++) {
      if ($row["time-".$dag."-".$b] != "Fri" && !isset($n)) { $n = $b; }
    }
    return $n;
  }
  function forrigetime($k) {
    global $row,$dag;
    for($b=$k-1;$b>0;$b--) {
      if ($row["time-".$dag."-".$b] != "Fri" && !isset($n)) { $n = $b; }
    }
    return $n;
  }
  function fag($a,$b = 0) {
    global $row,$dag;
    $b = $dag + $b;
    if ($b > 5) { $b = 1; }
    if ($b < 1) { $b = 5; }
    return $row["time-".$b."-".$a];
  }
  $ft = foerstetime();
  $st = sidstetime();
  if ($nu < $start[$ft]) {
    $dt = "Fri";
    $dtt = date("H:i",$slut[sidstetime(-1)])." - ".date("H:i",$start[$ft]);
    $nt = fag($ft);
    $ntt = date("H:i",$start[$ft])." - ".date("H:i",$slut[$ft]);
  }elseif($nu > $slut[$st]) {
    $dt = "Fri";
    $dtt = date("H:i",$slut[$st])." - ".date("H:i",$start[foerstetime(1)]);
    $nt = fag($ftimorgen,1);
    $ntt = date("H:i",$start[foerstetime(1)])." - ".date("H:i",$slut[foerstetime(1)]);
  }else{
    for($a=1;$a<=9;$a++) {
      if($nu >= $start[$a] && $nu <= $slut[$a]) {
        if (fag($a) != "Fri") {
          $dt = fag($a);
          $dtt = date("H:i",$start[$a])." - ".date("H:i",$slut[$a]);
          if ($a < $st) {
            $nt = fag(naestetime($a));
            $ntt = date("H:i",$start[naestetime($a)])." - ".date("H:i",$slut[naestetime($a)]);
          } else {
            $nt = fag(foerstetime(1));
            $ntt = date("H:i",$start[foerstetime(1)])." - ".date("H:i",$slut[foerstetime(1)]);
          }
        } else {
          $dt = "Fri";
          $dtt = date("H:i",$start[forrigetime($a)])." - ".date("H:i",$start[naestetime($a)]);
          $nt = fag(naestetime($a));
          $ntt = date("H:i",$start[naestetime($a)])." - ".date("H:i",$slut[naestetime($a)]);
        }
      } elseif($slut[$a] < $nu && $nu < $start[$a+1]) {
        if(fag($a+1) != "Fri") {
          $dt = "Frikvarter";
          $dtt = date("H:i",$slut[$a])." - ".date("H:i",$start[$a+1]);
          $nt = fag($a+1);
          $ntt = date("H:i",$start[$a+1])." - ".date("H:i",$slut[$a+1]);
        } else {
          $dt = "Fri";
          $dtt = date("H:i",$start[forrigetime($a+1)])." - ".date("H:i",$start[naestetime($a+1)]);
          $nt = fag(naestetime($a+1));
          $ntt = date("H:i",$start[naestetime($a+1)])." - ".date("H:i",$slut[naestetime($a+1)]);
        }
      }
    }
  }
Avatar billede busschou Praktikant
28. april 2005 - 18:42 #3
jamen ok så :o) halv skade her ;o)
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