Avatar billede sajbar Nybegynder
31. august 2004 - 13:43 Der er 16 kommentarer og
1 løsning

Kalender - problemer med løkker

Hej kære Eksperter ;)

Inden jeg hiver alle mine hår ud af hovedet må jeg nok hellere spørge om hjælp!

så det gør jeg hermed

HJÆLP!

Jeg sidder og er igang med at lave en kalender med tilhørende database.

Kalenderen skal skrive en dato ud hvis der ikke er et arrangement,  og ellers skal den skrive en dato ud og titelen på arrangementet hvis der er et.

Mit problem ligger i at jeg ikke rigtig kan finde ud af hvordan jeg skal strukture mine løkker, jeg har lavet en løkke der skriver dato'erne ud, so far so good.

problemet kommer i når jeg skal checke efter om der er et arrangement for dato'en, jeg ved godt at jeg "bare" kan lave en select hver gang der kommer en dato og så skrive ud der.

Dette synes jeg bare er tåbeligt i det det giver en masse unødvendige kald til databasen.
scriptet kommer her

<?
mysql_connect("localhost", "user", "password") or
  die("Could not connect: " . mysql_error());
mysql_select_db("studieportal");

$day=1;
$month=$_GET['month'];
$year=$_GET['year'];
if(empty($month))
{
  $month=date(n);
  $month1=date(m);
}

if(empty($year))
{
  $year =date(Y);
}

$day=01;
$month1=(date("m", mktime(0, 0, 0, $month, $day, $year)));
$totaldays = date("t", mktime(0, 0, 0, $month, 1, $year));

$dage = array("Søndag","Mandag","Tirsdag","Onsdag","Torsdag","Fredag","Lørdag");
$mdr = array("1","Januar","Februar","Marts","April","Maj","Juni","Juli","August","September","Oktober","November","December");


?>
<a href="<?echo($phpself);?>?month=<? if($month!=1){echo($month-1); ?>&year=<?echo($year);?>"<?}else {echo(12); ?>&year=<?echo($year-1);?>"<?}?>>forrige</a>
<a href="<?echo($phpself);?>?month=<? if($month!=12){echo($month+1); ?>&year=<?echo($year);?>"<?}else {echo(1); ?>&year=<?echo($year+1);?>"<?}?>>Næste</a>
<br>

<?
$result = mysql_query("SELECT  id, titel, emnebeskrivelse, sted, DATE_FORMAT(dato, '%d-%m-%Y') as dato, tidspunkt FROM studie_aktivitet where MONTH(dato)='".$month."' order by dato");


while($totaldays!=$day)
{

  $ugedag=date("w", mktime(0, 0, 0, $month, $day, $year));
  echo($dage[$ugedag]. " ");
  echo($day . "-". $month1 ."-".$year);
  echo("<br>");
  $day++;
}

?>
Som I kan se har jeg lavet et sql udtræk som udtrækker alt for den aktive måned, der kan godt være flere arrangementer på den samme dag!
håber der er en eller anden der kan hjælpe mig.
Avatar billede Slettet bruger
31. august 2004 - 13:47 #1
Jamen så er det vel bare inde i din

while($totaldays!=$day)
{

  $ugedag=date("w", mktime(0, 0, 0, $month, $day, $year));
  echo($dage[$ugedag]. " ");
  echo($day . "-". $month1 ."-".$year);
  echo("<br>");
  $day++;
}

at du skal lave en if sætning der tjekker om der er nogen arrangementer den pågældende dag?
Avatar billede dennismp Nybegynder
31. august 2004 - 13:50 #2
Jeg ville nok hente alle rækkerne ind fra databasen (eller dem der er relevante for hele den periode du viser i kalenderen) og gemme dem i et array.. og så lave et loop der viser kalenderen og tjekker om der er arrangementer.

Hvis du gemmer det som:

$aktivitet[måned][day] = data;

sp kan du jo snildt lave et tjek i din løkke.. fx

print "$dato ";
if( isset($aktivitet[$month][$day]) )
  print $aktivitet[$month][$day];
Avatar billede sajbar Nybegynder
31. august 2004 - 13:50 #3
jeg skal vel stadigvæk have en eller anden form for løkke der skal loop'e igennem det resultat jeg får ud for den pågældende mdr...det er det er er mit problem..
Avatar billede sajbar Nybegynder
31. august 2004 - 13:58 #4
dennismp >> ah hvorfor har jeg ikke tænkt på det noget før

jeg leger lige lidt med det og så vender jeg tilbage
Avatar billede dennismp Nybegynder
31. august 2004 - 13:59 #5
sådan her, måske..

$start = mktime(0,0,0,1,1,2004);
$end  = time();

$now = $start;
while($now <= $end ){
  list($d,$m,$y) = explode('-',date('j-n-Y',$now));

  print "$d-$m-$y .. aktivitet etc";
  $now = mktime(0,0,0,$d+1,$m,$y);
}
Avatar billede sajbar Nybegynder
31. august 2004 - 14:07 #6
dennismp >> den giver vel et problem hvis der er mere end en aktivitet på samme dag ?
Avatar billede dennismp Nybegynder
31. august 2004 - 14:14 #7
Næh, $aktivitet[$month][$day] kan jo sagents være et array som du så loop'er igennem for at vise dagens aktiviteter. :)

Din database select ser sådan her ud:

$res = mysql_query("SELECT .. ") ..
while($row = mysql_fetch_assoc($res)) {
  $d = dag fra $row's datofelt
  $m = måned ..
  $aktivitet[$m][$d][] = $row['aktivitet'];

  // hvis du har flere felter
  $aktivitet[$m][$d][] = array('titel' => $row['titel'], 'beskrivelse' => $row... );
}

så i din while-loop

// vis aktivitet
foreach($aktivitet[$m][$d] as $aktivitet) {
  print $aktivtet['titel'];
  ...
}
Avatar billede sajbar Nybegynder
31. august 2004 - 14:28 #8
jeg synes stadigvæk ikke det virker..

jeg poster det jeg har bikset sammen nu..
<?
mysql_connect("localhost", "root", "xmmatprv") or
  die("Could not connect: " . mysql_error());
mysql_select_db("studieportal");

$day=1;
$month=$_GET['month'];
$year=$_GET['year'];
if(empty($month))
{
  $month=date(n);
  $month1=date(m);
}

if(empty($year))
{
  $year =date(Y);
}

$day=01;
$month1=(date("m", mktime(0, 0, 0, $month, $day, $year)));
$totaldays = date("t", mktime(0, 0, 0, $month, 1, $year));

$dage = array("Søndag","Mandag","Tirsdag","Onsdag","Torsdag","Fredag","Lørdag");
$mdr = array("1","Januar","Februar","Marts","April","Maj","Juni","Juli","August","September","Oktober","November","December");

$result = mysql_query("SELECT  id, titel, emnebeskrivelse, sted, DATE_FORMAT(dato, '%d-%m-%Y') as dato, tidspunkt FROM studie_aktivitet where MONTH(dato)='".$month."' order by dato");

$aktivitet=array();
while($res=mysql_fetch_array($result))
{
$dato=$res['dato'];
$emne = $res['titel'];
$aktivitet[$dato] = array('titel' => $emne);
}


?>
<a href="<?echo($phpself);?>?month=<? if($month!=1){echo($month-1); ?>&year=<?echo($year);?>"<?}else {echo(12); ?>&year=<?echo($year-1);?>"<?}?>>forrige</a>
<a href="<?echo($phpself);?>?month=<? if($month!=12){echo($month+1); ?>&year=<?echo($year);?>"<?}else {echo(1); ?>&year=<?echo($year+1);?>"<?}?>>Næste</a>
<br>

<?
print_r($aktivitet);


while($totaldays!=$day)
{

  $ugedag=date("w", mktime(0, 0, 0, $month, $day, $year));
  echo($dage[$ugedag]. " ");
  echo($day . "-". $month1 ."-".$year);
  if( isset($aktivitet[$day . "-". $month1 ."-".$year]) )
  {

    foreach($aktivitet[$day . "-". $month1 ."-".$year] as $aktivitet) {
      print $aktivtet['titel']; 
   
    }
  }
  echo("<br>");
  $day++;
}

?>

http://home.sajbar.dk/studieportal/test.php?month=9&year=2004

kan du se scriptet, der ligger 2 aktiviteter den 1. september..

jeg kan ikke rigtig se hvad jeg gør galt
Avatar billede dennismp Nybegynder
31. august 2004 - 14:48 #9
prøv at rette:
$aktivitet[$dato] = array('titel' => $emne);

til:
$aktivitet[$dato][] = array('titel' => $emne);
Avatar billede sajbar Nybegynder
31. august 2004 - 15:01 #10
okay det hjalp lidt.

men jeg får en fejl ved foreach delen


while($totaldays!=$day)
{

if($dag<=9)
{
$dag="0".$day;
}
else
{
$dag=$day;
}
  $ugedag=date("w", mktime(0, 0, 0, $month, $day, $year));
  echo($dage[$ugedag]. " ");
  echo($dag . "-". $month1 ."-".$year);

    foreach($aktivitet[$dag . "-". $month1 ."-".$year] as $aktivitet) {
      print $aktivtet['titel'];
 
    }

  echo("<br>");
  $day++;
}
Avatar billede dennismp Nybegynder
31. august 2004 - 15:09 #11
foreach($aktivitet[$day . "-". $month1 ."-".$year] as $aktivitet) {

Du skal kalde $aktivitet i "as $aktivitet" for noget andet, for ellers overskriver du jo dit $aktivitet-array.
Avatar billede sajbar Nybegynder
31. august 2004 - 15:15 #12
foreach($aktivitet[$dag . "-". $month1 ."-".$year] as $aktivitet1) {
      print $aktivtet1['titel'];
 
    }
giver Warning: Invalid argument supplied for foreach() in d:\www\studieportal\test.php on line 63
Avatar billede sajbar Nybegynder
31. august 2004 - 15:26 #13
okay jeg har fundet fejlen på den del, men jeg synes ikke at den skriver noget ud...
Avatar billede sajbar Nybegynder
31. august 2004 - 15:32 #14
så virker det, så mangler jeg bare et svar så jeg kan give dig point :)
Avatar billede dennismp Nybegynder
31. august 2004 - 15:32 #15
din date_format() i mysql udtrykket, er sat til at skrive 01 for januar istedet for 1. Kan det ikke være dette der er problemet?

prøv evt med:

DATE_FORMAT(dato, '%e-%c-%Y') ..
Avatar billede dennismp Nybegynder
31. august 2004 - 15:32 #16
Du er hurtig :)
Avatar billede sajbar Nybegynder
31. august 2004 - 15:41 #17
tak for hjælpen, du sparede mig for at skulel ud og invistere i en paryk ;)
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