Ankündigung

Einklappen
Keine Ankündigung bisher.

Benötige einen Denkanstoß bei Daten auslesen!

Einklappen

Neue Werbung 2019

Einklappen
X
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Benötige einen Denkanstoß bei Daten auslesen!

    Hallo @all,

    ich benötige mal einen Denkanstoß. Ich habe hier folgendes Script was ich geschrieben habe was aus einer DB Termine ausliest. Diese sind dort mit einen Timestamp gespeichert.

    Das funktioniert alles super genauso wie ich es will nur mit der Formatierung habe ich probleme.

    Also erstmal das Script:

    Code:
    $z=1;
    		 $user = $_GET["user"];
    
    	for($begin_start; $begin_start<=$begin_ende; $begin_start++)
    		 {
    		  for($count_zeit = 0; $count_zeit<=3; $count_zeit++)
    		  {
    		  $check_time = strtotime($_GET["jahr"]."-".$_GET["monat"]."-".$_GET["tag"]." ".$begin_start.$zeit_array[$count_zeit]);
    
    		   $anfrage = "SELECT * FROM tp_termine WHERE user_id = '$user' AND start_termin <= '$check_time' AND ende_termin >= '$check_time'";
    		   $anfrage_ergebnis = mysql_query($anfrage);
    			if(mysql_num_rows($anfrage_ergebnis) == 0)
    			{
    			echo "<tr>";
    			echo "<td>".$begin_start.$zeit_array[$count_zeit]."</td>";
    			echo "<td>kein termin</td>";
    			echo "<td>leer</td>";
    			echo "</tr>";
    			}
    			else
    			{
    			 while($anfrage_daten = mysql_fetch_object($anfrage_ergebnis))
    			 {
    			  echo "<tr>";
    			  echo "<td>".$begin_start.$zeit_array[$count_zeit]."</td>";
    			  echo "<td rowspan=\"".$z."\">".$anfrage_daten->betreff."</td>";
    			  echo "<td rowspan=\"".$z."\">Option</td>";
    			  echo "</tr>";
    			 }
    
    			}// Ende Termin Check
    		   if($begin_start == $begin_ende){break;};
    		  }// Ende for count
    		 }// Ende FOR begin und end
    In der Adresszeile steht hinter der Datei noch ein GET: user=8&tag=05&monat=06&jahr=2007

    Das funktioniert ja auch alles super!

    Jetzt bekomme ich folgende Ausgabe:

    5:00 kein termin leer
    5:15 kein termin leer
    5:30 kein termin leer
    5:45 kein termin leer
    6:00 test2 Option
    6:15 test2 Option
    6:30 test2 Option
    6:45 kein termin leer
    7:00 kein termin leer
    7:15 kein termin leer
    7:30 kein termin leer
    7:45 kein termin leer
    8:00 test Option
    8:15 test Option
    8:30 test Option
    8:45 kein termin leer
    9:00 kein termin leer
    9:15 kein termin leer
    9:30 kein termin leer
    Das stimmt auch alles genau dort ist der Termin auch nur es soll nicht 3 mal da stehen sondern die Spalte mittels "rowspan" zusammen gemacht werden wo ein Termin ist.

    Jetzt habe ich schon ein paar Varianten probiert aber komme nicht drauf. Irgendwie muss ich für jeden erstmal die Anzahl zählen damit ich später die Zahl in rowspan eingeben kann.

    Also im endeffekt spielt sich das ganze NUR hier ab:

    Code:
     if(mysql_num_rows($anfrage_ergebnis) == 0)
    			{
    			echo "<tr>";
    			echo "<td>".$begin_start.$zeit_array[$count_zeit]."</td>";
    			echo "<td>kein termin</td>";
    			echo "<td>leer</td>";
    			echo "</tr>";
    			}
    			else
    			{
    			 while($anfrage_daten = mysql_fetch_object($anfrage_ergebnis))
    			 {
    			  echo "<tr>";
    			  echo "<td>".$begin_start.$zeit_array[$count_zeit]."</td>";
    			  echo "<td rowspan=\"".$z."\">".$anfrage_daten->betreff."</td>";
    			  echo "<td rowspan=\"".$z."\">Option</td>";
    			  echo "</tr>";
    			 }
    Hat jemand noch eine Idee?

    Ich habe hier eine Formel entwickel was zwischen 2 Timestamps die abstände berechnet und es klapt auch aber es ist nicht sehr schön und wenn ein Termin auf einen anderen Tag geht klappt es auch schon wieder nicht. Also auch nicht so die lösung!

    Code:
    while($anfrage_daten = mysql_fetch_object($anfrage_ergebnis))
                 {
    $rowspan = ($anfrage_daten->ende_termin-$anfrage_daten->start_termin)/60/15+1;
    
        if($anfrage_daten->start_termin == $check_time)
        {    
                  echo "<tr>";
                  echo "<td>".$begin_start.$zeit_array[$count_zeit]."</td>";
                  echo "<td rowspan=\"".$rowspan."\">".$anfrage_daten->betreff."</td>";
                  echo "<td rowspan=\"".$rowspan."\">".$rowspan."</td>";
                  echo "</tr>";
        }
        else
        {
            echo "<tr>";
            echo "<td>".$begin_start.$zeit_array[$count_zeit]."</td>";
        echo "</tr>";
        }
                 }
    Wäre schön wenn jemand mir helfen kann!


    Danke schön!


    MFG

    Picard

  • #2
    Dein Skript hat das Problem, dass es die Daten sofort ausgibt. Daher weiß das Skript zu dem Zeitpunkt, zu dem der rowspan gesetzt werden muss nicht, wieviele Zeilen es zusammenfügen muss.

    Das Problem umgehst du, in dem du dir ersteinmal einen Ergebnismenge aus der Datenbank holst, diese dann oder während der Ausgabe analysierst und danach erst ausgibst.

    Kommentar


    • #3
      Ok leuchtet ein aber wie soll die Ergebnismenge wissen wieviel rowspan es gibt?
      Ich habe doch in meine DB nur eine Zeile mit "start_termin" und "ende_termin" und dort steht ein Timestamp drin mit datum und Uhrzeit!

      Kommentar


      • #4
        Ich würd ma sagen, zählen Muss doch bloss zählen, wie oft hintereinander derselbe Eintrag auftritt.
        Nicht jeder Fehler ist ein Bug.

        Kommentar


        • #5
          D.h. pack die Daten beim Auslesen aus der Datenbank in ein Array und schieb die einzelnen arraywerte nacheinander in eine callbackfunktion, die mitzählt, bei welchen aufeinanderfolgenden zeilen, Gleichheiten bestehen.

          Ich denke mal, damit sind die nötigsten Stichworte gefallen.
          P.S: bitte mach doch ein paar Satzzeichen, das ist ja schrecklich...

          Kommentar


          • #6
            Bau dir eine Funktion, die Zweierpaare von Zeitstempeln akzeptiert und in Viertelstunden unterteilt.

            Dazu einfach den kleineren ZS vom größeren ZS abziehen (vorausgesetzt es handelt sich wirklich um UNIX-ZS, sonst mit strtotime() den DATETIME ZS umwandeln), Ergebnis ist die Differenz in Sekunden. Das rechnest du nun in Minuten um. Diesen Wert teilst du durch 15 und rundest das Ergebnis auf. Dann läufst du im Array beim Start-ZS los und füllst die errechneten Viertelstunden.

            Schreib dir jetzt einen Array für jeden Tag, dessen Elemente die 24-Stunden des Tages unterteilt in 15 Minuten sind. Die Werte sind wieder Arrays mit der ID des Termins.

            Eine zweite Funktion bekommt nun so einen Array übergeben und übernimmt einzig die Ausgabe.

            Ist etwas knifflig, aber zu machen. Wenn du irgendworan scheiterst, schreib deinen bisherigen Quellcode und eine kurze Beschreibung, was hakt.

            Kommentar


            • #7
              Iterativ gehts auch, muss bloss durchgehen und bei zwei aufeinanderfolgenden Einträgen zählst du den Eintrag plus 1 und wenn ein anderer Eintrag auftaucht, dann eben einen Neuen anlegen mit Anzahl (erstmal) 1.
              Nicht jeder Fehler ist ein Bug.

              Kommentar


              • #8
                Oh man, ok ich probiere es einmal.
                Aber glaube nicht das ich es hin bekomme.
                Das mit den Berechnen habe ich ja schon wie es oben zu sehen ist.

                Sorry kann leider mit den ganzen begriffen noch nicht so viel anfangen.
                Aber ja es ist ein Unix Timestamp habe ihn erzeugen lassen. Siehe oben.

                Oben habe ich ja schon ein beispiel!

                Kommentar


                • #9
                  Also das mit den funktionen habe ich probier aber irgendwie klappt es nicht.
                  Könntest du mir ein beispiel geben?

                  Wäre echt super. Für mich ist es einfacher aus Quelltext zu lernen.
                  Ich weiß ungefähr was du meinst aber bekomme es leider wirklich nicht hin.

                  Danke

                  Meine DB sieht so aus:

                  Kommentar


                  • #10
                    Wäre echt super. Für mich ist es einfacher aus Quelltext zu lernen.
                    Entschuldige, aber wie programmiert man dann, wenn man es immer erst hinterher versteht?

                    Ausserdem: Bei deiner doch eigentlich sehr netten Tabellenstruktur is es Blödsinn die Einträge in 15min Abstände zu splitten, um sie dann wieder zusammen zu führen.

                    Den Wert für Colspan kriegst du einfach wenn du die Differen zwischen Start und Ende geteilt 15 nimmst. Danach die Ausgabeschleife so gestalten, dass das Feld, in dem das Colspan reinkommt, eben genau mit Anfang der Zeitspanne liegt und nach Ablauf der Zeitspanne ... Joa, keine anstelle dessen vielleicht leere Felder oder was auch immer ^^
                    Nicht jeder Fehler ist ein Bug.

                    Kommentar


                    • #11
                      Keine Angst ich programmiere schon selber nur wenn mir Leute was erklären nehme ich es gerne an aber verstehe es nicht immer gleich erst wenn ich ein bissel Quelltext dazu habe.

                      Jetzt zu deiner Idee.

                      Wie oben im Beispiel zu sehen ist habe ich ja schon versucht mit der Formel das rowspan zu berechnen aber wenn ein Termin über ein Tag hinaus geht klappt dies nicht.

                      Kommentar


                      • #12
                        Na, Tagesanfang und -ende musst du sowieso berechnen. Wenn dann ein Termin darüber hinaus geht, dann kannst du einfach den Anfang oder das Ende des Termins eben auf diese Zeit setzen. Dann kann es dir ja egal sein, wann er wirklich endet Und danach kannste die Summe der spans berechnen.

                        PHP-Code:
                        if (($entry['endtime'] > $daysend) && ($entry['starttime'] < $daysend)) {
                          
                        $entry['endtime'] = $daysend;

                        Für den Anfang analog.
                        Nicht jeder Fehler ist ein Bug.

                        Kommentar


                        • #13
                          hm..ok versteh was du meinst.
                          Ich werde es versuchen.

                          Danke dir trotzdem für deine Hilfe.

                          Kommentar


                          • #14
                            Ach komm nicht schon wieder dieses "ich lern besser wenn ich abschreibe".

                            Was möchtest du eigentlich jetzt erreichen, ein Viertelstunden-Unterteilung eines Tages im <table>-Format mit Terminen aus der Datenbank?
                            Wenn ja schau dir mal dieses Tutorial von mir an:
                            http://www.phpfriend.de/forum/ftopic61982.html
                            Vielleicht kannst du die Übereinstimmungen erkennen? Zugegebenermaßen sind die Unterschiede die Schwierigkeiten, aber vielleicht hilft es als Denkanstoss.

                            Und dann leg mal richtig los (siehe Anleitung in meinem ersten Posting), sonst hocken wir in zwei Wochen noch hier. Hier wird die keiner den Code fertig schreiben.

                            Kommentar


                            • #15
                              ICh möchte auch nicht das mir einer den Code fertig schreibt.
                              Davon halte ich auch nichts...

                              Ihr habt mir doch schon mehrere Denkanstöße gegeben.
                              Bin gerade dabei es fertig zu machen und es nimmt gestalt an.

                              Also, Danke nochmal


                              MFG

                              Picard

                              Kommentar

                              Lädt...
                              X