Zeitrum in einem Kalenderscribt makieren

Zack

cookies vader
Hallo,
ich habe mir das Kalender Tutorial von Patrick Kamin durchgelesen und musst leider feststellen das es vom Code her einfach nur grauenhaft ist. Dennoch ist der Aufbau gut und deshalb habe ich diesen auch gleich selbst in die Tat umgesetzt. Jetzt aber stoße ich leider an eine Grenze die ich nicht durchbrechen kann. Also wie gesagt, habe ich den Kalender ähnlich des Tutorials geschrieben:
PHP:
<?php

include "sql.php";

$monats = array("Januar", "Februar", "M&auml;rz", "April", "Main","Juni", "Juli", "August", "September". "Oktober", "November", "Dezember");
$days = array("Montag", "Dienstag", "Mittwoch", "Donnerstag","Freitag", "Samstag", "Sonntag");

// heutiges Datum bekommen
$heute = getdate();
$monat = $heute[mon];
$jahr = $heute[year];

// Zeiger auf den Anfang des Monats setzten
$start = mktime ( 0, 0, 0, $monat, 1, $jahr );
$erster = getdate($start);
/*
Wochentag 			=	$erster[weekday]
Wochentag als Int	= 	$erster[wday]
Monatstag 			=	$erster[mday]
Monat als Zahl 		= 	$erster[mon]
Monat als String 	= 	$erster[month]
Jahr 				= 	$erster[year]
*/

// Array der Wochentag
$weekdays = array("Sonntag", "Montag", "Dienstag", "Mittwoch", "Donnerstag", "Freitag", "Samstag");

// Zählvariable auf 0 um später die Wochentag hochzählen zu können
$i = 0;

echo "<table border=\"1\" width=\"500\">\n";
echo "<tr>\n" .
		"<td align=\"center\">\n" .
			"<h2>$erster[month]<br/></h2>\n" .
	 	"</td>\n" .
	 "</tr>\n";
echo "<tr>\n" .
		"<td>\n" .
			"<table width=\"100%\" border=\"1\">\n" .
				"<tr>\n";
						foreach ($weekdays as $weekday) // Wochentage einschreiben
						{
							echo "<td>$weekday</td>";
						}
			echo "</tr>" .
				 "<tr>";
						for($i; $i< (6*7); $i++) // Tablle aufbauen
							{
								if ((($i)%7)== 0) // wenn i ein Teiler von 7 ist dann wird eine neue Zeile angefangen
								{
									echo "</tr>\n<tr>\n";
								}
								if ($i < $erster[wday] || $erster[mon] != $monat) // wenn der Tag größer ist als die Zählvariable oder
																				  // der Monat des "Zeigers" ungelcih des anzuzeigenden Monats
								{
									echo "<td><br /></td>\n";
								}else{
									echo "<td>$erster[mday]</td>\n";
									$nextday = $erster[mday]+1;
									$start = mktime ( 0, 0, 0, $monat, $nextday, $jahr );
									$erster = getdate($start);
								}
							}
	echo 		"</tr>\n" .
			"</table>\n" .
		"</td>\n" .
	 "</tr>\n";


echo "</table>\n"
?>

So weit, so gut. Jetzt zu meinem Problem:
Ich habe in einer Datenbank ein Anfangsdatum und ein Enddatum. Den Zeitraum vom Anfang zum Ende bekomm ich auch ganz leicht raus mit:
PHP:
$sql = "SELECT (UNIX_TIMESTAMP(end) - UNIX_TIMESTAMP(begin)) AS zeitraum FROM kalender";
$result = mysql_query($sql) OR die(mysql_error());
$row = mysql_fetch_assoc($result);
$i =((($row['zeitraum']/60))/60)/24;
Nun möchte ich diesen Zeitraum jetzt in dem Kalender makieren, aber wie? Ein einzelner Tag is ja nicht das Problem, aber sobald der konkrete Zeitpunkt fehlt komm ich nicht weiter. Jeden Tag einzeln speichern geht auch nicht, da sich mehrere Zeiträume durchaus überschreiben können.

Schonmal danke im vorraus, Ra7or.
 
keiner ne idee? -_

hab nochn paar bugs gefixt

PHP:
				// das Jahr bekommen

				if (isset($_GET['jahr']) && !empty($_GET['jahr']))
				{
				$jahr = $_GET['jahr'];
				}else{
				$heute = getdate();
				$jahr = $heute['year'];
				}

				echo "<h1><a href=\"index.php?section=belegung&jahr=".($jahr-1)."\">«« </a><a name=\"anfang\">".$jahr."</a><a href=\"index.php?section=belegung&jahr=".($jahr+1)."\"> »»</a></h1>\n";

				foreach ($smonate as $smonat)
				{
					echo "<a href=\"#$smonat\">$smonat</a> \n";
				}


				foreach ($monate as $monat)
				{
				// Zeiger auf den Anfang des Monats setzten
				$start = mktime ( 0, 0, 0, $monat, 1, $jahr );
				$erster = getdate($start);
				/*
				Wochentag 			=	$erster['weekday']
				Wochentag als Int	= 	$erster['wday']
				Monatstag 			=	$erster['mday']
				Monat als Zahl 		= 	$erster['mon']
				Monat als String 	= 	$erster['month']
				Jahr 				= 	$erster['year']
				*/

				// Zählvariable auf 0 um später die Wochentag hochzählen zu können
				$i = 0;


				echo "<table border=\"0\" width=\"100%\">\n";
				echo "<tr>\n" .
						"<td align=\"center\">\n" .
							"<h2><a name=\"".$erster['month']."\">".$erster['month']."</a><br/></h2>\n" .
					 	"</td>\n" .
					 "</tr>\n";
				echo "<tr>\n" .
						"<td>\n" .
							"<table width=\"100%\" border=\"1\">\n" .
								"<tr>\n";
										foreach ($weekdays as $weekday) // Wochentage einschreiben
										{
											echo "<td>$weekday</td>";
										}
							echo "</tr>" .
								 "<tr>";
										for($i; $i< (6*7); $i++) // Tablle aufbauen
											{
												if ((($i)%7)== 0) // wenn i ein Teiler von 7 ist dann wird eine neue Zeile angefangen
												{
													echo "</tr>\n<tr>\n";
												}
												if ($i < $erster['wday'] || $erster['mon'] != $monat) // wenn der Tag größer ist als die Zählvariable oder
																								  // der Monat des "Zeigers" ungelcih des anzuzeigenden Monats
												{
													echo "<td><br /></td>\n";
												}else{
														$sql = "SELECT * FROM belegungen WHERE begin = '".$erster['year']."-".$erster['mon']."-".$erster['mday']."' OR
															 								   end =  '".$erster['year']."-".$erster['mon']."-".$erster['mday']."'";
														$result = mysql_query($sql) OR die(mysql_error());
														if( mysql_num_rows($result) == 1 ){
											        		$row = mysql_fetch_assoc($result);
											        		echo"<td style=\"background-color:red\">".$erster['mday']."</td>";
											    		}else{
															echo"<td>".$erster['mday']."</td>\n";
														}

													$nextday = $erster['mday']+1;
													$start = mktime ( 0, 0, 0, $monat, $nextday, $jahr );
													$erster = getdate($start);
												}
											}
					echo 		"</tr>\n" .
							"</table>\n" .
						"</td>\n" .
					 "</tr>\n" .
					"</table>\n";
				}
				echo "<a href=\"#anfang\">Zurück an den Anfang</a>";
 
Es scheint als ob das Thema auf allgemeine Ahnungslosigkeit trifft. Ich hab mal wieder einen kumpel genervt, welcher der dann auch die Idee hatte.

Einfach die Daten aus der Datenbank lesen in einen Timtestamp wandeln und den Timestamp so vergleichen ob dieser dazwischen liegt oder nicht.
PHP:
                        if ($i < $erster['wday'] || $erster['mon'] != $monat) // wenn der Tag größer ist als die Zählvariable oder
                                                  // der Monat des "Zeigers" ungelcih des anzuzeigenden Monats
                        {
                          echo "<td>&nbsp;</td>\n";
                        }else{
                        	$gefunden =0;
                        	$sql ="SELECT * FROM belegungen";
                            $result = mysql_query($sql) OR die(mysql_error());
                            while($row = mysql_fetch_assoc($result))
							{
								$begin = strtotime($row['begin']);
								$end = strtotime($row['end']);
                                if (($start >= $begin)AND($start <= $end))
								{
									$gefunden=1;
								}
                              }
                            if($gefunden== 1){
                                  echo"<td style=\"background-color:red\">".$erster['mday']."</td>";
                              }else{
                              echo"<td>".$erster['mday']."</td>\n";
                            }

                          $nextday = $erster['mday']+1;
                          $start = mktime ( 0, 0, 0, $monat, $nextday, $jahr );
                          $erster = getdate($start);

                        }
 
Zurück