| (Web-) Design und webbasierte Sprachen Tipps & Tricks, Designabgleich, HTML & Javascript, Flash, ASP, PHP, Perl/CGI... |
Kalender mit Timestamps aus einer DB füttern
Diskussion: Kalender mit Timestamps aus einer DB füttern im Forum (Web-) Design und webbasierte Sprachen, in der Kategorie Web, Network & Multimedia Palace; Anzeige
Hab i-wie ein Problem, die Termine die in der DB stehen, als Termine im Kalender zu markieren.
Gebe ich ...
 |
07.05.08, 18:47
|
#1 (permalink)
|
Registriert seit: 10.01.06 Likes: 0 | Kalender mit Timestamps aus einer DB füttern Anzeige Hab i-wie ein Problem, die Termine die in der DB stehen, als Termine im Kalender zu markieren.
Gebe ich dem Kalender manuell einen Stamp, geht das alles soweit.
Ich denke ich hab da einfach nen riesen Denkfehler...
Hier die Kalender: PHP-Code: <?php $date = getdate(); $currentmonth = $date[mon]; $year = $date[year]; ?> <table width="100%" border="0" class="calendar"> <tr> <th colspan="7"><?php echo $months[$currentmonth]. " " . $year; ?></th> </tr> <tr> <th>Mo</th> <th>Di</th> <th>Mi</th> <th>Do</th> <th>Fr</th> <th>Sa</th> <th>So</th> </tr> <tr> <?php $datum = Convert2Date(time()); $result = GetMySQLData("SELECT * FROM Appointment WHERE Oeffentlich = true"); $today = $datum[0]; $firstofmonth = mktime(0, 0, 0, date("m"), 1, date("Y")); $offset = (date('w', $firstofmonth) -1) % 7; $dayspermonth = date("t"); $appointment = Convert2Date("1210261832"); for($i = 0; $i < $offset; $i++) echo '<td></td>'; for($i=1; $i <= $dayspermonth; $i++) { if(mysql_num_rows($result)) { // gucken ob was im Query drinsteckt while($row = mysql_fetch_assoc($result)) { $Appointment = Convert2Date($row['Datum']); if($i == $Appointment[0]){ if($i % 7 == 7 - $offset){ echo '<td class="appointmentonsunday">'.$i.'</td>';} else{ echo '<td class="appointment"> </td>'; } } } } if($i == $today){ if($i % 7 == 7 - $offset){ echo '<td class="todayissunday">'.$i.'</td>'; } else{ echo '<td class="today">'.$i.'</td>'; } } elseif($i % 7 == 7 - $offset){ echo '<td class="sunday">'.$i.'</td>'; } else{ echo '<td>'.$i.'</td>'; } if( (($i + $offset) % 7 == 0) && ($i + 1 <= $dayspermonth)){ echo '</tr><tr>'; } } ?> </table> Hier die Funktion Convert2Date: PHP-Code: function Convert2Date($timestamp) { $Date = array(date("d",$timestamp),date("m",$timestamp),date("Y",$timestamp)); return $Date; }
Un die Funktion GetMySQLData: PHP-Code: function GetMySQLData($SQLStatement) { if($localhost == "true"){ @mysql_connect(localhost, root, " ") OR die("Keine Verbindung zur Datenbank. Fehlermeldung:".mysql_error());} else{ @mysql_connect(localhost, usr entfernt, pw entfernt) OR die("Keine Verbindung zur Datenbank. Fehlermeldung:".mysql_error());} mysql_select_db(db entfernt) OR die("Konnte Datenbank nicht benutzen, Fehlermeldung: ".mysql_error()); $result = mysql_query($SQLStatement) OR die(mysql_error()); return $result; }
Vllt findet einer von euch den Fehler.
Vllt gibts auch etwas was ich verkürzen kann oder besser machen kann.
Wäre echt nett :) |
| |
07.05.08, 21:51
|
#2 (permalink)
| | Moderator
Registriert seit: 14.02.06 Likes: 21 | Dein Fehler liegt darin, dass du zwar am Anfang dein Query ausführst und dort sicherlich auch ein paar Ergebnisse bekommst. Die Auswertung der Ergebnisse ist aber Murks. Du gehst jeden Tag des Monats in einer Schleife durch und prüfst darin dann, ob es Ergebnisse bei deinem Query gab. Dann gehst du alle Ergebnisse durch... nur leider wird das Resultset nie zurückgesetzt. Das heißt, nachdem du für den ersten Tag alle Ergebnisse durchgegangen bist (und ggf. kein passendes gefunden hast), wird bei den übrigen Tagen die Zeile 38 nichts mehr bewirken.
Ich würde also die Termine vor dem Durchlauf der einzelnen Tage in einem Array o.ä. zwischenspeichern.
__________________ "Ever tried. Ever failed. No matter.
Try again. Fail again. Fail better." - Samuel Beckett JS BB LX UP |
| | | |
| | HaBOT
| - Anzeige - |
| |
07.05.08, 21:58
|
#3 (permalink)
| Themenstarter
Registriert seit: 10.01.06 Likes: 0 | also wenn ich das richtig verstanden habe:
- Timestamps & ID aus der DB lesen, in in Array packen
- Daten umwandeln mittels Convert2Date
- In Kalender eintragen.
Also anfür sich hab ich das verstanden, aber ei könnte ich das umsetzen?
Ich steh grad etwas auf dem Schlauch und seh den Wald vor lauter Bäume nicht mehr ?( |
| |
07.05.08, 22:12
|
#4 (permalink)
| | Moderator
Registriert seit: 14.02.06 Likes: 21 | Das hast du schon richtig verstanden, nur im Code haut deine Reihenfolge eben nicht hin. Du wertest das Ergebnis deiner SQL-Abfrage zum falschen Zeitpunkt aus. mysql_fetch_assoc() holt sich immer einen Datensatz und springt dann zum nächsten in deinem Resultset $result. Das Problem ist nur, dass nachdem du für den Monatsersten alle Ergebnisse durchgegangen bist, du nicht mehr zum ersten Datensatz zurückspringen kannst. Am 2. des Monats beginnst du wieder mit mysql_fetch_assoc() einen Datensatz abzurufen, aber es gibt keinen mehr...
Du musst also das Auslesen deiner Ergebnisse vor der Schleife über die Tage des Monats machen, z.B. so: PHP-Code: $termine = array();
while ( $row = mysql_fetch_assoc ( $result ) ) { $termine[] = Convert2Date ( $row [ 'Datum' ] ); }
for ( $i = 1; $i < $dayspermonth; $i++ ) { foreach ( $termine as $termin ) { if ( $termin [ 0 ] == $i ) { ... } } }
__________________ "Ever tried. Ever failed. No matter.
Try again. Fail again. Fail better." - Samuel Beckett JS BB LX UP |
| |
07.05.08, 22:37
|
#5 (permalink)
| Themenstarter
Registriert seit: 10.01.06 Likes: 0 | Hab das mal eingebaut, funkioniert auch super. Jedoch werden die Termine, doppelt eingetragen. PHP-Code: <?php $datum = Convert2Date(time()); $result = GetMySQLData("SELECT * FROM Appointment WHERE Oeffentlich = true"); $termine = array(); $today = $datum[0]; $firstofmonth = mktime(0, 0, 0, date("m"), 1, date("Y")); $offset = (date('w', $firstofmonth) -1) % 7; $dayspermonth = date("t"); $appointment = Convert2Date("1210261832"); for($i = 0; $i < $offset; $i++) echo '<td></td>'; while ( $row = mysql_fetch_assoc ( $result ) ) { $termine[] = Convert2Date ( $row [ 'Datum' ] ); } for($i=1; $i <= $dayspermonth; $i++) { foreach ( $termine as $termin ) { if ( $termin [ 0 ] == $i ) { if($i % 7 == 7 - $offset){ echo '<td class="appointmentonsunday">'.$i.'</td>'; } else{ echo '<td class="appointment">'.$i.'</td>'; } } } if($i == $today){ if($i % 7 == 7 - $offset){ echo '<td class="todayissunday">'.$i.'</td>'; } else{ echo '<td class="today">'.$i.'</td>'; } } elseif($i % 7 == 7 - $offset){ echo '<td class="sunday">'.$i.'</td>'; } else{ echo '<td>'.$i.'</td>'; } if( (($i + $offset) % 7 == 0) && ($i + 1 <= $dayspermonth)){ echo '</tr><tr>'; } } ?> BTW: Gibt es nicht ne möglichkeit PHP zu debuggen, wie das mit normal Windows-Forms geht?! Das würde viel Mühe und Fragerei sparen |
| |
08.05.08, 11:52
|
#6 (permalink)
| | Moderator
Registriert seit: 14.02.06 Likes: 21 | Diesmal ist das Problem in Zeile 36. Nachdem du (eventuell) in deiner Schleife schon einen Termin ausgegeben hast, wird hier eine weitere Tabellenzelle für diesen Tag angelegt. Du müsstest dieses IF also noch erweitern und in jedem Schleifendurchlauf eine weitere Variable definieren, in der ein Flag steht, ob ein Termin eingefügt wurde oder nicht.
__________________ "Ever tried. Ever failed. No matter.
Try again. Fail again. Fail better." - Samuel Beckett JS BB LX UP |
| |
09.05.08, 14:17
|
#7 (permalink)
| Themenstarter
Registriert seit: 10.01.06 Likes: 0 | Also ich hab jetzt mal eine Variable reingeprügelt, jedoch scheint es nicht zu fuktionieren wie ich will ôo PHP-Code: for($i = 0; $i < $offset; $i++) echo '<td></td>'; for($i=1; $i <= $dayspermonth; $i++) { $appointmentset = ""; if(mysql_num_rows($result)) { // gucken ob was im Query drinsteckt while($row = mysql_fetch_assoc($result)) { $Appointment = Convert2Date($row['Datum']); if($i == $Appointment[0]){ if($i % 7 == 7 - $offset){ echo '<td class="appointmentonsunday">'.$i.'</td>'; $appointmentset=true;} else{ echo '<td class="appointment"> </td>'; $appointmentset=true; } } } } if($i == $today AND $appointmentset != true){ if($i % 7 == 7 - $offset){ echo '<td class="todayissunday">'.$i.'</td>'; } else{ echo '<td class="today">'.$i.'</td>'; } } elseif($i % 7 == 7 - $offset){ echo '<td class="sunday">'.$i.'</td>'; } else{ echo '<td>'.$i.'</td>'; } if( (($i + $offset) % 7 == 0) && ($i + 1 <= $dayspermonth)){ echo '</tr><tr>'; } }
EDIT:
hat geklappt: PHP-Code: <?php $datum = Convert2Date(time()); $result = GetMySQLData("SELECT * FROM appointment WHERE Oeffentlich = 1"); $termine = array(); $today = $datum[0]; $firstofmonth = mktime(0, 0, 0, date("m"), 1, date("Y")); $offset = (date('w', $firstofmonth) -1) % 7; $dayspermonth = date("t"); $appointment = Convert2Date("1210261832"); for($i = 0; $i < $offset; $i++) echo '<td></td>'; while ( $row = mysql_fetch_assoc ( $result ) ) { $termine[] = Convert2Date ( $row [ 'Datum' ] ); } for($i=1; $i <= $dayspermonth; $i++) { $appointmentset = ""; foreach ($termine as $termin) { if ($i == $termin[0]) { if($i % 7 == 7 - $offset) { echo '<td class="appointmentonsunday">'.$i.'</td>'; $appointmentset = true; } else { echo '<td class="appointment"> </td>'; $appointmentset = true; } } } if($i == $today AND $appointmentset != 1) { if($i % 7 == 7 - $offset) { echo '<td class="todayissunday">'.$i.'</td>'; } else { echo '<td class="today">'.$i.'</td>'; } } elseif($i % 7 == 7 - $offset AND $appointmentset != 1) { echo '<td class="sunday">'.$i.'</td>'; } elseif($appointmentset != 1) { echo '<td>'.$i.'</td>'; } if( (($i + $offset) % 7 == 0) && ($i + 1 <= $dayspermonth)) { echo '</tr><tr>'; } } ?> Hatte vergessen in den anderen If's auch zu prüfen... ?( |
| |  | | |
| | | - Anzeige - |
| | [HaBo]
» Web, Network & Multimedia Palace
» (Web-) Design und webbasierte Sprachen
»
Kalender mit Timestamps aus einer DB füttern
| Themen-Optionen | | | | Ansicht | Linear-Darstellung |
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. HTML-Code ist aus. | | |
|