Mathiis: MySQL Abfrage in Array

Hallo,

ich brüte schon die ganze Zeit an einem Problem und bekomme es nicht hin.
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 Funktion sieht so aus:

  
function get_day_termin_raum($date){  
  global $site_config, $session;  
  
  $starttime=$date.'000000';  
  $endtime=$date.'235959';  
  
  $query = "SELECT * FROM cisco_weekplan_termin WHERE termin_fach  = '".$session->get_user_fach()."'  
              AND termin_startdate  
              BETWEEN '".$starttime."'  
              AND '".$endtime."'  
              ORDER by termin_startdate";  
  $res = sql_query($query);  
  $termine = db_result($res);  
  
  return $termine;  
  
 }

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.

Weiß jemand von euch Rat?

Viele Grüße

  1. echo $begrüßung;

    Nur leider wird nur der erste Tag, also Montag ausgelesen. Ich finde einfach meinen Fehler nicht.
    Weiß jemand von euch Rat?

    Bitte mach zunächst Kontrollausgaben deiner beteiligten Werte und finde die Stelle, an der Wunsch und Wirklichkeit nicht mehr übereinstimmen.

    echo "$verabschiedung $name";

    1. echo $begrüßung;

      Nur leider wird nur der erste Tag, also Montag ausgelesen. Ich finde einfach meinen Fehler nicht.
      Weiß jemand von euch Rat?

      Bitte mach zunächst Kontrollausgaben deiner beteiligten Werte und finde die Stelle, an der Wunsch und Wirklichkeit nicht mehr übereinstimmen.

      echo "$verabschiedung $name";

      Habe gerade $tmp ausgelesen und gemerkt, dass er zwar $tmp[1] beschreibt, $tmp[2] aber nicht mehr.

      Der Fehler muss also hier

        
      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  
         $date=strtotime($date);  
         $date=date("Ymd", strtotime("+1 day", $date));  
        } 
      

      liegen. Meiner Meinung nach.

      1. echo $begrüßung;

        Habe gerade $tmp ausgelesen und gemerkt, dass er zwar $tmp[1] beschreibt, $tmp[2] aber nicht mehr.

        Die Kontrollausgabe von $tmp vor und nach dem Beschreiben zeigt welches Ergebnis? Verwende: var_dump($tmp);

        echo "$verabschiedung $name";

        1. echo $begrüßung;

          Habe gerade $tmp ausgelesen und gemerkt, dass er zwar $tmp[1] beschreibt, $tmp[2] aber nicht mehr.

          Die Kontrollausgabe von $tmp vor und nach dem Beschreiben zeigt welches Ergebnis? Verwende: var_dump($tmp);

          echo "$verabschiedung $name";

          Ich bekomme diese Anzeige:

          Array (6)
          1 => Array (1)
            0 => Array (7)
              termin_id => 10
              termin_fach => 2
              termin_raum => 4
              termin_class => 0
              termin_kind => 2
              termin_startdate => 2009-02-02 08:00:00
              termin_enddate => 2009-02-02 10:00:00
          2 => empty
          3 => empty
          4 => empty
          5 => empty
          6 => empty

          1. echo $begrüßung;

            Habe gerade $tmp ausgelesen und gemerkt, dass er zwar $tmp[1] beschreibt, $tmp[2] aber nicht mehr.
            Die Kontrollausgabe von $tmp vor und nach dem Beschreiben zeigt welches Ergebnis? Verwende: var_dump($tmp);
            Array (6)
            1 => Array (1)
              0 => Array (7)
                termin_id => 10

            Die sieht nicht sehr original aus. Copy & Paste war nicht möglich? Wie auch immer. Ich kann dir nur weitere Kontrollausgaben empfehlen. Zum Nachvollziehen fehlen Angaben zu den derzeitigen Variableninhalten oder es ist keine Initialisierung zu sehen (im Fall $tmp würde eine explizite Initialisierung vor der Schleife mit $tmp = array(); für Sicherheit sorgen, dass $tmp ein leeres Array ist und nicht schon in vorherigen Schritten verwendet wurde und alten Inhalt mitbringt). Außerdem verwendest du selbst geschriebene Funktionen, deren Code mir nicht bekannt ist.

            [...]

            6 => empty

            Es finden also 6 Schleifendurchläufe statt. Die Arrayelemente werden anscheinend angelegt, nur eben leer. Suche nun mit Kontrollausgaben in der Funktion weiter, die ein Ergebnis liefern sollte, also get_day_termin_raum() und dann weiter bei db_result() und gegebenenfalls sql_query().

            Möglicherweise tritt im DBMS ein Fehler auf und die verwendeten Funktionen geben das über ihren Rückgabewert bekannt, was du vielleicht nicht auswertest.

            echo "$verabschiedung $name";

  2. 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
    
    1. echo $begrüßung;

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

      Was sind deine Argumente, SELECT * so grundsätzlich abzulehnen?

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

      Ich hätte das ja zu der ersten Zeile des Statements angemerkt. Ich habe die (schwache) Hoffnung, dass $date vor dem ersten Schleifendurchlauf ähnlich erstellt wird wie das darin passiert.  In dem Fall kann kein escape-kritisches Zeichen da drin stehen und auch nicht in $starttime und $endtime. (Ein Escaping schadet aber auch nicht wenn es überflüssig ist. Es ist für den Fall einer Änderung sinnvoll, wenn nicht selbst berechnete Werte beziehungsweise escape-relevante Zeichen Verwendung finden.)

      echo "$verabschiedung $name";

    2. 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:

      Hallo,

      das ich die gesamten Termine in einer Abfrage auslese habe ich mir auch schon überlegt, allerdings muss ich sie in ein Array packen, das so Aufgebaut ist:

      tmp[1] = daten von montag;
      tmp[2] = daten von dienstag;
      .
      .
      .

      Wenn ich nun die Daten mit einer Abfrage hole, habe ich ja

      tmp[1] = Daten von montag-freitag;

      Kann ich das trotzdem dann noch irgendwie auf tmp[2], usw auseinanderbröseln?
      Denn die grafische Ausgabe funktioniert ja und an der möchte ich auch nichts mehr ändern.

      Viele Grüße

      1. echo $begrüßung;

        Wenn ich nun die Daten mit einer Abfrage hole, habe ich ja
        tmp[1] = Daten von montag-freitag;
        Kann ich das trotzdem dann noch irgendwie auf tmp[2], usw auseinanderbröseln?

        Ja, du musst ja sowieso de Daten zeilenweise abholen. Vor dem Eintragen in $tmp fragst du den Wochentag ab und schreibst die Zeile in das entsprechende Array-Element.

        Es kann aber auch sein, dass dich ein so genannter Gruppenwechsel weiterbringt. Die vom DBMS sortierten Daten werden nach dem gewünschten Kriterium befragt. Wenn das vom vorhergehenden Datensatz abweicht fängst du einen neuen Eintrag in $tmp an.

        echo "$verabschiedung $name";

        1. echo $begrüßung;

          »» Wenn ich nun die Daten mit einer Abfrage hole, habe ich ja
          »» tmp[1] = Daten von montag-freitag;
          »» Kann ich das trotzdem dann noch irgendwie auf tmp[2], usw auseinanderbröseln?

          Ja, du musst ja sowieso de Daten zeilenweise abholen. Vor dem Eintragen in $tmp fragst du den Wochentag ab und schreibst die Zeile in das entsprechende Array-Element.

          Es kann aber auch sein, dass dich ein so genannter Gruppenwechsel weiterbringt. Die vom DBMS sortierten Daten werden nach dem gewünschten Kriterium befragt. Wenn das vom vorhergehenden Datensatz abweicht fängst du einen neuen Eintrag in $tmp an.

          echo "$verabschiedung $name";

          Puh, klingt kompliziert. Ich würde nun meiner Query den ersten und letzten Wochentag übergeben und alle Termine ausgeben. Die packe ich in einen Array.
          Aber wie muss ich dann die Sortierung gestalten? Mir ist nicht klar, wie ich die Daten vor dem Eintragen in das Array sortieren kann.

          1. echo $begrüßung;

            Bitte zitiere nur das, worauf du dich konkret beziehst, nicht einfach alles.

            Ich würde nun meiner Query den ersten und letzten Wochentag übergeben und alle Termine ausgeben. Die packe ich in einen Array.
            Aber wie muss ich dann die Sortierung gestalten? Mir ist nicht klar, wie ich die Daten vor dem Eintragen in das Array sortieren kann.

            Sortieren lässt du die Datensätze bereits vom DBMS (ORDER BY). Dann musst du beim Fetchen nur noch entscheiden, welcher Datensatz in welches Tages-(Unter-)Array geschrieben werden muss.

            echo "$verabschiedung $name";

            1. Dann musst du beim Fetchen nur noch entscheiden, welcher Datensatz in welches Tages-(Unter-)Array geschrieben werden muss.

              Ok, ich hab es soweit verstanden. Ich sortiere mir meine Termine nach der Startzeit. Aber wie teile ich die Daten dann im Array auf?

              1. echo $begrüßung;

                » Dann musst du beim Fetchen nur noch entscheiden, welcher Datensatz in welches Tages-(Unter-)Array geschrieben werden muss.
                Ok, ich hab es soweit verstanden. Ich sortiere mir meine Termine nach der Startzeit. Aber wie teile ich die Daten dann im Array auf?

                Mit einer Fallunterscheidung.

                Solange vorhanden, hole Datensatz
                  Wenn Datensatz vom Montag, dann ins Feld für Montage.
                  Wenn Datensatz vom Dienstag, ...

                echo "$verabschiedung $name";

                1. Mit einer Fallunterscheidung.

                  Solange vorhanden, hole Datensatz
                    Wenn Datensatz vom Montag, dann ins Feld für Montage.
                    Wenn Datensatz vom Dienstag, ...

                  echo "$verabschiedung $name";

                  Hallo,

                  habe es nun mit einer Fallunterscheidung versucht, bekomme aber nur leere Arrays.

                    
                  $firstweekday='20090209000001';  
                  $lastweekday='20090213235959';  
                    
                    $tmp = array();  
                      $tmp[1] = array();  
                      $tmp[2] = array();  
                      $tmp[3] = array();  
                      $tmp[4] = array();  
                      $tmp[5] = array();  
                      $tmp[6] = array();  
                    
                  $sql = "SELECT  
                      DATE_FORMAT(termin_startdate, '%w' ) as weekday,  
                      termin_id, termin_startdate, termin_enddate  
                      FROM weekplan_termin WHERE termin_fach  = 2  
                      AND termin_startdate  
                      BETWEEN '".$firstweekday."' AND '".$lastweekday."'  
                      ORDER by termin_startdate";  
                  $result = $db->query($sql);  
                  if (!$result) {  
                      die ('Etwas stimmte mit dem Query nicht: '.$db->error);  
                  }  
                  echo 'Die Ergebnistabelle besitzt '.$result->num_rows." Datensätze<br />\n";  
                    while($row = $result->fetch) {  
                        $tmp[ date( "N",strtotime($row['termin_startdate']) ) ][] = $row;  
                      }  
                    foreach ($tmp as $value){  
                        print_r($value);  
                    }  
                    
                  $result->close();  
                  unset($result);  
                  
                  

                  Ich vermute der Fehler liegt im while($row = $result->fetch) {
                  wüsste aber nicht, wie ich es besser machen kann.

                  1. echo $begrüßung;

                    habe es nun mit einer Fallunterscheidung versucht, bekomme aber nur leere Arrays.
                    Ich vermute der Fehler liegt im while($row = $result->fetch) {
                    wüsste aber nicht, wie ich es besser machen kann.

                    Prüfe mit Kontrollausgaben (mit var_dump()), ob deine Vermutung stimmt. Stell außerdem das error_reporting zum Entwickeln auf E_ALL, dann bekommst du Hinweise beim Zugriff auf nicht existente Variablen angezeigt. In deinem Fall müsste das $result->fetch angekreidet werden, denn das wird sicher keine Instanzvariable sein. Ein Funktionsaufruf wäre passender.

                    Apropos besser machen. MySQL kann Datumswerte auch als Unix-Timestamp liefern und PHP kann damit besser umgehen. Es entfällt damit der Zwischenschritt über einen formatierten String.

                    $sql = "SELECT DATE_FORMAT(termin_startdate, '%w' ) as weekday,

                    SELECT UNIX_TIMESTAMP(termin_startdate) weekday, ...

                    $tmp[ date( "N",strtotime($row['termin_startdate']) ) ][] = $row;

                    $tmp[date("N",$row['termin_startdate'])][] = $row;

                    echo "$verabschiedung $name";

                    1. Prüfe mit Kontrollausgaben (mit var_dump()), ob deine Vermutung stimmt. Stell außerdem das error_reporting zum Entwickeln auf E_ALL, dann bekommst du Hinweise beim Zugriff auf nicht existente Variablen angezeigt. In deinem Fall müsste das $result->fetch angekreidet werden, denn das wird sicher keine Instanzvariable sein. Ein Funktionsaufruf wäre passender.

                      Hallo,

                      ich bekomme die Fehlermeldung:

                      Notice: Undefined property: mysqli_result::$fetch in C:\xampp\htdocs\test\test.php on line 30

                      Ok, nun habe ich mir die Doku von verschiedenen mysql_fetch_... Funktionen
                      angeschaut und auch mal eingesetzt, aber die Fehlermeldung bleibt gleich.
                      Ich bekomme jedoch durch

                      echo 'Die Ergebnistabelle besitzt '.$result->num_rows." Datensätze<br />\n";

                      die Meldung, das die Ergebnistabelle 3 Datensätze hat.

                      1. echo $begrüßung;

                        » In deinem Fall müsste das $result->fetch angekreidet werden, denn das wird sicher keine Instanzvariable sein. Ein Funktionsaufruf wäre passender.
                        ich bekomme die Fehlermeldung:
                        Notice: Undefined property: mysqli_result::$fetch in C:\xampp\htdocs\test\test.php on line 30

                        Ja. Eine Objekteigenschaft (Variable) unterscheidet sich in der Notation von einer Objektmethode (Funktion) durch die nicht vorhandenen Klammern.

                        $result->fetch
                          $result->fetch()

                        echo "$verabschiedung $name";

                        1. $result->fetch
                            $result->fetch()

                          Hallo,

                          ich habe es nun so gemacht:

                            
                          error_reporting(E_ALL);	  
                          $firstweekday='20090209000001';  
                          	$lastweekday='20090213235959';	  
                            
                          	$tmp = array();  
                          		$tmp[1] = array();  
                          		$tmp[2] = array();  
                          		$tmp[3] = array();  
                          		$tmp[4] = array();  
                          		$tmp[5] = array();  
                          		$tmp[6] = array();  
                          		  
                          $sql = "SELECT  
                          		UNIX_TIMESTAMP(termin_startdate) as weekday,  
                          		termin_id, termin_startdate, termin_enddate	  
                          		FROM weekplan_termin WHERE termin_fach 	= 2  
                          		AND termin_startdate  
                          		BETWEEN '".$firstweekday."' AND '".$lastweekday."'  
                          		ORDER by termin_startdate";  
                          $result = $db->query($sql);  
                          if (!$result) {  
                              die ('Etwas stimmte mit dem Query nicht: '.$db->error);  
                          }  
                          echo 'Die Ergebnistabelle besitzt '.$result->num_rows." Datensätze<br />\n";  
                          		while($row = $result->fetch_row()) {  
                             		$tmp[date("N",$row['termin_startdate'])][] = $row;  
                          		}  
                          	foreach ($tmp as $value){  
                          			print_r($value)."\n";  
                          	}  
                          	var_dump($result);	  
                          
                          

                          Ich bekomme die Meldung: Undefined index: termin_startdate
                          Ich bekomme zwar eine Ausgabe, aber es wird nicht richtig sortiert.

                          Array ( ) Array ( ) Array ( ) Array ( [0] => Array ( [0] => 1234162800 [1] => 1 [2] => 2009-02-09 08:00:00 [3] => 2009-02-09 11:00:00 ) [1] => Array ( [0] => 1234188000 [1] => 2 [2] => 2009-02-09 15:00:00 [3] => 2009-02-09 18:30:00 ) [2] => Array ( [0] => 1234252800 [1] => 3 [2] => 2009-02-10 09:00:00 [3] => 2009-02-10 12:00:00 ) [3] => Array ( [0] => 1234508400 [1] => 4 [2] => 2009-02-13 08:00:00 [3] => 2009-02-13 10:30:00 ) ) Array ( ) Array ( )

                          Es wird alles in einen "Tag" geschrieben und auch noch mitten drin.

                          1. echo $begrüßung;

                            Ich bekomme die Meldung: Undefined index: termin_startdate
                            Ich bekomme zwar eine Ausgabe, aber es wird nicht richtig sortiert.

                            Array ( ) Array ( ) Array ( ) Array ( [0] => Array ( [0] => 1234162800 [1] => 1 [2] => 2009-02-09 08:00:00 [3] => 2009-02-09 11:00:00 ) [1] => Array ( [0] => 1234188000 [1] => 2 [2] => 2009-02-09 15:00:00 [3] => 2009-02-09 18:30:00 ) [2] => Array ( [0] => 1234252800 [1] => 3 [2] => 2009-02-10 09:00:00 [3] => 2009-02-10 12:00:00 ) [3] => Array ( [0] => 1234508400 [1] => 4 [2] => 2009-02-13 08:00:00 [3] => 2009-02-13 10:30:00 ) ) Array ( ) Array ( )

                            Du hast eine Kontrollausgabe gemacht. Sehr schön. Noch schöner lesbar wird sie, wenn du in den Browser-Quelltext schaust oder vor die Ausgabe ein <pre> setzt. Was aber entnimmst du der Kontrollausgabe? Hoffentlich, dass deine Array-Schlüssel Zahlen und keine Bezeichner sind. Mit formatierter Ausgabe sähe man das deutlicher. Das PHP-Manual zu mysqli_result::fetch_row() klärt auf, dass dies das normale Verhalten ist. Auf Alternativen wird im Abschnitt "See also" verwiesen (beispielsweise mysqli_result::fetch_assoc()).

                            echo "$verabschiedung $name";

                            1. mysqli_result::fetch_assoc()

                              Ich vermute mittlerweile, das die Abfrage, also $tmp[date("N",$row['termin_startdate'])][] = $row; fehlerhaft ist, denn der Abgleich mit $tmp[1] = array();, $tmp[2] = array();, usw. klappt ja nicht.

                                
                              while($row = $result->fetch_assoc()) {  
                                 		$tmp[date("N",$row['termin_startdate'])][] = $row;  
                              		}
                              

                              So sieht es zur Zeit aus und die Ausgabe so:

                              array(6) {
                                [1]=>
                                array(0) {
                                }
                                [2]=>
                                array(0) {
                                }
                                [3]=>
                                array(0) {
                                }
                                [4]=>
                                array(4) {
                                  [0]=>
                                  array(3) {
                                    ["termin_id"]=>
                                    string(1) "1"
                                    ["termin_startdate"]=>
                                    string(19) "2009-02-09 08:00:00"
                                    ["termin_enddate"]=>
                                    string(19) "2009-02-09 11:00:00"
                                  }
                                  [1]=>
                                  array(3) {
                                    ["termin_id"]=>
                                    string(1) "2"
                                    ["termin_startdate"]=>
                                    string(19) "2009-02-09 15:00:00"
                                    ["termin_enddate"]=>
                                    string(19) "2009-02-09 18:30:00"
                                  }
                                  [2]=>
                                  array(3) {
                                    ["termin_id"]=>
                                    string(1) "3"
                                    ["termin_startdate"]=>
                                    string(19) "2009-02-10 09:00:00"
                                    ["termin_enddate"]=>
                                    string(19) "2009-02-10 12:00:00"
                                  }
                                  [3]=>
                                  array(3) {
                                    ["termin_id"]=>
                                    string(1) "4"
                                    ["termin_startdate"]=>
                                    string(19) "2009-02-13 08:00:00"
                                    ["termin_enddate"]=>
                                    string(19) "2009-02-13 10:30:00"
                                  }
                                }
                                [5]=>
                                array(0) {
                                }
                                [6]=>
                                array(0) {
                                }
                              }

                              Außerdem bekomme ich mit fetch_assoc nun die Fehlermeldung:
                              A non well formed numeric value encountered in $tmp[date("N",$row['termin_startdate'])][] = $row;
                              Was glaube ich meine Vermutung untermauert?!

                              1. echo $begrüßung;

                                Ich vermute mittlerweile, das die Abfrage, also $tmp[date("N",$row['termin_startdate'])][] = $row; fehlerhaft ist, denn der Abgleich mit $tmp[1] = array();, $tmp[2] = array();, usw. klappt ja nicht.

                                Zur Fehlersuche kann man solche Gebilde in seine Teilausdrücke aufteilen und einzeln testen.

                                • Liefert var_dump($row['termin_startdate']); ein passendes Ergebnis?
                                • Liefert var_dump(date("N",$row['termin_startdate'])); ein passendes Ergebnis?
                                • Steht in $row alles wie gewünscht?
                                  Das sind die Teile, die ein Ergebnis liefern. $tmp[...][] = ... ist eine Zuweisung, die wird vermutlich problemlos ausgeführt. Eine Kontrollausgabe von $tmp oder $tmp[...] kann aber nicht schaden.

                                Außerdem bekomme ich mit fetch_assoc nun die Fehlermeldung:

                                Die Ursache ist nicht das fetch_assoc(). Das sorgt aber überhaut erst einmal dafür, dass du mit $row['termin_startdate'] an einen Spalteninhalt kommst.

                                A non well formed numeric value encountered in $tmp[date("N",$row['termin_startdate'])][] = $row;
                                Was glaube ich meine Vermutung untermauert?!

                                Die Funktion date() erwartet einen Unix-Timestamp. Ein solcher ist in dem Feld mit dem Alias weekday enthalten. In termin_startdate steht ein formatierter Datumsstring. Abgesehen davon kann man auch gleich MySQLs umfangreiche Date and Time Functions dazu verwenden, den Wochentag zu liefern (beispielsweise DAYOFWEEK() oder WEEKDAY())

                                echo "$verabschiedung $name";

                                1. Die Funktion date() erwartet einen Unix-Timestamp. Ein solcher ist in dem Feld mit dem Alias weekday enthalten. In termin_startdate steht ein formatierter Datumsstring. Abgesehen davon kann man auch gleich MySQLs umfangreiche Date and Time Functions dazu verwenden, den Wochentag zu liefern (beispielsweise DAYOFWEEK() oder WEEKDAY())#

                                  Waaaahhh, ich hatte es die ganze Zeit.....

                                  while($row = mysql_fetch_array($res)) {
                                      $tmp[date("w",$row['weekday'])][] = $row;
                                  }

                                  Hab nur weekday nicht benutzt....
                                  Es funktioniert nun.
                                  Vielen, vielen Dank!!!!!!!!