Hilfe mit php-Kalender und Datenbank

Kalma

Erfahrenes Mitglied
Hey,

ich habe mir ein Kleines Kalenderscript zusammengebastelt, was den aktuellen Tag, das Wochenende und aus der DB ausgelesene Termine einfärbt.
Leider markiert er aber immer nur einen Termin.

Was muss ich machen?

PHP:
<?php
	$zeit				= time();
	$jahr				= date("Y", $zeit); // ermitteln des Jahres
	$mon				= date("n", $zeit); // ermitteln des Monats
	$akt				= date("d", $zeit); // ermitteln des aktuellen Tages
	$last				= date("t", mktime(0, 0, 0, $mon, 1, $jahr)); // ermitteln des letzten Tages des Monats

	$gig				= mysql_query("SELECT * FROM gigs WHERE `monat`=$mon ORDER BY id DESC");
	$g					= mysql_fetch_array($gig);
	
	// Arrays für Monate und Wochentage
	$mo = Array("", 
							"Januar", 
							"Februar", 
							"März",
							"April", 
							"Mai", 
							"Juni", 
							"Juli", 
							"August", 
							"September", 
							"Oktober", 
							"November", 
							"Dezember");
							
	$wd = Array("So", 
							"Mo", 
							"Di", 
							"Mi",
							"Do", 
							"Fr", 
							"Sa", 
							"So");

	// ermitteln des Wochentages für den ersten Tages des Monats
	$first_wd	= date("w", mktime(0, 0, 0, $mon, 1, $jahr));
	
	if ($first_wd == 0) $first_wd=7; // Korrektur für den Sonntag

	//erstellung der tabelle
	echo "<p />";
	echo "<table border=\"0\" class=\"news_h5\">";
		echo "<tr>";
			
			//aktuellen monats-namen ausgeben
			echo "<td align=\"center\" colspan=\"7\"><u><b>".$mo[$mon]." $jahr</b></u></td>";
		echo "</tr>";
		
		echo "<tr>";
			echo "<td><b>Mo</b></td>";
			echo "<td><b>Di</b></td>";
			echo "<td><b>Mi</b></td>";
			echo "<td><b>Do</b></td>";
			echo "<td><b>Fr</b></td>";
			echo "<td><b>Sa</b></td>";
			echo "<td><b>So</b></td>";
		echo "</tr>";
		
		
		// Leere Zellen ausgeben, bis zum ersten Tag des Monats
		echo "<tr>";
			for ($j = 1; $j < $first_wd; $j++) 
				{ 
					echo "<td> "; 
				}
			
			for ($i=1; $i<=$last; $i++)
				{
					
					// ermitteln des Wochentages
					$x = $wd[date("w", mktime(0,0,0,$mon,$i,$jahr))];
					
					// definition des Standard-Style
					$bo="d0";
					$link	= $i;
					
					// Einfärbung des Sonntages
					if (($x == "So") OR ($x == "Sa"))
						{ 
							$bo = "gig_legend_sun";
							$link	= $i;
						}
						
				  // Einfärbung des aktuellen Tages
					if ($i == $akt) 
						{ 
							$bo = "gig_legend_day"; 
							$link	= $i;
						}
						
					//einfärbung des monats
					//gig tag rausholen
					$gig_day = $g['tag'];
					
					if ($i == $gig_day)
						{
							$bo = "gig_legend_gig";
							$link	= "<a href=\"?section=giglesen&id=".$g['id']."\" class=\"kalender_link\" title=\"Details: ".$g['titel']."\">$i</a>";
						}
						
			echo "<td class=\"".$bo."\" align=\"center\">$link</td>";
			
				if ($x == "So") 
					echo "</tr>\n<tr>"; // Am Sonntag endet die jeweilige Zeile
				}
		echo "</tr></table>";
		
		echo "<p />";
?>

Die werte in meiner DB sehen so aus:
Beispiel:
Tag: 03
Monat: 11
Jahr: 2006

ICh muss doch die Werte inner Schleife ausgeben lassen oder? Also die Termine.

Aber wie?

David
 
Das lässt sich leicht erklären. der Befehl mysql_fetch_array() liest eine Zeile aus der Datenbank in ein Array ein.
Somit hast auch immer nur das erste Datum. Du müsstest das quasi alles nur in eine while Schleife verpacken und fertig.

PHP:
<?php
    $zeit                = time();
    $jahr                = date("Y", $zeit); // ermitteln des Jahres
    $mon                = date("n", $zeit); // ermitteln des Monats
    $akt                = date("d", $zeit); // ermitteln des aktuellen Tages
    $last                = date("t", mktime(0, 0, 0, $mon, 1, $jahr)); // ermitteln des letzten Tages des Monats

    // Arrays für Monate und Wochentage
    $mo = Array("", 
                            "Januar", 
                            "Februar", 
                            "März",
                            "April", 
                            "Mai", 
                            "Juni", 
                            "Juli", 
                            "August", 
                            "September", 
                            "Oktober", 
                            "November", 
                            "Dezember");
                            
    $wd = Array("So", 
                            "Mo", 
                            "Di", 
                            "Mi",
                            "Do", 
                            "Fr", 
                            "Sa", 
                            "So");

    // ermitteln des Wochentages für den ersten Tages des Monats
    $first_wd    = date("w", mktime(0, 0, 0, $mon, 1, $jahr));
    
    if ($first_wd == 0) $first_wd=7; // Korrektur für den Sonntag

    //erstellung der tabelle
    echo "<p />";
    echo "<table border=\"0\" class=\"news_h5\">";
        echo "<tr>";
            
            //aktuellen monats-namen ausgeben
            echo "<td align=\"center\" colspan=\"7\"><u><b>".$mo[$mon]." $jahr</b></u></td>";
        echo "</tr>";
        
        echo "<tr>";
            echo "<td><b>Mo</b></td>";
            echo "<td><b>Di</b></td>";
            echo "<td><b>Mi</b></td>";
            echo "<td><b>Do</b></td>";
            echo "<td><b>Fr</b></td>";
            echo "<td><b>Sa</b></td>";
            echo "<td><b>So</b></td>";
        echo "</tr>";
        
        
        // Leere Zellen ausgeben, bis zum ersten Tag des Monats
        echo "<tr>";
            for ($j = 1; $j < $first_wd; $j++) 
                { 
                    echo "<td> "; 
                }
                
            $gig  = mysql_query("SELECT * FROM gigs WHERE `monat`=$mon ORDER BY id DESC");
            while($g = mysql_fetch_array($gig) ) {
                for ($i=1; $i<=$last; $i++)
                    {
                        // ermitteln des Wochentages
                        $x = $wd[date("w", mktime(0,0,0,$mon,$i,$jahr))];
                        
                        // definition des Standard-Style
                        $bo="d0";
                        $link    = $i;
                        
                        // Einfärbung des Sonntages
                        if (($x == "So") OR ($x == "Sa"))
                            { 
                                $bo = "gig_legend_sun";
                                $link    = $i;
                            }
                            
                      // Einfärbung des aktuellen Tages
                        if ($i == $akt) 
                            { 
                                $bo = "gig_legend_day"; 
                                $link    = $i;
                            }
                            
                        //einfärbung des monats
                        //gig tag rausholen
                        $gig_day = $g['tag'];
                        
                        if ($i == $gig_day)
                            {
                                $bo = "gig_legend_gig";
                                $link    = "<a href=\"?section=giglesen&id=".$g['id']."\" class=\"kalender_link\" title=\"Details: ".$g['titel']."\">$i</a>";
                            }
                            
                echo "<td class=\"".$bo."\" align=\"center\">$link</td>";
                
                    if ($x == "So") 
                        echo "</tr>\n<tr>"; // Am Sonntag endet die jeweilige Zeile
                    }
            }
        echo "</tr></table>";
        
        echo "<p />";
?>

Sollte so klappen hoffe ich.
 
Hey,

jetzt wiederholt er den Kalender aber 3 mal... Halt so oft, nachdem wie viele einträge inner db sind
 
Also waehrend Du den Kalender ausgibst weisst Du ja fuer jeden Tag den Du gerade ausgibst das Datum, entsprechend kannst Du ja in der Datenbank nachsehen ob fuer eben diesen Tag etwas eingetragen ist und dies dann eben ausgeben.
 
Zurück