| 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! Post your PHP questions here! |
 |

09-11-2011, 10:23
|
|
jpb
Registrierter Benutzer
|
|
Registriert seit: Nov 2011
Beiträge: 5
|
|
Datum aus Datenbank holen und in einem Kalender markieren
Moin,
ich habe in einer Datenbanktabelle einen Datumszeitraum abgespeichert.
Z.b. 18.10.2011 bis 23.10.2011.
Die werden alle einzelnd gespeichert also:
18.10.2011
19.10.2011
20.10.2011
21.10.2011
22.10.2011
23.10.2011
Nun möchte ich diese Daten in einem Kalender unterbringen und markieren damit zu sehen ist, dass der bestimmte Tag ausgebucht ist.
Mein Kalenderscript sieht folgendermaßen aus:
PHP-Code:
<?PHP $month = isset($_GET['month']) ? intval($_GET['month']) : date('n'); $year = isset($_GET['year']) ? intval($_GET['year']) : date('Y'); $options['today_class'] = "background-color:#008bb8; font-weight:bold; color:#fff;"; $weekdays = array('So', 'Mo', 'Di', 'Mi', 'Do', 'Fr', 'Sa'); $weekdays = array('So', 'Mo', 'Di', 'Mi', 'Do', 'Fr', 'Sa'); $months = array( '01' => 'Januar', '02' => 'Februar', '03' => 'März', '04' => 'April', '05' => 'Mai', '06' => 'Juni', '07' => 'Juli', '08' => 'August', '09' => 'September', '10' => 'Oktober', '11' => 'November', '12' => 'Dezember' ); $prev_symbol = "«"; $next_symbol = "»"; $summary = "Belegungsplan"; $caption = "Belegungsplan"; $options['month_link'] = '<a href="'.$_SERVER['PHP_SELF'].'?month=%d&year=%d&Titel='.$Titel.'">%s</a>'; $total_days = date('t', mktime(0, 0, 0, $month, 1, $year)); $day_offset = date('w', mktime(0, 0, 0, $month, 1, $year)); list($n_month, $n_year, $n_day) = split(', ', strftime('%m, %Y, %d')); $day_highlight = (($n_month == $month)."&&".($n_year == $year)); list($n_prev_month, $n_prev_year) = split(', ', strftime('%m, %Y', mktime(0, 0, 0, $month-1, 1, $year))); $prev_month_link = sprintf($options['month_link'], $n_prev_month, $n_prev_year, $prev_symbol); list($n_next_month, $n_next_year) = split(', ', strftime('%m, %Y', mktime(0, 0, 0, $month+1, 1, $year))); $next_month_link = sprintf($options['month_link'], $n_next_month, $n_next_year, $next_symbol); echo ' <table border="0" summary="'.$summary.'" style="width: 400px;"> <caption>'.$caption.'</caption> <thead> <tr> <th style="background-color:#647b8d;">'?> <?PHP if (date('m') >= $month AND date('Y') == $year): else: echo $prev_month_link; endif; ?> <?PHP echo '</th> <th colspan="5">'.$months[strftime('%m', mktime(0, 0, 0, $month, 1, $year))].' '.$year.'</th> <th style="background-color:#647b8d;">'.$next_month_link.'</th> </tr>'; echo "<tr>\n"; foreach ($weekdays as $weekday) { echo "\t"; echo "<th>".$weekday."</th>\n"; echo "\n"; } echo "\n"; echo "\n"; echo "</tr> </thead> <tbody>\n"; echo "<tr>\n"; if ($day_offset > 0) { for ($i=0; $i<$day_offset; $i++) { echo "\t"; echo '<td class="empty_cell">'; echo "\n"; } } for ($day=1; $day<=$total_days; $day++) { if ($day_highlight && ($day == $n_day) && ($month == $n_month)) { echo "\t"; echo '</td> <td id="day_'.$day.'" style="'.$options['today_class'].'">'.$day.''; echo "\n"; } else { echo "\t"; echo '</td> <td id="day_'.$day.'">'.$day.'</td>'; echo "\n"; } $day_offset++; if ($day_offset == 7) { $day_offset = 0; if ($day < $total_days) { echo "</tr>\n<tr>"; } } } if ($day_offset > 0) { $day_offset = 7-$day_offset; } if ($day_offset > 0) { for ($i=0; $i< $day_offset; $i++) { echo '<td class="empty_cell">'; echo "\n"; } } ?>
Der Kalender funktioniert soweit aber die Markierung der eingegebenen Daten aus der Datenbank bekomme ich einfach nicht hin. :/
Den aktuellen Tag kann ich auslesen und markieren aber nicht die, die aus der Datenbank übergeben werden.
Leider konnte mir bisher noch niemand wirklich helfen.
Hat jemand für mich einen Tipp/Denkanstoß wo ich ansetzen kann?
Viele Grüße
Paul
Geändert von AmicaNoctis (09-11-2011 um 11:26 Uhr)
Grund: überlangen Code umgebrochen
|

09-11-2011, 11:24
|
AmicaNoctis
 Moderatorin
|
|
Registriert seit: Jul 2009
Beiträge: 5.550
|
|
Hallo,
ich sehe im Code keinerlei Datenbankabfragen. Woher soll der Kalender die Daten aus der DB bekommen?
Übrigens erzeugst du invaliden HTML-Code. Jag die Seite mal durch den Validator und korrigiere die Fehler im Code.
Gruß,
Amica
__________________
Hast du die Grundlagen zur Fehlersuche gelesen? Hast du Code-Tags benutzt? 
Hast du als URL oder Domain-Beispiele example.com, example.net oder example.org benutzt?
Super, danke! 
|

09-11-2011, 11:40
|
|
jpb
Registrierter Benutzer
|
|
Registriert seit: Nov 2011
Beiträge: 5
|
|
Moin Amica,
vielen Dank für Deine Antwort.
Eine Datenbankabfrage habe ich noch nicht eingebunden.
Hier ist die Datenbankabfrage die ich über dem Kalender habe.
Ausgabe ist:
"ausgebucht vom:
XX.XX.XXXX bis XX.XX.XXXX"
Den Zeitraum zwischen den Daten möchte ich auf den Kalender übertragen sodass diese dort als gebucht markiert werden.
PHP-Code:
<?PHP $Tabellenname="belegungsplan"; $query = mysql_query("SELECT * FROM $Tabellenname WHERE Titel='$Titel'order by Datum1",$db); $num=mysql_NumRows($query); include("../../intern/inc/funk.makedate.php"); $i=0; while ($i<$num): $row = mysql_fetch_array($query); $Datum1=makedate($row[Datum1]); $Datum2=makedate($row[Datum2]); ?> <?PHP echo $Datum1[9];?> bis <?PHP echo $Datum2[9];?><br> <?PHP $i++; endwhile; // Datenausgabe Schleifenende ?> <br>
Ich möchte Datenbankabfrage und Kalender miteinander verbinden.
Viele Grüße
Paul
|

09-11-2011, 11:45
|
AmicaNoctis
 Moderatorin
|
|
Registriert seit: Jul 2009
Beiträge: 5.550
|
|
Okay, jetzt weiß ich, was du vor hast, aber noch nicht, woran es nun genau scheitert.
Du kannst einen Kalender anzeigen, prima! Du kannst die Datenbank abfragen, prima! Beides sieht zwar noch nicht professionell aus, aber darum kann man sich später kümmern.
Worin besteht jetzt das konkrete Problem, diese beiden Puzzleteile zusammenzusetzen?
__________________
Hast du die Grundlagen zur Fehlersuche gelesen? Hast du Code-Tags benutzt? 
Hast du als URL oder Domain-Beispiele example.com, example.net oder example.org benutzt?
Super, danke! 
|

09-11-2011, 12:20
|
|
jpb
Registrierter Benutzer
|
|
Registriert seit: Nov 2011
Beiträge: 5
|
|
ja genau!
Ich weiß nicht wie ich diese beiden kombinieren soll damit die Daten aus der Datenbank im Kalender als "ausgebucht" markiert werden.
Tut mir leid, bin leider noch Anfänger. :/
|

09-11-2011, 12:23
|
AmicaNoctis
 Moderatorin
|
|
Registriert seit: Jul 2009
Beiträge: 5.550
|
|
Speichere die Daten aus der DB in einem Array. Beim Zusammenbasteln der Kalenderansicht prüfst du für jeden Tag den du ausgibst, ob er in einen Zeitraum aus dem Array fällt und markierst ihn entsprechend.
__________________
Hast du die Grundlagen zur Fehlersuche gelesen? Hast du Code-Tags benutzt? 
Hast du als URL oder Domain-Beispiele example.com, example.net oder example.org benutzt?
Super, danke! 
|

09-11-2011, 13:12
|
|
jpb
Registrierter Benutzer
|
|
Registriert seit: Nov 2011
Beiträge: 5
|
|
ok, vielen Dank und wie mache ich das genau?
Überprüfe ich das mit einer Schleife?
|

15-11-2011, 14:54
|
|
jpb
Registrierter Benutzer
|
|
Registriert seit: Nov 2011
Beiträge: 5
|
|
Moin,
so ich habe es jetzt soweit hinbekommen, dass er die tage die aus der db kommen markiert.
Danke für Deine Hilfe!
Jetzt ist es nur noch so, dass er die Tage doppelt nimmt.
Also z.B. 15 (markiert) | 15 (unmarkiert) | 16 (markiert) | 16 (unmarkiert)
sozusagen 1515 1616 aber er soll ja dann nur die marktierten anzeigen und nicht nochmal die normalen Tage.
PHP-Code:
if ($day_offset > 0) { for ($i=0; $i<$day_offset; $i++) { echo "\t"; echo '<td class="empty_cell">'; echo "\n"; } } for ($day=1; $day<=$total_days; $day++) { if ($day_highlight && ($day == $n_day) && ($month == $n_month) && ($year == $n_year)) { echo "\t"; echo '</td> <td id="day_'.$day.'" style="'.$options['today_class'].'">'.$day.''; echo "\n"; } else { $query = mysql_query("SELECT * FROM belegungsplangebucht WHERE Titel='$Titel'order by Datum2",$db); $num=mysql_NumRows($query); $i=0; while ($i<$num): $row = mysql_fetch_array($query); $Datum1=makedate($row[Datum1]); $Datum2=makedate($row[Datum2]); if (($day == $Datum2 [1]) && ($month == $Datum2 [2])&& ($year == $Datum2 [3])) { echo "\t"; echo '</td> <td id="day_'.$day.'" style="'.$options['today_class'].'">'.$day.''; echo "\n"; } $i++; endwhile; echo "\t"; echo '</td> <td id="day_'.$day.'">'.$day.'</td>'; echo "\n"; } $day_offset++; if ($day_offset == 7) { $day_offset = 0; if ($day < $total_days) { echo "</tr>\n<tr>"; } } }
Habe schon versucht die Abfrage dementsprechend zu ändern aber leider ohne Erfolg. Entweder er zeigt mir nur die markierten oder nur die unmarkierten Tage.
Hat jemand eine Idee?
Vielen Dank und viele Grüße
Paul
|

15-11-2011, 14:58
|
AmicaNoctis
 Moderatorin
|
|
Registriert seit: Jul 2009
Beiträge: 5.550
|
|
Die Ausgabe der unmarkierten Daten solltest du in den else-Teil der if-Anweisung setzen und nicht außerhalb der if-Anweisung, wo sie immer ausgeführt wird.
__________________
Hast du die Grundlagen zur Fehlersuche gelesen? Hast du Code-Tags benutzt? 
Hast du als URL oder Domain-Beispiele example.com, example.net oder example.org benutzt?
Super, danke! 
|

15-11-2011, 14:58
|
wahsaga
 Moderator
|
|
Registriert seit: Sep 2001
Beiträge: 24.482
|
|
__________________
I don't believe in rebirth. Actually, I never did in my whole lives.
|
|
Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
|
|
|
| Themen-Optionen |
|
|
| 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.
HTML-Code ist aus.
|
|
|
|
PHP News
|