Kalender fertig - Einbau mit Php?
Wul-Wul
- php
Hi!
Ich hab folgenden Kalender zusammengeflickt (mein erster Datenbankversuch - mittlerweile gelungen - danke noch mal an alle Helfenden...)
http://web244.can21.de/cal/index.php
Jetzt meine Frage: wenn ich den mit Php-include einbaue, hat sichs mit der Herrlichkeit. Das CSS ist weg, jegliche Einstellungen sind dahin und zusätzlich erhält man die Anzeige "Fehler auf der Seite", was wohl an der Overlib-Funktion liegt, die ja auch nicht mehr geht.
Ich weiß nicht, wie man das alles so einbaut, dass er "einfach so" funktiniert wie beim angegebenen Link. Deshalb hoffe ich auf Eure Hilfe!! Vielen Dank, Gruß
Wul-Wul
Moin!
Jetzt meine Frage: wenn ich den mit Php-include einbaue,
Mit einem relativen Pfad...
include "./cal/index.php"
hat sichs mit der Herrlichkeit. Das CSS ist weg, jegliche Einstellungen sind dahin und zusätzlich erhält man die Anzeige "Fehler auf der Seite", was wohl an der Overlib-Funktion liegt, die ja auch nicht mehr geht.
Das Problem sind hier sicherlich die Pfade. Wenn Du includierst bildest Du eine Art 'Gesamtskript', welches abgearbeitet wird. Die Pfade müssen also ausgehend von diesem dann zu den benötigten Dateien zeigen. Vielleicht kopierst Du den Kladderadatsch einfach in das gleiche Verzeichnis.
Weiteres Problem:
Du erzeugst wahrscheinlich sowas:
<html>
<head>
[...]
</head>
<body>
[...]
<html>
<head>
[...]
</head>
<body>
[...]
</body>
</html>
</html>
Das geht bestimmt schief, weil der zweite Header ignoriert wird. Du musst also die Skripte anpassen.
Du solltest also nicht nur einen laxen Blick in den Quelltext dessen wagen, was der Browser Dir anzeigt.
Ich weiß nicht, wie man das alles so einbaut, dass er "einfach so" funktiniert wie beim angegebenen Link. Deshalb hoffe ich auf Eure Hilfe!! Vielen Dank, Gruß
Willst Du nicht doch lieber kernen warum und wie sowas funktioniert? Das erscheint mir, dass Du ein Fahrzeug benutzt ohne Dir über dessen grundlegenste Funktionen im klaren zu sein.
MFFG (Mit freundlich- friedfertigem Grinsen)
fastix®
Hi!
"Willst Du nicht doch lieber kernen warum und wie sowas funktioniert? Das erscheint mir, dass Du ein Fahrzeug benutzt ohne Dir über dessen grundlegenste Funktionen im klaren zu sein."
Das ist so nicht richtig. Bevor ich poste, probiere ich immer, wie es für mich logisch wäre, wenn das nicht geht, poste ich oder probiere es noch mal. Und dann vielleicht noch mal. Manchmal wünscht man sich aber den Erfolg und wenn man beim dritten Mal noch kein Ergebnis erzielt und es Leute gibt, die das Problem kennen, warum nicht fragen? Meistens ist die Lösung dann logisch, der Groschen fällt und für das nächste Mal ist man schlauer.
Ebenso verhält es sich jetzt mit meiner neuen Frage. Ich habe im Script gesucht und gesucht und werde nicht fündig. Mein Script liegt unter ../cal/index.php, also unter dem Ordner cal auf dem Server. Wenn ich jetzt beim Kalender die >>-Symbole drücke, um auf den nächsten Monat zu springen, komme ich auf eine andere index.php, die direkt auf dem Server liegt. Also muss irgendwo im Script ein Verweis sein, den ich aber nicht finde! Ich habe das Ganze in Word kopiert, um es zu durchsuchen, war direkt auf dem Surfer drauf, habe es mit Suche-Fukntionen durchlöchert und finde einfach nix! Deshalb poste ich hier jetzt mal, vielleicht wisst ihr was ich ändern muss...
Es muss also, um noch mal Fakten zu nennen, statt auf index.php auf cal/index.php zugreifen können.
Besten Dank!
<!DOCTYPE html
PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<title>eventControl</title>
<style type="text/css" media="screen">
@import url(inc/calendar.css);
</style>
<script type="text/javascript" src="inc/jsscript.js"></script>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" />
</head>
<body>
<?php
include_once 'inc/mysql.inc.php';
include_once 'inc/function.inc.php';
$year = (isset($_GET['y']) && preg_match('/^\d{4}$/',$_GET['y'])) ? $_GET['y'] : date('Y');
$month = (isset($_GET['m']) && preg_match('/^\d{1,2}$/',$_GET['m']) && ($_GET['m'] < 13)) ? $_GET['m'] : date('n');
$days = date('t',mktime(0,0,0,$month,1,$year));
$start_col = date('w',mktime(0,0,0,$month,1,$year))-1;
$rows = ($start_col == 5 || $start_col == -1) ? ceil($days/7)+1 : ceil($days/7);
$day=1;
$monthname = array('Januar','Februar','März','April','Mai','Juni','Juli','August','September','Oktober','November','Dezember');
$prev_month = ($month==1) ? 12 : $month-1;
$prev_year = ($month==1) ? $year-1 : $year;
$next_month = ($month==12) ? 1 : $month+1;
$next_year = ($month==12) ? $year+1 : $year;
$day = 1;
echo '<div id="calendarbox">';
echo '<table><tr class="border_trl"><th><a href="'.basename($_SERVER['PHP_SELF']).'?m='.$prev_month.'&y='.$prev_year.'">«</a></th><th colspan="5">'.$monthname[$month-1].' '.$year.'</th><th><a href="'.basename($_SERVER['PHP_SELF']).'?m='.$next_month.'&y='.$next_year.'">»</a></th></tr>';
echo '<tr class="border_trl"><th class="dayname">Mo</th><th class="dayname">Di</th><th class="dayname">Mi</th><th class="dayname">Do</th><th class="dayname">Fr</th><th class="dayname">Sa</th><th class="dayname">So</th></tr>';
for($a=0;$a<$rows;$a++){
echo '<tr>';
$start_col = ($start_col == -1) ? 6 : $start_col;
if($start_col>0 && $day==1){
for($aa=$start_col;$aa>0;$aa--){
echo '<td class="empty"> </td>';
}
}
for($b=$start_col;$b<7;$b++){
$cdb->select(sprintf("select substring(eventtime,1,5) _eventtime, topic, shortdesc from e_event where dayofmonth(eventdate) = %d && month(eventdate) = %d && year(eventdate) = %d order by eventtime asc",$day,$month,$year));
if($cdb->getRecords()>0){
$js_arr = array();
while($row = $cdb->fetchArray()){
$js_arr[]= 'new Array(''.$row['_eventtime'].'',''.stripslashes($row['topic']).'',''.stripslashes($row['shortdesc']).'')';
}
$js_arr = 'new Array('.join(',',$js_arr).')';
}
if(!isset($js_arr)){
$s_day = ($day == date('j') && $month == date('n') && $year == date('Y')) ? '<td class="today">'.$day.'</td>' : '<td>'.$day.'</td>';
}else{
$s_day = ($day == date('j') && $month == date('n') && $year == date('Y')) ? '<td class="today" onmouseover="create_list('.$js_arr.')" onmouseout="remove_list()"><a href="showevent.php?d='.$day.'&m='.$month.'&y='.$year.'">'.$day.'</a></td>' : '<td class="event" onmouseover="create_list('.$js_arr.')" onmouseout="remove_list()"><a href="showevent.php?d='.$day.'&m='.$month.'&y='.$year.'">'.$day.'</a></td>';
}
echo ($day>$days) ? '<td class="empty"> </td>' : $s_day;
$day++;
unset($js_arr);
}
echo '</tr>';
$start_col = 0;
}
echo '</table></div>';
?>
<div id="eventbox"></div>
</body>
</html>
Moin!
Willst Du nicht doch lieber kernen warum und wie sowas funktioniert? Das erscheint mir, dass Du ein Fahrzeug benutzt ohne Dir über dessen grundlegenste Funktionen im klaren zu sein.
Das ist so nicht richtig. Bevor ich poste, probiere ich immer, wie es für mich logisch wäre, wenn das nicht geht, poste ich oder probiere es noch mal. Und dann vielleicht noch mal. Manchmal wünscht man sich aber den Erfolg und wenn man beim dritten Mal noch kein Ergebnis erzielt und es Leute gibt, die das Problem kennen, warum nicht fragen? Meistens ist die Lösung dann logisch, der Groschen fällt und für das nächste Mal ist man schlauer.
Die Lösung ist bei geringsten Grundkenntnissen ('Ein Auto hat einen Motor, eine Kupplung, ein Getriebe und Bremsen.') leicht zu finden. Ich finde es nicht gut, dass Du statt zu lernen hier herumprobierst. Diese Methode ist denkbar schlecht geeignet.
Es muss also, um noch mal Fakten zu nennen, statt auf index.php auf cal/index.php zugreifen können.
Warum änderst Du es nicht kurzerhand im Quelltext?
Du suchst etwas, was wie ein HTML-Link aussieht, und sich an der zu erwartenden Stelle befindet:
<! Das und der Kladderadatsch am Ende fliegt raus, wenn Du includieren willst:
<!DOCTYPE html
PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<title>eventControl</title>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" />
</head>
<body>
.....
</body>
</html>
//-->
<! Das verbaust Du angepasst in die Seite in welche Du den Kalender includieren willst:
<style type="text/css" media="screen">
@import url(inc/calendar.css);
</style>
<script type="text/javascript" src="inc/jsscript.js"></script>
//-->
<?php
/* Diese Pfade musst Du anpassen */
include_once 'inc/mysql.inc.php';
include_once 'inc/function.inc.php';
[....]
/* Und hier haben wir den Kandidaten für die Anpassung. Da basename($_SERVER['PHP_SELF']) nirgendwo in dem aufgeführten Skript belegt wird vermute ich, dies geschieht in inc/function.inc.php. Dort ist vermutlich eine Funktion basename definiert. Ergänze diese so, dass Dein Pfad berücksichtigt wird. oder ersetze den Aufruf von "basename($_SERVER['PHP_SELF'])" in der /cal/index.php einfach durch: 'http://dein_host/dein_dir/deine_datei.php'
echo ' [...] basename($_SERVER['PHP_SELF']).'?m='.$next_month.'&y='.$next_year.
echo ' [...] 'http://dein_host/dein_dir/deine_datei.php?m='.$next_month.'&y='.$next_year.
Es ist wirklich einfach und mit grundlegensten Grundkenntnissen zu bewerkstelligen. Auch ein Autoelektriker muss sich bis heute mit den Grundzügen der Metall- und Kunststoffverarbeitung auskennen. Du versuchst ganz offensichtlich das Erlernen von PHP-Grundlagen zu vermeiden, willst es aber verwenden. Was Du machst ist falsch, daran ändern auch Deine wortreichen Erklärungen, die die Lernverweigerung entschuldigen sollen, nichts. Du wirst bei Beibehaltung dieses Arbeitsstils irgendwann ordentlich auf die Fresse fliegen und bis dahin Deine Ressourcen oder die der Firma, die Dich bezahlt ordentlich verschwenden. Das, was Du da baust wird aufgrund der Tatsache, dass Du nicht weisst, was Du tust, Frickelware und keinesfalls ein Mercedes. Probieren führt zu Ergebnissen die zufällig und auch nur unter genau den probierten Bedingungen funktionieren. Selbst eine einfache Temperaturänderung führt bei Deiner methode wieder zu langwierigen neuen Testreihen. Inzwischen hättest Du es lernen können.
Was machst Du eigentlich, wenn Dir jemand sagt, über dieses Fertigskript könnte man leicht in Deinen Server einbrechen? Kannst Du das Skript 'härten'?
Es greift immerhin auf MySQL zu. Da könnte jemand auf die Idee kommen und einen der gängigen Exploits ausprobieren (MySQL-Injection).
Lerne PHP... bevor Du es verwendest.
MFFG (Mit freundlich- friedfertigem Grinsen)
fastix®
Moin!
Moin!
/* Und hier haben wir den Kandidaten für die Anpassung. Da basename($_SERVER['PHP_SELF']) nirgendwo in dem aufgeführten Skript belegt wird vermute ich, dies geschieht in inc/function.inc.php. Dort ist vermutlich eine Funktion basename definiert. Ergänze diese so, dass Dein Pfad berücksichtigt wird. oder ersetze den Aufruf von "basename($_SERVER['PHP_SELF'])" in der /cal/index.php einfach durch: 'http://dein_host/dein_dir/deine_datei.php'
Ich habe gerde gesehen: basename() ist eine PHP-eigene Funktion. Diese extrahiert den reinen Dateinamen aus einer Pfadangabe. PHP hat hunderte solcher Funktionen...
echo ' [...] basename($_SERVER['PHP_SELF']).'?m='.$next_month.'&y='.$next_year.
Warum der Autor diese an dieser Stelle verwendet hat kann ich nicht sagen, aber wer fertige Skripte benutzt integriert grundsätzlich auch die dortigen 'Fehler' mit. Hier hat der Autor offensichtlich versucht, so universell zu schreiben, dass es bei Dir nicht geht....
Eine Lösung ist also den oben genannten Pfad absolut zu setzen oder eben mit:
echo ' [...] 'http://'.$_SERVER['HTTP_HOST'].'/dein(e)_Verzeichnis(se)/deine_SkriptDatei?m='.$next_month.'&y='.$next_year.
oder mit einer relativen Pfadangabe:
echo ' [...] 'deine_SkriptDatei?m='.$next_month.'&y='.$next_year.
oder mit einer relativen Pfadangabe im Falle, es handelt sich um die index.php:
echo ' [...] './?m='.$next_month.'&y='.$next_year.
zu arbeiten. Die Lösungsmöglichkeiten sind sehr zahlreich und hängen davon ab, was Du genau willst.
MFFG (Mit freundlich- friedfertigem Grinsen)
fastix®
Also erst einmal vielen Dank für dieses umfangreiche Repost. Bevor ich jetzt anfange mir das noch mal zu gemüte zu führen, möchte ich nur mal kurz sagen, dass ich das hobbymäßig mache, ohne Geld von irgendwem für irgendwas zu bekommen. HTML habe ich grundsätzlich auch so gelernt und man will halt immer schnellstmöglich Ergebnisse sehen. Insofern bitte ich zu entschuldigen, dass ich hier nicht der "Poster mit dem Heiligenschein" bin...