Hallo Hugo,
Was ist bitte jetzt noch falsch?
viel.
<code>
Wie Du Syntaxhervorhebeung bekommst, steht in der Hilfe:
[ code lang=sprache ]
ohne die Leerzeichen nach der einleitenden
und vor der schließenden eckigen Klammer)
Abschluss (wiederum ohne Leerzeichen) mit
[ /code ]
$now_date = date("Y-m-d", mktime(date("H")+$timezone,date("i"),date("s"),date("m"),date("d"),date("Y")));
Hier beginnt eine Schleife
for ($d=1; $d <= date("t", mktime(0,0,0,($month+1),0,$year)); $d++) {
// fetch events
# Den Ausdruck
# mktime(0, 0, 0, $month, $d, $year)
# benutzt Du im weiteren Code insgesamt dreimal
Es ist daher sinnvoll diesen Wert einer Variablen zuzuweisen
und im folgenden auf diese Variable zuzugreifen.
# Trenne die Argumente einer Funktion mit Leerzeichen nach dem Komma
$aktueller_tag = mktime(0, 0, 0, $month, $d, $year);
$datum2 = date("Y-m-d", $aktueller_tag);
# ist viel besser lesbar als
> $datum2 = date("Y-m-d",mktime(0,0,0,$month,$d,$year));
# Hier setzt Du in einer Schleife ein SQL-Statement ab.
# Ein Statement für jeden Tag
# Viel besser ist es, ein Statement _vor_ der Schleife für den
# ganzen Zeitraum abzusetzen
# Noch besser ist es, das Statement, dass Du per PHP zusammenbaust
# zuerst einer Variablen zuzuweisen, die Du zu Debugzwecken auch
# ausgeben oder mitprotokollieren kannst.
$result3 = db_query("select ID
from ".DB_PREFIX."termine
where datum like '$datum2' and an=$user_ID") or db_die();
# Ein Skript sterben zu lassen, ist meist keine sinnvolle Fehlerbehandlung
# [...] WHERE datum LIKE
# deutet auf einen falschen Datentyp für das Datum hin.
# Du solltest außerhalb der Schleife mit BETWEEN arbeiten.
$row3 = db_fetch_row($result3);
# durchnumerierte Variablen sind miserable Variablen
# siehe auch </archiv/2006/5/t130464/#m843335>
// today = red
if ($now_date == $datum2) {
# Formatiere irgendetwas als irgendwas
# ich vermisse Kommentare.
# Du wirst in ein paar Wochen nicht mehr wissen, was Du warum
# genau so programmiert hast.
$da = "<div style='color:red; background-color:$terminfarbe; font-weight:bold;'>".$d." </div>";
# wäre der Einsatz von CSS-Klassen nicht sinnvoller?
}
elseif ($row3[0] > 0 and !$view) {
// days with events = black
$da = "<div style='color:black; font-weight:bold;'>".$d." </div>";}
// weekend
hier könnten wir wieder die oben eingeführte Variable $aktueller Tag nutzen:
elseif (date('w', $aktueller_tag) == 0 || date('w', $aktueller_tag == 6) {
# statt
> elseif (date('w', mktime(0,0,0,$month,$d,$year)) == 0 || date('w', mktime(0,0,0,$month,$d,$year)) == 6) {
$da = "<div style='font-weight:900; color:".$weekend_color.";'>".$d." </div>";}
// holidays
else {
# Was bitte kommt jetzt?
select an, datum, event, if(event='Urlaub','$holidays_color','blue') as farbe
[/code]
Unexpected T_String ab else
Hm ja, inzwischen solltest Du es sehen :-)
from termine
where (an = $an) and (datum = '$year-$month-$d');
Was soll mit diesem SQL-Statement, wenn Du es endlich in eine PHP-Zeichenkette
umgeformt hast, passieren. Noch eine Abfrage innerhalb der Schleife?
> "from termine" ist in einer neuen Zeile, oder fehlt da nur irgendwo ein Semikolon?
> Sagt jetzt nicht, der Datenbankzugriff in der Schleife, außer ihr wisst, wie man das besser machen kann.
Ja selbstverständlich hast Du völlig unnötig Datenbankzugriffe innerhalb einer
Schleife. Genau davon haben wir Dir abgeraten.
Zu Deiner Codestruktur
- Bitte schreibe/male Dir vorher auf altmodischem Papier die Struktur Deines Programmabschnittes auf.
- Nutze das Konzept der Funktionen.
- Gehe großzügig mit dem Einsatz von Kommentaren um
Freundliche Grüße
Vinzenz