Weiß nicht, wo der Fehler liegt...
Sasch
- php
Hallo! Ich habe nen Kalender gefunden, der mir gefällt. Hab ihn eingebaut und dabei einen Fehler entdeckt. Folgendes: Ansich funktioniert er - denke ich - einwandfrei. Nur jetzt hat er ein Problem
http://web244.can21.de/kalender.php?&date=9-2005
wenn ihr den mal anklickt, ist soweit alles okay. Wenn ich jetzt einen Termin anklicke, das sind die rosa hinterlegten Daten, öffnet ein Popup. Hier kommt jetzt der Fehler: Statt September erscheint jetzt im Popup oben Oktober. Mir fehlen die Programmierkenntnisse um zu sehen, woran das liegt. Habt ihr ne Idee? Hier der Quellcode der calendar.php:
Besten Dank und Gruß!!!
... // /////////////////////////////////////////////
///////////////////////////////////////////// //Load the language into usable variables //
//darussol: TRANSLATION (18 May 2004) // : Fill in the names of the days/months in variables //e-man : LOAD TRANSLATION FILE INTO VARIABLES (from darussol)(19 May 2004) // : Put the days/months names from language file into a array
$language_file = "calendar." . $calendar_language; //Language file into variable $fd = fopen( $language_file, "r" ); //Open the language file $fd = fread( $fd, filesize( $language_file ) ); //Read the opened file $language_array = explode( "\n" , $fd ); //Put file info into array
$dayname = array_slice($language_array,0,7); //The names of the days
$monthname = array_slice($language_array,7); //The rest of the language file are the monthnames // /////////////////////////////////////////////
///////////////////////////////////////////// //Use the date to build up the calendar. From the Query_string or the current date // if( isset( $_GET['date'] ) ) list($month,$year) = explode("-",$_GET['date']); else { $month = date("m"); $year = date("Y"); } // /////////////////////////////////////////////
$date_string = mktime(0,0,0,$month,1,$year); //The date string we need for some info... saves space ^_^
$day_start = date("w",$date_string); //The number of the 1st day of the week
///////////////////////////////////////////// //Filter the current $_GET['date'] from the QUERY_STRING // $QUERY_STRING = ereg_replace("&date=".$month."-".$year,"",$_SERVER['QUERY_STRING']); // /////////////////////////////////////////////
///////////////////////////////////////////// //Calculate the previous/next month/year // if( $month < 12 ) { $next_month = $month+1; $next_date = $next_month."-".$year; } else { $next_year = $year+1; $next_date = "1-".$next_year; $next_month = 1; } if( $month > 1 ) { $previous_month = $month-1; $next_month = $month+1; $previous_date = $previous_month."-".$year; } else { $previous_year = $year-1; $previous_date = "12-".$previous_year; $previous_month = 12; } // /////////////////////////////////////////////
// darussol: DEFINITION OF THETRANSLATED MONTH+YEAR TO BE USED IN THE TABLE AND INFO-TITLES (18 May 2004) // e-man : USING THE VALUES OF THE PREVIOUS AND NEXT MONTH FOR THE TITLE DAY (19 May 2004); $table_caption_prev = $monthname[$previous_month-1] . " " . $year; // previous $table_caption = $monthname[date("n",$date_string)-1] . " " . $year; // current if ($next_month == 13){ $next_month = 1; $year++; } $table_caption_foll = $monthname[$next_month-1] . " " . $year; // following
///////////////////////////////////////////// //Print the calendar css code // echo " <style type="text/css"> a.cal_head { color: " . $head_link_color . "; } a.cal_head:hover { text-decoration: none; } .cal_head { background-color: " . $head_background_color . "; color: " . $head_font_color . "; font-family: " . $font_family . "; font-size: " . $head_font_size . "; font-weight: " . $head_font_weight . "; font-style: " . $head_font_style . "; } .cal_days /darussol/ { background-color: " . $days_head_background_color . "; color: " . $days_head_font_color . "; font-family: " . $font_family . "; font-size: " . $days_head_font_size . "; font-weight: " . $days_head_font_weight . "; font-style: " . $days_head_font_style . "; } .cal_content { background-color: " . $content_background_color . "; color: " . $content_font_color . "; font-family: " . $font_family . "; font-size: " . $content_font_size . "; font-weight: " . $content_font_weight . "; font-style: " . $content_font_style . "; } .cal_today { background-color: " . $today_background_color . "; color: " . $today_font_color . "; font-family: " . $font_family . "; font-size: " . $today_font_size . "; font-weight: " . $today_font_weight . "; font-style: " . $today_font_style . "; } .cal_event, a.cal_event /* e-man 17-06-04 */ { background-color: " . $event_background_color . "; color: " . $event_font_color . "; font-family: " . $font_family . "; font-size: " . $event_font_size . "; font-weight: " . $event_font_weight . "; font-style: " . $event_font_style . "; } </style> "; // /////////////////////////////////////////////
///////////////////////////////////////////// //show events in popup? // if (isset ($_GET['show_event'])){ list ($year, $month, $day) = explode ("-", $_GET['event_date']); $query = " SELECT * FROM " . $event_table . " WHERE EventYear = '" . $year . "' AND EventMonth = '" . $month . "' AND EventDay = '" . $day . "' ORDER BY EventTime ASC ";
/* connect to the database */ $database_connection = mysql_connect ($server, $username, $password); mysql_select_db ($database, $database_connection); $result = mysql_query ($query) or die(mysql_error());
/* initize the variabele color_alternated (boolean) */ $color_alternated = false;
/* header of the table */ echo "<table width="100%" border="" . $table_border . "" cellpadding="" . $table_cellpadding . "" cellspacing="" . $table_cellspacing . "">";
$date_string = mktime(0,0,0,$month,$day,$year); $month = sprintf("%01d",$month);
echo "<tr><td align="center" class="cal_head" colspan="2">".$day." " . $monthname[$month] . " ".$year."</td></tr>";
/* loop through the results via a mysql_fetch_assoc () / while ($record = mysql_fetch_assoc ($result)){ if ($color_alternated){ $color_alternated = false; $background_color_row = $event_background_color; } else{ $color_alternated = true; $background_color_row = $event_background_color2; } echo "<tr class="cal_event"> <td style="background-color:".$background_color_row."" width="1">" . $record['EventTime'] . "</td> <td style="background-color:".$background_color_row."">" . nl2br($record['Event']) . "</td> </tr>"; } / close the table */ echo "</table>";
/* bring an exit so the script will terminate*/ exit; } // /////////////////////////////////////////////
///////////////////////////////////////////// //Print the calendar table header // echo " <script language="javascript"> function open_event(date_stamp){ window.open("" . $calendar_script . "?show_event=true&event_date=" + date_stamp, "calendar_popup","height=" . $event_popup_height . ",width=".$event_popup_width.""); } </script> <table border="" . $table_border . "" cellpadding="" . $table_cellpadding . "" cellspacing="" . $table_cellspacing . "" style="height:" . $table_height . "" width="" . $table_width . ""> <tr> <td align="center" class="cal_head"><a class="cal_head" href="" . $_SERVER['PHP_SELF'] . "?" . $QUERY_STRING . "&date=" . $previous_date . "" title="" . $table_caption_prev . "">«</a></td> <td align="center" class="cal_head" colspan="5">" . $table_caption . "</td> <td align="center" class="cal_head"><a class="cal_head" href="" . $_SERVER['PHP_SELF'] . "?" . $QUERY_STRING . "&date=" . $next_date . "" title="" . $table_caption_foll . "">»</a></td> </tr> <tr> <td class="cal_days">".$dayname[0]."</td> <td class="cal_days">".$dayname[1]."</td> <td class="cal_days">".$dayname[2]."</td> <td class="cal_days">".$dayname[3]."</td> <td class="cal_days">".$dayname[4]."</td> <td class="cal_days">".$dayname[5]."</td> <td class="cal_days">".$dayname[6]."</td> </tr><tr> "; // /////////////////////////////////////////////
///////////////////////////////////////////// //The empty columns before the 1st day of the week // for( $i = 0 ; $i < $day_start; $i++ ) { echo "<td class="cal_content"> </td>"; } // /////////////////////////////////////////////
$current_position = $day_start; //The current (column) position of the current day from the loop
$total_days_in_month = date("t",$date_string); //The total days in the month for the end of the loop
///////////////////////////////////////////// //Retrieve events for the current month + year //e-man : added 07 June 04 if ($events_from_database) { $database_connection = mysql_connect ($server, $username, $password); mysql_select_db ($database, $database_connection); $result = mysql_query(" SELECT * FROM " . $event_table . " WHERE EventYear = '" . $year . "' AND EventMonth = '" . $month . "' "); while ($record = mysql_fetch_assoc($result)){ $event[$record['EventDay']] = $record; } } // /////////////////////////////////////////////
///////////////////////////////////////////// //Loop all the days from the month // for( $i = 1; $i <= $total_days_in_month ; $i++) { $class = "cal_content";
if( $i == date("j") && $month == date("n") && $year == date("Y") ) $class = "cal_today";
$current_position++;
/* is there any event on this day? Yes, create a link. No clear the (previous) string */ $link_start = ""; $link_end = "";
/* if there is an event do */ if( isset($event[$i]) ) { $link_start = "<a href="javascript:;" class="cal_event" onclick="javascript: open_event('".$year."-".$month."-".$i."');">"; $link_end = "</a>"; $class = "cal_event"; }
/* for the event filter / / e-man : added 07 June 04 */ $date_stamp = $year."-".$month."-".sprintf( "%02d",$i);
echo "<td align="center" class="" . $class . "">" . $link_start . $i . $link_end . "</td>"; if( $current_position == 7 ) { echo "</tr><tr>\n"; $current_position = 0; } } // /////////////////////////////////////////////
$end_day = 7-$current_position; //There are
///////////////////////////////////////////// //Fill the last columns // for( $i = 0 ; $i < $end_day ; $i++ ) echo "<td class="cal_content"></td>\n"; // /////////////////////////////////////////////
echo "</tr></table>"; // Close the table ?>
Hallo Freunde des gehobenen Forumsgenußes,
Ich habe nen Kalender gefunden, der mir gefällt. Hab ihn eingebaut und dabei einen Fehler entdeckt.
Sehr gut. Du darfst ihn unverzüglich dem Autor der Software mitteilen (am besten über desse Bugtracker, so er einen hat).
Damit hilfst du dem Autor, der seine Software verbessern möchte, und den Nutzern der Software (inklusive dir),
die Verbesserungen an derselben auch ganz toll finden.
Selbst wenn sich jetzt irgendjemand durch den geposteten Quellcode arbeiten und dabei ev. den Fehler
finden würde, so hätte das nur für dich einen Nutzen.
Außerdem könntest du uns mal den Namen der Kalendersoftware verraten.
Gruß
Alexander Brock
hi,
abgesehen von Alexanders hinweise:
Hier der Quellcode der calendar.php:
bitte poste hier nicht so gedankenlos quellcode, und noch dazu in solchen mengen. (vergleiche </faq/#Q-07c> bzgl. "relevantem quelltext".)
darüber hinaus kannst du dir den quelltext von calendar.php hier eigentlich in die haare schmieren.
in den javascript-funktionsaufrufen ist im datum immer noch der september (9) angegeben, und die funktion öffnet die calendar2.php. der fehler wird also vermutlich in dieser liegen. (so viel wenigstens im vorfeld mal selber rauszufinden, wird hier im übrigen eigentlich von _dir_ erwartet.)
aber nein, das ist jetzt keine aufforderung, deren quelltext jetzt ebenfalls wieder komplett hier reinzuknallen.
gruß,
wahsaga
...war der Quelltext von cal2.php, entschuldige bitte, lieber Wahsaga, für diesen Fehler.
Entschuldigung für dieses Posting und Entschuldigung für alles auf dieser Welt, was schlecht ist.
echo $begrüßung;
Meine Antwort basiert rein auf Vermutung. Jede Aussage bitte gedanklich mit einem "möglicherweise" ergänzen.
Statt September erscheint jetzt im Popup oben Oktober.
Den Fehler liegt in der Sprachdatei
$language_file = "calendar." . $calendar_language; //Language file into variable
$fd = fopen( $language_file, "r" ); //Open the language file
$fd = fread( $fd, filesize( $language_file ) ); //Read the opened file
$language_array = explode( "\n" , $fd ); //Put file info into array$dayname = array_slice($language_array,0,7); //The names of the days
$monthname = array_slice($language_array,7); //The rest of the language file are the monthnames
mit der $monthname gefüllt wird. Dort fehlt eine (Leer-)zeile zwischen den Tages und Monatsnamen.
$monthname enthält damit array(0 => 'Januar', 1 => 'Februar', ...)
Ich habe die Array-Keys mal explizit mit angegeben. Damit dürfte der Versatz um den einen Monat zu erklären sein.
//show events in popup?
[...]
list ($year, $month, $day) = explode ("-", $_GET['event_date']);
[...]
$date_string = mktime(0,0,0,$month,$day,$year);
$month = sprintf("%01d",$month);echo "<tr><td align="center" class="cal_head" colspan="2">".$day." " . $monthname[$month] . " ".$year."</td></tr>";
echo "$verabschiedung $name";
hi,
Den Fehler liegt in der Sprachdatei
mit der $monthname gefüllt wird. Dort fehlt eine (Leer-)zeile zwischen den Tages und Monatsnamen.
$monthname enthält damit array(0 => 'Januar', 1 => 'Februar', ...)
man könnte andersherum auch sagen, der fehler liegt dort, wo vergessen wird den index zum zugriff auf dieses array um eins zu dekrementieren ...
gruß,
wahsaga
echo $begrüßung;
$monthname enthält damit array(0 => 'Januar', 1 => 'Februar', ...)
man könnte andersherum auch sagen, der fehler liegt dort, wo vergessen wird den index zum zugriff auf dieses array um eins zu dekrementieren ...
Damit könntest du Recht haben. Ich nehme jedoch an, dass der Autor (vermutlich englischsprachig) sein Script getestet hat und der Sprachdateiersteller einen Hinweis auf die (Leer-)zeile ignoriert hat.
echo "$verabschiedung $name";
hi,
Ich nehme jedoch an, dass der Autor (vermutlich englischsprachig) sein Script getestet hat und der Sprachdateiersteller einen Hinweis auf die (Leer-)zeile ignoriert hat.
nein, dagegen spricht ganz klar die erstellung der monatsübersicht, in der die titelzeile der tabelle mit
$table_caption = $monthname[date("n",$date_string)-1] . " " . $year; // current
bestückt wird.
an der stelle hat der autor es richtig gemacht, an der stelle wo die daten für das popup ausgegeben werden, jedoch nicht.
wenn man jetzt die von dir angesprochene leerzeile in die textdatei einfügen würde, käme zwar evtl. im popup der "richtige" monat heraus - in der monatsübersicht jedoch der vorhergehende bzw. im januar nur ein leerstring.
gruß,
wahsaga
echo $begrüßung;
Ich habe mittlerweile das Script unter der URL http://www.pcdummy.nl/~myphp/ gefunden. Und da alle dortigen Sprachdateien ohne (Leer)zeile sind, hatte ich mich auch schon vor dem Lesen deines "Gegenbeweises" entschlossen, meinen Gedankengang zugunsten deines wieder zu verwerfen.
echo "$verabschiedung $name";
Tach,
dedlfix: Dein Posting-Script wird nicht interpretiert. Ich kann den Quelltext sehen, das ist sehr unprofessionell von Dir.
Gruß,
Stefan
puts "Hallo " + gets.chomp + "."
?> Stefan
=> Hallo Stefan.
dedlfix: Dein Posting-Script wird nicht interpretiert. Ich kann den Quelltext sehen, das ist sehr unprofessionell von Dir.
Er hat kein Script. ;-)
Einen schönen Samstag noch.
Gruß, Ashura