Sven Rautenberg (@work): MySQL Abfrage in Array

Beitrag lesen

Moin!

ich brüte schon die ganze Zeit an einem Problem und bekomme es nicht hin.

Du hast noch ein ganz anderes Problem, siehst es nur noch nicht.

Ich habe eine Schleife, die

for($i = 1; $i <= 6; $i++)
  { //Schleife um Termine aus der Datenbank zu holen
   $tmp[$i] = $this->get_day_termin_raum($date); //aktueller Tag YYYYMMDD
   $diffdate=strtotime($date);
   $date=date("Ymd", strtotime("+1 day", $diffdate));
  }


>   
> sich die Daten des Tages ($date) aus der Datenbank holt und zuweist.  
  
Die Schleife führt also mindestens 6 mal ein SELECT auf die DB aus, um sich jeweils die Termine der kommenden Woche tageweise zu holen. Ist also sehr ineffektiv programmiert.  
  

> Die Funktion sieht so aus:  
>   
> ~~~php
  

> function get_day_termin_raum($date){  
>   global $site_config, $session;  
  
Globale Variablen sind grundsätzlich zu vermeiden - vor allem wenn man objektorientiert programmiert, ist es auch gar nicht nötig.  
  

>   $starttime=$date.'000000';  
>   $endtime=$date.'235959';  
>   
>   $query = "SELECT * FROM cisco_weekplan_termin WHERE termin_fach  = '".$session->get_user_fach()."'  
  
SELECT * ist grundsätzlich zu vermeiden!  
  

>               AND termin_startdate  
>               BETWEEN '".$starttime."'  
>               AND '".$endtime."'  
>               ORDER by termin_startdate";  
  
Escaping von variablen Daten ist grundsätzlich immer anzuwenden!  
  

>   $res = sql_query($query);  
>   $termine = db_result($res);  
>   
>   return $termine;  
>   
>  }

Insgesamt darf festgestellt werden, dass es deutlich schlauer wäre, die Funktion der Wochenterminabfrage in einem eigenständigen Query abzuarbeiten, anstatt für jeden einzelnen Tag die DB mit einem separaten Query zu quälen.

Der Vorteil, den man dann nutzen könnte, wäre u.a., dass man zu den Terminen dann in einer separaten Spalte auch den Wochentag schon durch die DB ermitteln lassen könnte, und dass die idiotische Rechnerei mit dem "Datum einen Tag weiterschalten" php-seitig entfällt:

Dann möchte ich die Termine auslesen, damit ich sie grafisch darstellen kann. Dabei werden die Termine einem Wochentag zugeordnet:

var $wochentage = array(0 => "",1 => "Mo.",2 =>"Di.",3=>"Mi.",4=>"Do.",5=>"Fr.",6=>"Sa.",7=>"So.");

if(!empty($tmp)) {
foreach ($tmp as $key => $val) {
$width[$key]["tag"] = $this->wochentage[$key];
}


>   
> Nur leider wird nur der erste Tag, also Montag ausgelesen. Ich finde einfach meinen Fehler nicht.  
  
Dein konkreter Fehler dürfte sein, dass $date beim zweiten Tag nicht mehr deinen Erwartungen entspricht, weil deine Berechnungsroutine für "nächster Tag" Müll erzeugt, und deshalb die nachfolgenden Querys falsch laufen. Fehlerbehandlung der Querys hätte diesen Mangel offenbart.  
  
Dein Konzeptfehler ist, dass du dieses Gehampel überhaupt durchführst.  
  
 - Sven Rautenberg