php-resource



Zurück   PHP-Scripte PHP-Tutorials PHP-Jobs und vieles mehr > Entwicklung > PHP Developer Forum
 

Login

 
eingeloggt bleiben
star Jetzt registrieren   star Passwort vergessen
 

 

 


PHP Developer Forum Hier habt ihr die Möglichkeit, eure Skriptprobleme mit anderen Anwendern zu diskutieren. Seid so fair und beantwortet auch Fragen von anderen Anwendern. Dieses Forum ist sowohl für ANFÄNGER als auch für PHP-Profis! Fragen zu Laravel, YII oder anderen PHP-Frameworks.

Antwort
 
LinkBack Themen-Optionen Thema bewerten
  #1 (permalink)  
Alt 21-10-2009, 09:28
Picard_Jean-Luc
 Registrierter Benutzer
Links : Onlinestatus : Picard_Jean-Luc ist offline
Registriert seit: Jun 2007
Beiträge: 75
Picard_Jean-Luc ist zur Zeit noch ein unbeschriebenes Blatt
Picard_Jean-Luc eine Nachricht über ICQ schicken
Standard Problem mit Schleife, denkanstoß :-)

Hallo zusammen,

ich erstelle gerade ein Terminverplanungstool mit PHP.
Ich erstelle eine Tabelle wo links die Namen stehen sollen und nach recht die Zeiten und wo die Namen ein Termin haben oder nicht.

Jetzt ist es so das mein Tool die Namen und die Termine einträgt aber hinter den Terminen manchmal die Zeit nicht mehr stimmt und deshalb die folgenden Termine nicht stimmen.

Der Termin wird in einer Datenbank gespeichert und das Datum/Zeit als Timestamp.

Ich geb euch mal das Script:

PHP-Code:
$zeit_array = array(":00",":15",":30",":45");

<table class="table_main" cellpadding="1" cellspacing="1">
 <tr>
 <td class="table_oben">Techniker</td>
 <?php
        
for($begin_start 8$begin_start<=18$begin_start++) // Schleife für die Stunden
        
{
         for(
$count_zeit 0$count_zeit<=3$count_zeit++) // Schleife für die Minuten
         
{
         
$zeit_temp $begin_start.$zeit_array[$count_zeit];
         echo 
'<td class="table_oben"><b>'.$zeit_temp.'</b></td>';
         if(
$begin_start == 18){break;}
         }
        }
$temp "0";
?>

</tr>
<?php
$techniker 
"SELECT * FROM ta_users";
$techniker_ergebnis mysql_query($techniker);
while(
$techniker_daten mysql_fetch_object($techniker_ergebnis)) // +++ AUSGABE VON TERMIN
{
$temp_var "0";
echo 
'<tr>';
echo 
'<td>'.$techniker_daten->vorname.'&nbsp;'.$techniker_daten->name.'</td>';

 for(
$table_start 8$table_start<=18$table_start++) // Schleife für die Stunden
 
{
  for(
$count_zeit 0$count_zeit<=3$count_zeit++) // Schleife für die Minuten
  
{
  
$table_temp $table_start.$zeit_array[$count_zeit]; //Zeit zusammenbauen
  
$termin_zeit_temp strtotime($jahr."-".$monat."-".$tag." ".$table_temp);// Generieren TIMESTAMP
  
$start_termin strtotime($jahr."-".$monat."-".$tag." 00:00");// Generieren TIMESTAMP

  
$termine "SELECT * FROM ta_termine WHERE id_technik = '$techniker_daten->id' AND start_datum = '$termin_zeit_temp' ORDER BY start_datum";
  
$termine_ergebnis mysql_query($termine);
  if(
mysql_num_rows($termine_ergebnis) == 0// ++++ WENN KEIN TERMIN VORHANDEN
  
{
  echo 
"<td onmouseover=\"style.border='2px solid #9A1C8E'\" 
onmouseout=\"style.border='1px solid #D5DCF5'\" class=\"table_unten_leer\">
<div onclick=\"window.location='ta_eintrag_termin.php?termin="
.$termin_zeit_temp."&technik=".$techniker_daten->id."'\" 
onmouseover=\"style.color='#C619A6'\" 
onmouseout=\"style.color='#EFF0FA'\">"
.$table_temp."</div></td>";
  
//echo '<td class="table_unten" >frei</td>';
  
}
  else
  {
   
$termine_daten mysql_fetch_object($termine_ergebnis);
     if (
$termin_zeit_temp >= $termine_daten->start_datum && $termin_zeit_temp $termine_daten->end_datum)
     {
      
$temp_var = (($termine_daten->end_datum $termine_daten->start_datum)/60/15);
      echo 
'<td class="table_unten" colspan="'.$temp_var.'">
<b><font color="#FF0000" >'
.date("H:i"$termine_daten->start_datum).'&nbsp;-&nbsp;'.date("H:i"$termine_daten->end_datum).'</font></b></td>';
      
$count_zeit $count_zeit+$temp_var;
     }
     else
     {
     
$temp_var "0";
     echo 
"<td onmouseover=\"style.border='2px solid #9A1C8E'\" onmouseout=\"style.border='1px solid #D5DCF5'\" class=\"table_unten_leer\">
<div onclick=\"window.location='ta_eintrag_termin.php?termin="
.$termin_zeit_temp."&technik=".$techniker_daten->id."'\" onmouseover=\"style.color='#C619A6'\" 
onmouseout=\"style.color='#EFF0FA'\">+</div></td>"
;
     }
  }
  if(
$table_start == 18){break;}
  }
//Ende FOR Minuten
 
}//Ende FOR Stunden

echo '</tr>';
}

?>

</table>
Und so sieht es aus:

Im ersten Screen sieht man den Anfang der geht


Aber dann danach wo auch immer der Termin eingetragen wird sieht man das die Zeit danach nach dem Termin nicht mehr analog stimmt.


Ich hoffe ich konnte gut erklären was ich mein.
Eventuell liegt irgendwo ein Denkfehler an meinem Script.

Irgendwie muss ich sauber die Zeit überbrücken was ich als "colspan" für die Tabelle als Termin nutzen will. Aber das Script muss sauber weiterlaufen.

Mit: $temp_var = (($termine_daten->end_datum - $termine_daten->start_datum)/60/15);

errechne ich die Anzahl der Viertelstunden zwischen start und ende und trage das als Colspan ein. Funktioniert ja auch aber naja...nicht immer.

Könnt ihr mir helfen?

Danke!


Gruß, Picard
Mit Zitat antworten
  #2 (permalink)  
Alt 21-10-2009, 09:37
AmicaNoctis
  Moderatorin
Links : Onlinestatus : AmicaNoctis ist offline
Registriert seit: Jul 2009
Beiträge: 5.709
Blog-Einträge: 9
AmicaNoctis sorgt für eine eindrucksvolle AtmosphäreAmicaNoctis sorgt für eine eindrucksvolle Atmosphäre
Standard

Hallo,

du hast ja zwei Screen Snapshots dazugepackt. Kannst du bitte nochmal erklären, was an dem zweiten nicht stimmt? Für mich sieht das richtig aus.

Gruß,

Amica
Mit Zitat antworten
  #3 (permalink)  
Alt 21-10-2009, 09:45
Picard_Jean-Luc
 Registrierter Benutzer
Links : Onlinestatus : Picard_Jean-Luc ist offline
Registriert seit: Jun 2007
Beiträge: 75
Picard_Jean-Luc ist zur Zeit noch ein unbeschriebenes Blatt
Picard_Jean-Luc eine Nachricht über ICQ schicken
Standard

Gerne, also du siehst ja zwischen den Terminen das da frei ist.
Und als überprüfung habe ich statt eine leere Spalte die Zeit reinschreiben lassen damit ich sehen kann ob die schleife sauber weiterläuft.

Jetzt siehst du bei dem 2. Screen das nach dem Termin die Zeit um 15 min. zurück hängt. Ist schlecht zu erkennen weil ich grau als Farbe habe. Die Zahlen dazwischen dienen ja auch nur zur überprüfung.

Im 2. Screen müsste er also nach dem Termin auch bei 14:15 Uhr weitergehen und nicht bei 14:00 anfangen. Somit verschiebt sich alles nach hinten.

Ich denke es liegt hier dran:
$count_zeit = $count_zeit+$temp_var;

Hier addiere ich die Berechnung der Anzahl der Viertelstunden vom Termin und addiere sie auf die SChleife damit sie nach dem Termin weiterläuft wo der Termin endet. Ich denke hier verschluckt er sich irgendwo.

Ich hoffe ich konnte es gut erklären :-(
Mit Zitat antworten
  #4 (permalink)  
Alt 21-10-2009, 09:53
AmicaNoctis
  Moderatorin
Links : Onlinestatus : AmicaNoctis ist offline
Registriert seit: Jul 2009
Beiträge: 5.709
Blog-Einträge: 9
AmicaNoctis sorgt für eine eindrucksvolle AtmosphäreAmicaNoctis sorgt für eine eindrucksvolle Atmosphäre
Standard

Achso, ich hab erst gar nicht gesehen, dass da noch Uhrzeiten drin stehen. Du musst $count_zeit nach dem Addieren mit $temp_var durch 4 dividieren, den Integer-Teil zu $table_start addieren und den Rest (Modulo) als neue $count_zeit setzen.
Mit Zitat antworten
  #5 (permalink)  
Alt 21-10-2009, 09:58
Picard_Jean-Luc
 Registrierter Benutzer
Links : Onlinestatus : Picard_Jean-Luc ist offline
Registriert seit: Jun 2007
Beiträge: 75
Picard_Jean-Luc ist zur Zeit noch ein unbeschriebenes Blatt
Picard_Jean-Luc eine Nachricht über ICQ schicken
Standard

What? Danke für deine Antwort...aber so richtig habe ich das nicht verstanden.

Warum durch 4?

Kannst du mir das kurz genauer erklären bzw. anhand des scriptes irgendwie oder mir zeigen mit ein paar scriptzeilen wie du das meinst?

DANKE!
Mit Zitat antworten
  #6 (permalink)  
Alt 21-10-2009, 10:08
AmicaNoctis
  Moderatorin
Links : Onlinestatus : AmicaNoctis ist offline
Registriert seit: Jul 2009
Beiträge: 5.709
Blog-Einträge: 9
AmicaNoctis sorgt für eine eindrucksvolle AtmosphäreAmicaNoctis sorgt für eine eindrucksvolle Atmosphäre
Standard

Also, deine $temp_var ist die Anzahl an Viertelstunden seit der Termin begonnen hat, z. B. 5 bei dem zweiten Screen. Der Stundenzähler ($table_start) steht auf 13, der Viertelstundenzähler ($count_zeit) steht auf 0, weil der Termin 13:00 angefangen hat. Wenn du jetzt nur die 5 zu der 0 rechnest, hast du $table_start immer noch auf 13. Jetzt wird aber noch die innere Schleife fortgesetzt, also $count_zeit++ (6) und erneut die Schleifenbedingung geprüft ($count_zeit <= 3), die wegen des Überlaufs in die nächste Stunde nicht erfüllt wird. Daher geht die Kontrolle wieder in die äußere Schleife und die erhöht den Stundenzähler (14) und setzt den Viertelstundenzähler wieder auf 0, dadurch kommt 14:00 raus und nicht 14:15.

Wenn du den Überlauf von $count_zeit nach der Addition abfängst, indem du ihn in ganze Stunden (floor($count_zeit / 4)) und Viertelstunden ($count_zeit % 4) zerlegst und das dem jeweiligen Schleifenzähler hinzuaddierst, kommt das richtige raus.

PHP-Code:
$count_zeit $count_zeit+$temp_var;
$table_start += floor($count_zeit 4);
$count_zeit %= 4

Geändert von AmicaNoctis (21-10-2009 um 10:12 Uhr)
Mit Zitat antworten
  #7 (permalink)  
Alt 21-10-2009, 10:33
Picard_Jean-Luc
 Registrierter Benutzer
Links : Onlinestatus : Picard_Jean-Luc ist offline
Registriert seit: Jun 2007
Beiträge: 75
Picard_Jean-Luc ist zur Zeit noch ein unbeschriebenes Blatt
Picard_Jean-Luc eine Nachricht über ICQ schicken
Standard

Supi, dank dir jedoch gibt es noch probleme.
Schau mal auf den Screen:



Ich denke es liegt wahrscheinlich am Array wenn ich das mit deiner Lösung durchführe:

$zeit_array = array(":00",":15",":30",":45");

Hast du noch eine Idee?
Mit Zitat antworten
  #8 (permalink)  
Alt 21-10-2009, 10:40
AmicaNoctis
  Moderatorin
Links : Onlinestatus : AmicaNoctis ist offline
Registriert seit: Jul 2009
Beiträge: 5.709
Blog-Einträge: 9
AmicaNoctis sorgt für eine eindrucksvolle AtmosphäreAmicaNoctis sorgt für eine eindrucksvolle Atmosphäre
Standard

Achso, ja. Ich hab das Schleifeninkrement nicht kompensiert. Also noch ein Versuch:
PHP-Code:
$count_zeit += $temp_var 1;
$table_start += floor($count_zeit 4);
$count_zeit %= 4
Haut's jetzt hin? Ich hab es selber nicht getestet.
Mit Zitat antworten
  #9 (permalink)  
Alt 21-10-2009, 10:57
Picard_Jean-Luc
 Registrierter Benutzer
Links : Onlinestatus : Picard_Jean-Luc ist offline
Registriert seit: Jun 2007
Beiträge: 75
Picard_Jean-Luc ist zur Zeit noch ein unbeschriebenes Blatt
Picard_Jean-Luc eine Nachricht über ICQ schicken
Standard

Ahhh ja jetzt versteh ich, man oh man...da denkt man sich so viel aus und trotzdem liegt es an 3 Zeilen.

ICH DANKE DIR...sieht gut aus. Jedenfalls habe ich jetzt ne menge Testtermine eingestellt und sind in Moment noch alle richtig drin :-)

DANKE!!!

Super Forum....!!!


Gruß, Picard
Mit Zitat antworten
Antwort

Lesezeichen


Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
 

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
Denkanstoß für Kalender Scotch BRAINSTORMING PHP/SQL/HTML/JS/CSS 15 28-04-2009 14:24
Brauche mal ein Denkanstoß /etc/ PHP Developer Forum 4 21-08-2006 11:39
Denkanstoß Umfragensystem Diggicell PHP Developer Forum 6 07-05-2003 21:55
denkanstoß pollsystem... Diggicell SQL / Datenbanken 9 11-04-2003 12:12
problem mit while schleife in while schleife Benny-one PHP Developer Forum 6 09-07-2002 19:56

Themen-Optionen
Thema bewerten
Thema bewerten:

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre 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


PHP News

ebiz-trader 7.5.0 mit PHP7 Unterstützung veröffentlicht
ebiz-trader 7.5.0 mit PHP7 Unterstützung veröffentlichtDie bekannte Marktplatzsoftware ebiz-trader ist in der Version 7.5.0 veröffentlicht worden.

28.05.2018 | Berni

Wissensbestand in Unternehmen
Wissensbestand in UnternehmenLebenslanges Lernen und Weiterbilden sichert Wissensbestand in Unternehmen

25.05.2018 | Berni


 

Aktuelle PHP Scripte

ADSMAN V3 - Werbe-Manager ansehen ADSMAN V3 - Werbe-Manager

ADSMAN V3 - mehr als nur ein Bannermanager! Banner, Textanzeigen und PagePeel Manager! Mit ADSMAN PRO haben Sie die Marketinglösung für eine effektive und effiziente Werbeschaltung mit messbaren Ergebnissen. Unterstützt werden Bannerformate in beliebi

25.10.2018 virtualsystem | Kategorie: PHP/ Bannerverwaltung
PHP News und Artikel Script V2

News schreiben, verwalten, veröffentlichen. Dies ist jetzt mit dem neuen PHP News & Artikel System von virtualsystem.de noch einfacher. Die integrierte Multi-User-Funktion und der WYSIWYG-Editor (MS-Office ähnliche Bedienung) ermöglichen...

25.10.2018 virtualsystem | Kategorie: PHP/ News
Top-Side Guestbook

Gästebuch auf Textbasis (kein MySQL nötig) mit Smilies, Ip Sperre (Zeit selbst einstellbar), Spamschutz, Captcha (Code-Eingabe), BB-Code, Hitcounter, Löschfunktion, Editierfunktion, Kommentarfunktion, Kürzung langer Wörter, Seiten- bzw. Blätterfunktion, V

22.10.2018 webmaster10 | Kategorie: PHP/ Gaestebuch
 Alle PHP Scripte anzeigen

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