Kalender mit Sql

Snowowl

Erfahrenes Mitglied
Hallo,
ich habe ein Kalender Script. Soweit alles OK, aber wie mache ich es, dass ich dort statt dem datum ein link habe, wo sich dann ein popup öffnet?
Hier erstmal das Script:
PHP:
<?php
$dbh=mysql_connect("localhost","xxx","xxx"); 
mysql_select_db("xxx",$dbh);
if(!isset($_REQUEST["monat"])) { $_REQUEST["monat"]=date("n"); };
$monat=$_REQUEST["monat"];
$jahr=date("Y");
$erster=date("w", mktime(0,0,0,$monat,1,$jahr));
$insgesamt=date("t");
$heute=date("d");
$monate=array("","Januar","Februar","M&auml;rz","April","Mai","Juni","Juli","August", 

"September","Oktober","November","Dezember");
$vor=$monat-1;
$nach=$monat+1;
$gesamt="$monate[$monat].$_REQUEST[monat]";
$query = mysql_query("SELECT * FROM termine WHERE monat='$gesamt'");
while($data = mysql_fetch_array($query)) {
$tag=$data[tag];
}

$test=array("", "1" ,"2", "3", "4", "5", "6", "7");

echo"
<table>
<tr>
<td width=100></td>
<td width=100><b><center>2005</center></b></td>
<td width=100></td>
</tr>
<tr>
<td><b><p align=left><a href=$_PHPSELF?monat=$vor>$monate[$vor]</a></b></td>
<td><b><center><-$monate[$monat]-></center></b></td>
<td><b><p align=right><a href=$_PHPSELF?monat=$nach>$monate[$nach]</a></b></td>
</tr>
</table>
";

if($erster==0){$erster=7;}
echo "<table border=\"0\" style=\"font-size:8pt; font-family:Verdana\">\n";
echo "<th colspan=\"7\" align=\"center\" style=\"font-size:12pt; font-family:Arial; 

color:#ff9900;\">".$monate[$monat]." ".$jahr."</th>";
echo "<tr>\n<td style=\"color:#666666\"><b>Mo</b></td><td style=\"color:#666666\"><b>Di</b></td>";
echo "<td style=\"color:#666666\"><b>Mi</b></td><td style=\"color:#666666\"><b>Do</b></td>";
echo "<td style=\"color:#666666\"><b>Fr</b></td><td style=\"color:#0000cc\"><b>Sa</b></td>";
echo "<td style=\"color:#cc0000\"><b>So</b></td></tr>\n";
echo "<tr>\n";
$i=1;
while($i<$erster){echo "<td>&nbsp;</td>"; $i++;}
$i=1;
while($i<=$insgesamt)
{
$rest=($i+$erster-1)%7;
if($i==$heute){echo "<td style=\"font-size:8pt; font-family:Verdana; background:#ff0000;\" 

align=center>";}

elseif($i==$test[$tag]) {echo "<td style=\"background:#000000;\" align=center>";}

else{echo "<td style=\"font-size:8pt; font-family:Verdana\" align=center>";}
if($i==$heute){echo "<span style=\"color:#ffffff;\">$i</span>";}
else if($rest==6){echo "<span style=\"color:#0000cc\">$i</span>";}
else if($rest==0){echo "<span style=\"color:#cc0000\">$i</span>";}
else{echo "$i";}
echo "</td>\n";
if($rest==0){echo "</tr>\n<tr>\n";}
$i++;
}
echo "</tr>\n";
echo "</table>\n";

echo"
<form method=post action=$_PHPSELF>
<table cellpadding=0 cellspacing=0 width=300 border=0>
<tr>
<td>Gehe zu Monat...
<SELECT NAME=monat selected=$monat>
<OPTION value=1>Januar</option>
<OPTION value=2>Februar</option>
<OPTION value=3>März</option>
<OPTION value=4>April</option>
<OPTION value=5>Mai</option>
<OPTION value=6>Juni</option>
<OPTION value=7>Juli</option>
<OPTION value=8>August</option>
<OPTION value=9>September</option>
<OPTION value=10>Oktober</option>
<OPTION value=11>November</option>
<OPTION value=12>Dezember</option>
</select>
<input type=submit value='Und los!'></td>
</tr>
</table>
</form>
";
?>

Die Online Ansicht

Das rot makierte ist der aktuelle Tag, dass schwarze ist das, was aus der sql_db abgerufen wurde. Das Problem ist, es wird immer nur einer angezeigt.
Bitte helft mir ;)
Bis dann,
Snowowl
 
Also das problem ist erstmal das hier:

PHP:
while($data = mysql_fetch_array($query)) {
$tag=$data[tag];
}

Es werden zwar immer alle Datensätze aus der Datenbank gelesen, aber eben immer nur der letzte in $tag gespeichert. Entweder du speicherst erstmal alle datenbankeinträge in einem array und benutzt dieses array dann weiter, oder du lässt dir was ganz neues einfallen.
Was für Spalten hast du eigentlich in deiner Datenbank? Die Spalte "tag" speichert doch bestimmt nur zahlen von 1-7 oder? hast du dann auch noch irgendwie ne woche oder so gespeichert?

Ah ich hab nochmal den Code durchgeschaut und denke nun, dass du in "Tag" den Tag im Monat speicherst. Dann wäre die Methode mit dem Array keine schlecht. Hier mal ein paar Auszüge, wie ich das machen würde:

vorher:
PHP:
$query = mysql_query("SELECT * FROM termine WHERE monat='$gesamt'");
while($data = mysql_fetch_array($query)) {
	$tag=$data[tag];
}
nachher:
PHP:
$query = mysql_query("SELECT * FROM termine WHERE monat='$gesamt' ORDER BY `tag` ASC");
$tag = array();
while($data = mysql_fetch_array($query)) {
	$tag[]=$data['tag'];
}

Und nun nochn Teil.

Vorher:
PHP:
	elseif($i==$test[$tag]) {
		echo "<td style=\"background:#000000;\" align=center>";
	}
nachher:
PHP:
	elseif($i==$tag[0]) {
		$abfall = array_shift($tag);
		echo "<td style=\"background:#000000;\" align=center>";
	}


Hab es zwar nicht probiert, aber es sollte im normalen Fall funktionieren ;)

Wichtig daran ist nur, dass du deine Daten aus der DB schon nach Tagen sortierst, so dass im 1. Element des Arrays immer genau der Termin steht, der als nächstes kommt. Was mir noch aufgefallen ist, was ich aber deiner weiteren betrachtung überlasse. Wenn es am heutigen Tag ein Termin gäbe, dann würde der natürlich nicht angezeigt werden, weil die if-verzweigung dies nicht gebacken bekommt :)
 
Zuletzt bearbeitet:
WOW,
danke es klappt ;)
bloß 2 Sachen hääte ich da noch.
Wenn man den Kalender anzeigt, fehlt der tag 5? Der is in SQL auch eingetragen, komisch.
Und noch das das Script irgendwie nur bei Oktoebr geht? Bei den ganzen anderen monaten geht es nicht? Warum nicht?
Vielen Dank,
Snowowl
 
Zurück