Avatar billede kage_mand Nybegynder
20. august 2009 - 11:40 Der er 10 kommentarer og
1 løsning

Problem i Kalender

Hej

http://img256.imageshack.us/img256/3126/snapshot1vit.th.png

Har et problem med at en eller to måneder om året sker denne fejl.
http://img8.imageshack.us/img8/9260/snapshot2o.png

dette er koden:

echo '<script language="JavaScript">
<!--

function win1(url) {
   
    window.open(url,"Calendar","menubar=no,width=460,height=360,toolbar=no");
}
//-->
</script>
';

  $monthNames = Array("Jan", "Feb", "Mar", "Apr", "Maj", "Jun", "Jul", "Aug", "Sep", "Okt", "Nov", "Dec");
  if (!isset($_POST["month"])) $_POST["month"] = date("n");
  if (!isset($_POST["year"])) $_POST["year"] = date("Y");
 
  $cMonth = $_POST["month"];
  $cYear = $_POST["year"];
 
  $prev_year = $cYear;
  $next_year = $cYear;
 
  $prev_month = $cMonth-1;
  $next_month = $cMonth+1;

  if ($prev_month == 0 )
  {
  $prev_month = 12;
  $prev_year = $cYear - 1;
  }
  if ($next_month == 13 )
  {
    $next_month = 1;
    $next_year = $cYear + 1;
  }
  $timestamp = mktime(0,0,0,$cMonth,1,$cYear);
  $maxday = date("t",$timestamp);
  $thismonth = getdate ($timestamp);
  $startday = $thismonth['wday'];
  echo '<div id="calendar">
<table width="200px">
<tr>

<td colspan="7" align="center" class="month">
<form action="'.$_SERVER['REQUEST_URI'].'" method="post">
    <input type="hidden" name="month" value="'.$prev_month.'">
    <input type="hidden" name="year" value="'.$prev_year.'">
    <input class="submit" type="submit" value="<<">
</form><strong>
'.$monthNames[$cMonth-1].' '.$cYear.'
</strong> <form action="'.$_SERVER['REQUEST_URI'].'" method="post">
    <input type="hidden" name="month" value="'.$next_month.'">
    <input type="hidden" name="year" value="'.$next_year.'">
    <input class="submit" type="submit" value=">>">
</form>
</td>

</tr>
<tr  align="center" class="day">
  <td>M</td><td>T</td><td>O</td><td>T</td><td>F</td><td>L</td><td class="sunday">S</td>
</tr>';
$dates = array();
$the_month = $cMonth.'/'.$cYear;
$query = mysql_query("SELECT * FROM Calendar WHERE month='$the_month'");
while($row = mysql_fetch_assoc($query)) //Lav en while der kører alle rækker igennem
{
  $dates[$row['date']][$row['id']]['month'] = $row['month'];
  $dates[$row['date']][$row['id']]['date'] = $row['date'];
  $dates[$row['date']][$row['id']]['time'] = $row['time'];
  $dates[$row['date']][$row['id']]['users'] = $row['users'];
  $dates[$row['date']][$row['id']]['groups'] = $row['groups'];
  $dates[$row['date']][$row['id']]['emne'] = $row['emne'];
  $dates[$row['date']][$row['id']]['indhold'] = $row['indhold'];
}
for ($i=0; $i<($maxday+$startday); $i++) {
if(($i % 7) == 1 ){ echo "<tr>\n";}
if($i < $startday){ echo "<td></td>\n";
}else{ echo "<td align='center' valign='middle' height='20px'>";
if(isset($dates[($i - $startday + 1)]))
{   
  echo "<a href=\"java script:win1('calendar.php?date=".($i - $startday + 1)."&month=".$the_month."')\" onMouseOver=\"self.status='Open A Window'; return true;\">".($i - $startday + 1)."</a>";
}else{
  echo ($i - $startday + 1);
}
echo "</td>\n";}
if(($i % 7) == 7 ) echo "</tr>\n";
}
echo '</table>
</div>';

håber der er nogen der kan se problemet
Avatar billede w13 Novice
20. august 2009 - 12:39 #1
Jeg forstår ikke helt, hvad fejlen er på billedet. Kan du ikke uddybe det lidt?
Avatar billede kage_mand Nybegynder
20. august 2009 - 13:09 #2
Problemet er dette at når den 1. er en søndag står den som en mandag.
Avatar billede sw_red_6 Nybegynder
20. august 2009 - 13:51 #3
Jeg vil tro det er fordi retur-værdien fra getdate har ugedage startende med søndag..
http://dk2.php.net/manual/en/function.getdate.php
Avatar billede kage_mand Nybegynder
20. august 2009 - 14:12 #4
Hvor skal jeg så løse problem.
Problemet er der kun nå den 1. er en søndag ellers virker det som det skal.
Avatar billede sw_red_6 Nybegynder
20. august 2009 - 14:43 #5
I din for-løkke går du ind og tjekker på $startday, hvilket vil være 0 på en søndag..
Du kunne sætte det her ind i din else...

if($startday == 0 && $sDay == 0){
  for($x=0;$x<6;$x++) echo "<td></td>\n";
}
Avatar billede kage_mand Nybegynder
20. august 2009 - 14:54 #6
Ved ikke helt hvor du have jeg skal sætte det ind.
Avatar billede sw_red_6 Nybegynder
20. august 2009 - 15:00 #7
if($i < $startday){ echo "<td></td>\n";
}else{
>> HER <<
echo "<td align='center' valign='middle' height='20px'>";
if(isset($dates[($i - $startday + 1)]))
Avatar billede kage_mand Nybegynder
20. august 2009 - 15:07 #8
det giver dette resultat http://img210.imageshack.us/img210/8166/snapshot3m.png

Lægger lige kilde koden på før ændringen:

<link rel="stylesheet" type="text/css" href="http://127.0.0.1/style.css"><script language="JavaScript">
<!--

function win1(url) {
   
    window.open(url,"Calendar","menubar=no,width=460,height=360,toolbar=no");
}
//-->
</script>
<div id="calendar">
<table width="200px">
<tr>

<td colspan="7" align="center" class="month">
<form action="/" method="post">
    <input type="hidden" name="month" value="10">
    <input type="hidden" name="year" value="2009">
    <input class="submit" type="submit" value="<<">
</form><strong>
Nov 2009
</strong> <form action="/" method="post">

    <input type="hidden" name="month" value="12">
    <input type="hidden" name="year" value="2009">
    <input class="submit" type="submit" value=">>">
</form>
</td>

</tr>
<tr  align="center" class="day">
  <td>M</td><td>T</td><td>O</td><td>T</td><td>F</td><td>L</td><td class="sunday">S</td>

</tr><td align='center' valign='middle' height='20px'>1</td>
<tr>
<td align='center' valign='middle' height='20px'>2</td>
<td align='center' valign='middle' height='20px'>3</td>
<td align='center' valign='middle' height='20px'>4</td>
<td align='center' valign='middle' height='20px'>5</td>
<td align='center' valign='middle' height='20px'>6</td>
<td align='center' valign='middle' height='20px'>7</td>
<td align='center' valign='middle' height='20px'>8</td>

<tr>
<td align='center' valign='middle' height='20px'>9</td>
<td align='center' valign='middle' height='20px'>10</td>
<td align='center' valign='middle' height='20px'>11</td>
<td align='center' valign='middle' height='20px'>12</td>
<td align='center' valign='middle' height='20px'>13</td>
<td align='center' valign='middle' height='20px'>14</td>
<td align='center' valign='middle' height='20px'>15</td>
<tr>
<td align='center' valign='middle' height='20px'>16</td>

<td align='center' valign='middle' height='20px'>17</td>
<td align='center' valign='middle' height='20px'>18</td>
<td align='center' valign='middle' height='20px'>19</td>
<td align='center' valign='middle' height='20px'>20</td>
<td align='center' valign='middle' height='20px'>21</td>
<td align='center' valign='middle' height='20px'>22</td>
<tr>
<td align='center' valign='middle' height='20px'>23</td>
<td align='center' valign='middle' height='20px'>24</td>

<td align='center' valign='middle' height='20px'>25</td>
<td align='center' valign='middle' height='20px'>26</td>
<td align='center' valign='middle' height='20px'>27</td>
<td align='center' valign='middle' height='20px'>28</td>
<td align='center' valign='middle' height='20px'>29</td>
<tr>
<td align='center' valign='middle' height='20px'>30</td>
</table>
</div>
Avatar billede sw_red_6 Nybegynder
20. august 2009 - 16:12 #9
du skal selvfølgelig lige have lidt mere med..
brug den har i stedet for:
if($startday == 0 && $sDay == 0){
  $sDay=1;
  for($x=0;$x<6;$x++) echo "<td></td>\n";
}

og så skal du have det her tilføjet
$sDay=0;
lige før den har for-løkke
for ($i=0; $i<($maxday+$startday); $i++) {
Avatar billede kage_mand Nybegynder
20. august 2009 - 16:20 #10
Tak for hjælpen

Smid et svar
Avatar billede sw_red_6 Nybegynder
20. august 2009 - 16:34 #11
var så lidt..
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