php.de

Zurück   php.de > Webentwicklung > PHP Einsteiger > PHP Tipps 2007

 
 
LinkBack Themen-Optionen Thema bewerten
Alt 06.06.2007, 16:24  
Neuer Benutzer
 
Benutzerbild von Picard
 
Registriert seit: 22.03.2006
Beiträge: 26
Picard
Picard eine Nachricht über MSN schicken
Standard 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:

Zitat:
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
Picard ist offline  
Sponsor Mitteilung
PHP Code Flüsterer

Registriert seit: 21.08.2005
Beiträge: 4682
PHP-Kenntnisse:
Fortgeschritten

Alt 06.06.2007, 16:37  
Erfahrener Benutzer
 
Registriert seit: 21.05.2008
Beiträge: 9.937
Zergling-new wird schon bald berühmt werden
Standard

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.
Zergling-new ist offline  
Alt 06.06.2007, 17:02  
Neuer Benutzer
 
Benutzerbild von Picard
 
Registriert seit: 22.03.2006
Beiträge: 26
Picard
Picard eine Nachricht über MSN schicken
Standard

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!
Picard ist offline  
Alt 06.06.2007, 17:09  
Erfahrener Benutzer
 
Registriert seit: 13.08.2007
Beiträge: 1.976
KingCrunch befindet sich auf einem aufstrebenden Ast
KingCrunch eine Nachricht über ICQ schicken KingCrunch eine Nachricht über AIM schicken KingCrunch eine Nachricht über MSN schicken KingCrunch eine Nachricht über Yahoo! schicken
Standard

Ich würd ma sagen, zählen Muss doch bloss zählen, wie oft hintereinander derselbe Eintrag auftritt.
__________________
Nicht jeder Fehler ist ein Bug.
KingCrunch ist offline  
Alt 06.06.2007, 17:38  
Erfahrener Benutzer
 
Registriert seit: 21.07.2005
Beiträge: 209
pepe24
Standard

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...
pepe24 ist offline  
Alt 06.06.2007, 17:41  
Erfahrener Benutzer
 
Registriert seit: 21.05.2008
Beiträge: 9.937
Zergling-new wird schon bald berühmt werden
Standard

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.
Zergling-new ist offline  
Alt 06.06.2007, 17:42  
Erfahrener Benutzer
 
Registriert seit: 13.08.2007
Beiträge: 1.976
KingCrunch befindet sich auf einem aufstrebenden Ast
KingCrunch eine Nachricht über ICQ schicken KingCrunch eine Nachricht über AIM schicken KingCrunch eine Nachricht über MSN schicken KingCrunch eine Nachricht über Yahoo! schicken
Standard

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.
KingCrunch ist offline  
Alt 06.06.2007, 18:29  
Neuer Benutzer
 
Benutzerbild von Picard
 
Registriert seit: 22.03.2006
Beiträge: 26
Picard
Picard eine Nachricht über MSN schicken
Standard

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!
Picard ist offline  
Alt 06.06.2007, 19:50  
Neuer Benutzer
 
Benutzerbild von Picard
 
Registriert seit: 22.03.2006
Beiträge: 26
Picard
Picard eine Nachricht über MSN schicken
Standard

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:

Picard ist offline  
Alt 06.06.2007, 20:01  
Erfahrener Benutzer
 
Registriert seit: 13.08.2007
Beiträge: 1.976
KingCrunch befindet sich auf einem aufstrebenden Ast
KingCrunch eine Nachricht über ICQ schicken KingCrunch eine Nachricht über AIM schicken KingCrunch eine Nachricht über MSN schicken KingCrunch eine Nachricht über Yahoo! schicken
Standard

Zitat:
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.
KingCrunch ist offline  
 


Themen-Optionen
Thema bewerten
Thema bewerten:

Forumregeln
Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are an
Gehe zu

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
Daten aus RSS-Datei ohne PHP5 auslesen? BartTheDevil89 PHP Tipps 2008 6 10.12.2007 22:54
Vom Browser verschickte Daten auslesen und anzeigen? andy32 PHP Tipps 2008 3 22.08.2007 18:33
Daten auslesen und ändern Datenbanken 2 17.09.2005 19:28
Daten eintragen und auslesen Rettungsdackel Datenbanken 0 14.09.2005 16:29
[Erledigt] Daten aus einer Datenbank auslesen Datenbanken 2 04.09.2005 19:13
Daten aus Pw-Geschütztem bereich auslesen PHP-Fortgeschrittene 2 26.08.2005 15:27
Daten auslesen und nebeneinander wiedergeben PHP Tipps 2005-2 4 28.06.2005 13:44
Daten aus Tabelle auslesen Datenbanken 3 01.06.2005 13:49
[Erledigt] Generierte Daten von anderem Host auslesen PHP Tipps 2005 2 15.05.2005 20:54
Nur bestimmte daten aus einer tabelle auslesen. Datenbanken 15 28.02.2005 12:49
Daten aus *.MPQ-Dateien mittels fread auslesen? PHP-Fortgeschrittene 21 06.01.2005 14:40
[Erledigt] Daten auslesen - Daten hinzufügen - Daten Speichern PHP Tipps 2004-2 1 04.12.2004 10:59
[Erledigt] Daten von anderer Homepage auslesen PHP Tipps 2004-2 5 02.12.2004 18:49
Auslesen von Daten aus einer mysql Datenbank + Editieren vampsoftchef PHP Tipps 2004-2 5 15.11.2004 08:31
Daten aus einem Formular auslesen??? PHP-Fortgeschrittene 1 21.06.2004 17:43

Besucher kamen über folgende Suchanfragen bei Google auf diese Seite
mysql \wie oft hintereinander\

Alle Zeitangaben in WEZ +2. Es ist jetzt 16:33 Uhr.




Powered by vBulletin® Version 3.7.2 (Deutsch)
Copyright ©2000 - 2012, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO 3.2.0
Aprilia-Forum, Aquaristik-Forum, Liebeskummer-Forum, Zierfisch-Forum, Geizkragen-Forum

Creative Commons License
Dieser Inhalt ist unter einer Creative Commons-Lizenz lizenziert.