MySQL-Abfrage in Kalender einbinden.

Biber90

Mitglied
Hallo!

Ich beziehe mich auf dieses Tutorial hier:

http://www.tutorials.de/forum/php-codeschnipsel/227051-kalender-klasse.html


PHP:
while($tag <= date("t",mktime(0,0,0,$Monat,1,$Jahr))){
           if($i%7 == 0){
             // Wenn der Tag Sonntag ist $i = 7 , $i = 14 , $i = 21 ...
                $this->KGrid .= "<td align='right'
                                     width='10'
                                     height='10'
                                     bgcolor='".
                                         $this->AktuellerTag($tag,$Monat,$Jahr)
                                     ."'style='padding:0px;
                                               border:1px solid;
                                               font-size:8pt;
                                               color:".$this->FontColorTD."'>".
                                         $tag
                                     ."</td></tr>";
                $i++;
                $tag++;
            }else{
              // von Montag bis Samstag durchlaufen und Tage einzeichen
              $this->KGrid .= "<td align='right'
                                   width='10'
                                   height='10'
                                   bgcolor='".
                                        $this->AktuellerTag($tag,$Monat,$Jahr)
                                   ."'style='padding:0px;
                                             border:1px solid;
                                             font-size:8pt;
                                             color:".$this->FontColorTD."'>".
                                        $tag
                                   ."</td>";
              $i++;
              $tag++;
            }
        }

Diese Stelle aus der Klasse gibt später die Tage des Monats formatiert aus.
Ich kriege es aber leider nicht hin, hier noch eine Datenbank-Abfrage mit einzubauen.
Die Idee ist, dass ein Termin aus der Datenbank geholt wird. (z.B. 30.08. --> Zahnarzt) und dieser im Kalenderfeld 30.08. ausgegeben wird und sonst nirgendwo.

Ich weiß nicht, ob es mit dieser Klasse überhaupt möglich ist, da man dafür immer die while-schleife des mysql-querys noch mit laufen lassen muss und ab dann läuft es nicht mehr.....:(

hat vielleicht jemand eine idee, wie das funktionieren könnte?
oder einen vorschlag wie ich es anders schreiben kann?

Jede Hilfe nehme ich dankend an :)

mfg

Biber90
 
Ich weiß nicht, ob es mit dieser Klasse überhaupt möglich ist, da man dafür immer die while-schleife des mysql-querys noch mit laufen lassen muss und ab dann läuft es nicht mehr.....

Selbstverständlich kannst du innerhalb der while-Schleife noch einen mysql_query() absetzen, der einen Select auf eine Termin-Tabelle ausführt. Genauso arbeiten doch die anderen Termin-Kalender-Applikationen.

Pseudo-Code:
Code:
$tag = 1
Solange $tag nicht $Ende_des_Monat
{
    $result = mysql_query("select * from termine where datum = $tag.$monat.$jahr");
    schreibe_tag($tag, $monat, $jahr);
    Solange noch $datensatz in $result
    {
         schreibe_termin ( $datensatz );
    }
    inkrementiere $tag;
}

Du fügst also den SQL-Query direkt bei Beginn der while-Schleife mit ein. Die Ergebnisse gibst du innerhalb der Tabellen-Zelle (td) mit aus.
 
Hallo & danke für die Antwort =)

Leider ist mir das noch nicht so ganz klar geworden.
Ich verstehe natürlich, was du mir sagen willst ^^
aber des pseudecode war mir wohl etwas zu pseudo ^^

Müsste ich den Select-Befehl (Select alle Termin aus dem angezeigten Monat) nicht noch irgendwie von dem $i abhänging machen
sowas wie

PHP:
if ($i == $result[tag_des_termins])

dann käme ja erst ganz oben die for-schleife mit dem $i,
dann die while-schleife mit $tag nicht $ende des monats
dann die if-abfrage mit ($i / 7 == 0) und die mit ($i == $result[tag_des_termins])
und dann ja noch die while-schleife vom query.

oder denke ich zu kompliziert?
 
also ich hab das jetzt fast hinbekommen.
mit den 4-if-schleifen werden die Termine angezeigt allerdings hat mein Monat jetzt 33 tage ^^ kp warum ^^

PHP:
     while($tag <= date("t",mktime(0,0,0,$Monat,1,$Jahr))){


   $query = mysql_query("SELECT * FROM termine WHERE monat = 'August'");
while($row = mysql_fetch_array($query))
{

           if($i%7 == 0 && $i != $row[tag]){
          
                $this->KGrid .= "<td align='right'
                                 width='93'
                                     height='45'
									  onmouseover='this.style.border = \"1px solid red\";' 
							 onmouseout='this.style.border=\"1px solid ".
                                        $this->AktuellerTag($tag,$Monat,$Jahr)."\";' 
                                     style='padding:2px;
                                             border:1px solid ".
                                        $this->AktuellerTag($tag,$Monat,$Jahr).";
                                             font-size:10pt;
                                             color:".$this->FontColorTD."'>s".
                                        $tag
                                   ."</td></tr>";
       
			
            }
			
           if($i%7 == 0 && $i == $row[tag]){
          
                $this->KGrid .= "<td align='right'
                                 width='93'
                                     height='45'
									  onmouseover='this.style.border = \"1px solid red\";' 
							 onmouseout='this.style.border=\"1px solid ".
                                        $this->AktuellerTag($tag,$Monat,$Jahr)."\";' 
                                     style='padding:2px;
                                             border:1px solid ".
                                        $this->AktuellerTag($tag,$Monat,$Jahr).";
                                             font-size:10pt;
                                             color:".$this->FontColorTD."'>s".
                                        $tag
                                   ."".$row[termin]."</td></tr>";
       
			
            }
			if($i%7 !=0 && $i != $row[tag]){
           
              $this->KGrid .= "<td align='right'
                                     width='93'
                                   height='45'
                                   onmouseover='this.style.border = \"1px solid red\";' 
							 onmouseout='this.style.border=\"1px solid ".
                                        $this->AktuellerTag($tag,$Monat,$Jahr)."\";' 
								   style='padding:2px;
                                             border:1px solid ".
                                        $this->AktuellerTag($tag,$Monat,$Jahr).";
                                             font-size:10pt;
                                             color:".$this->FontColorTD."'>".
                                        $tag
                                   ."</td>"; 
											 
            
            }
			if($i%7 !=0 && $i == $row[tag]){
           
              $this->KGrid .= "<td align='right'
                                     width='93'
                                   height='45'
                                   onmouseover='this.style.border = \"1px solid red\";' 
							 onmouseout='this.style.border=\"1px solid ".
                                        $this->AktuellerTag($tag,$Monat,$Jahr)."\";' 
								   style='padding:2px;
                                             border:1px solid ".
                                        $this->AktuellerTag($tag,$Monat,$Jahr).";
                                             font-size:10pt;
                                             color:".$this->FontColorTD."'>".
                                        $tag
                                   ."".$row[termin]."</td>"; 
											 
            
            }
			

		  $i++;
              $tag++;
			
        } }

Jetzt muss man nur noch drauf achten, dass $i nicht zwangsläufig gleich ist mit dem Kalendertag, da $i von oben links anfängt zu zählen.
oben-links ist immer Montag....fängt der Monat aber wie im jetzigen August mit Samstag an dann "verzählt" sich $i um 5 Tage, dass muss man halt berücksichtigen.

Außerdem zeigt er nur einen Termin an, auch wenn an einem Tag 2 Termine definiert sind.
Der Monat bekommt auch immer mehr Tage umso mehr Termine ich in die Datenbank eintrage......
 
Zuletzt bearbeitet:
Hi,

also grundsätzlich würde ich die while-Schleife für das auslesen kapseln:

PHP:
while($tag <= date("t",mktime(0,0,0,$Monat,1,$Jahr)))
{
    $result = mysql_query("SELECT * FROM termine WHERE monat = 'August' AND tag = '$tag'");
    $termine = "";
    while($row = mysql_fetch_array($result))
    {
        $termine .= $row['termin'] . '<br/>';
    }

    if($i%7 == 0 && $i != $row[tag])
    {
// Wenn der Tag Sonntag ist $i = 7 , $i = 14 , $i = 21 ... 
                $this->KGrid .= "<td align='right' 
                                     width='10' 
                                     height='10' 
                                     bgcolor='". 
                                         $this->AktuellerTag($tag,$Monat,$Jahr) 
                                     ."'style='padding:0px; 
                                               border:1px solid; 
                                               font-size:8pt; 
                                               color:".$this->FontColorTD."'>". 
                                         $tag .
                                         $termine
                                     ."</td></tr>"; 
                $i++; 
                $tag++; 
    }
    else
    {
               $this->KGrid .= "<td align='right'
                                 width='93'
                                     height='45'
                                      onmouseover='this.style.border = \"1px solid red\";' 
                             onmouseout='this.style.border=\"1px solid ".
                                        $this->AktuellerTag($tag,$Monat,$Jahr)."\";' 
                                     style='padding:2px;
                                             border:1px solid ".
                                        $this->AktuellerTag($tag,$Monat,$Jahr).";
                                             font-size:10pt;
                                             color:".$this->FontColorTD."'>s".
                                        $tag .
                                        $termine 
                                   ."".$row[termin]."</td></tr>";
    }
}

Wie du siehst, hole ich zuerst alle Termine für den aktuellen (in der while-Schleife atkuellen) Tag aus der Datenbank. Diese füge ich zusammen. Anschließend der reguläre Code für die Darstellung des Tages als Tabellen-Zelle plus den Terminen direkt nach dem Tag. Das kann man zwar noch schöner formatieren, aber grundsätzlich ist es das, was ich denke, was du gerne hättest.
 
Hey danke für dein Code-Beispiel.
Das ist echt eine geniale Lösung und ich denke, da
wäre ich so schnell nicht drauf gekommen =)
Danke danke danke.

Für alle, die den Code einmal komplett richtig haben möchten:

PHP:
  while($tag <= date("t",mktime(0,0,0,$Monat,1,$Jahr)))
{
    $result = mysql_query("SELECT * FROM termine WHERE monat = 'August' AND tag = '$tag'");
    $termine = "";
    while($row = mysql_fetch_array($result))
    {
        $termine .= $row['termin'] . '<br/>';
    }

    if($i%7 == 0 && $i != $row[tag])
    {
// Wenn der Tag Sonntag ist $i = 7 , $i = 14 , $i = 21 ... 
                $this->KGrid .= "<td align='right' 
                                     width='93' 
                                     height='45' 
                                     bgcolor='". 
                                         $this->AktuellerTag($tag,$Monat,$Jahr) 
                                     ."'style='padding:0px; 
                                               border:1px solid; 
                                               font-size:8pt; 
                                               color:".$this->FontColorTD."'>
											   ".$tag."".$termine."</td></tr>"; 
               
    }
    else
    {
               $this->KGrid .= "<td align='right'
                                 width='93'
                                     height='45'
                                      onmouseover='this.style.border = \"1px solid red\";' 
                             onmouseout='this.style.border=\"1px solid ".
                                        $this->AktuellerTag($tag,$Monat,$Jahr)."\";' 
                                     style='padding:2px;
                                             border:1px solid ".
                                        $this->AktuellerTag($tag,$Monat,$Jahr).";
                                             font-size:10pt;
                                             color:".$this->FontColorTD."'>
											 ".$tag."".$termine."".$row[termin]."</td>";
    } $i++;
	$tag++;
}
 
Zurück