xpfreund: Resultset erzeugen

Beitrag lesen

Hallo,

$now_date = date("Y-m-d", mktime(date("H")+$timezone,date("i"),date("s"),date("m"),date("d"),date("Y")));

Hier beginnt eine Schleife

Ist mir klar

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));

Ok, kann man machen.  

>      # 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.  

Wie jetzt?  

> >   $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 `{:.language-sql}  
>      # deutet auf einen falschen Datentyp für das Datum hin.  
>      # Du solltest außerhalb der Schleife mit BETWEEN arbeiten.  

Dafür kann ich nichts, so war es original. Between geht nicht, da man ja jeden Tag abfragen muss, auch in anderen Monaten, daher wurde die Schleife hier höchstwahrscheinlich so eingesetzt.  

> >   $row3 = db\_fetch\_row($result3);  
>   
>      # durchnumerierte Variablen sind miserable Variablen  

wie gesagt: original  

> >   // 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."&nbsp;</div>";  
>   
>          # wäre der Einsatz von CSS-Klassen nicht sinnvoller?  

das wird nicht erkannt. Im End-Html steht zwar <div class="x"> aber die Css die dort läuft, führt das nicht aus.  

> >   }  
> >   elseif ($row3[0] > 0 and !$view) {  
> >       // days with events = black  
> >       $da = "<div style='color:black; font-weight:bold;'>".$d."&nbsp;</div>";}  
>   
>   
> >   // weekend  
> # hier könnten wir wieder die oben eingeführte Variable $aktueller Tag nutzen:  
>   
> ~~~php
  

>      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."&nbsp;</div>";}
  // holidays
  else {

# Was bitte kommt jetzt?

Abfrage der Datenbank, ob für den User ein event 'Urlaub' gespeichert ist und Festlegung der Darstellungsfarbe in der Variable 'farbe'

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 :-)

nein, eben nicht

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?  

Wie schon da stand: Wenn $farbe = $holidays\_color, dann entsprechend formatieren.  

> > "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.  

Da das auf einem lokalen Server läuft, ist das doch eh egal.  
  

>  - Nutze das Konzept der Funktionen.  
>  - Gehe großzügig mit dem Einsatz von Kommentaren um  

Das wären zumindest Möglichkeiten für die Zukunft.  
  
gruß aus [Hosena](http://www.hosena.de/)