Event-Kalender Eigenschaften Vorraussetzungen Hilfe und Tipps
Mit dem Event-Kalender können Sie Events (Ereignisse) in einer DB-Tabelle speichern. Die Events werden übersichtlich in einem Kalender angezeigt. Die Navigation des Kalenders läuft vollständig über JavaScript (Ajax), somit ist kein Seitenwechsel notwendig.

Dieser Kalender zeigt alle Tage eines Monats in Form einer Tabelle an. Dabei kann über Buttons zum Vormonat/Vorjahr oder kommenden Monat/Jahr navigiert werden, auch die Auswahl eines bestimmten Wochentags, der Woche, Monats oder Jahres ist möglich.
Der Eingetragene Event, der Tag oder das Kalenderblatt können direkt ausgewählt werden. Ein Journal zeigt alle Events im Kalenderjahr an. Flexible Größe - Der Kalender passt sich automatisch der Breite der Seite an.
Die Events können direkt im Kalender eintragen oder bearbeitet werden. Vielfältige Sortier-. und Suchfunktionen machen das auffinden der Events zu einem Kinderspiel.
Eigenschaften
- Events direkt im Kalender eintragen oder bearbeiten.
- Flexible Größe - Der Kalender passt sich automatisch der Breite der Seite an.
- Passwort-Schutz (auch für mehrere Benutzer).
- Anzeige von Feiertagen (Optional).
- Jährliche Wiederholung eines Events (für Geburtstage, Feiertage etc.).
- Wiederholung eines Events - Tage-/Wochen-/Monatsweise (Vielen Dank an:
RaHa
). - Events über
Ziehen und Ablegen
(Drag & Drop) verschieben, kopieren oder löschen (Admin.). - Individuelle Monatsbilder im Kalender einbinden (Optional).
- Einen Permalink zu einem Event setzen.
- Tastaturbefehle - Steuerung des Kalenders über die Tastatur - F2 (Tastaturbelegung).
- Einen Tag direkt über die Tastatur anwählen 0 … 9 (Ziffernblock).
- Eine Woche über die Tastatur anwählen STRG + 0 … 9 (Ziffernblock).
- Neuen Event eintragen UMSCHALT + 🖰 Linke Maustaste, auf einen Tag im Kalender klicken.
- Event bearbeiten UMSCHALT + 🖰 Linke Maustaste, auf einen Event im Kalender klicken.
Weitere Eigenschaften
- Jeder Benutzer kann nur seinen eigenen Event bearbeiten (der Admin. alle)!
- Einfaches ändern der Farben des Kalenders durch eine externe CSS-Datei.
- Eine schnelle Suchfunktion im Kalender.
- Ein Kalenderblatt für jeden Kalendertag.
- Prioritäten (farbige Markierungen) für Events setzen.
- Unterstützung für BB-Code.
HTML-Tags können in der Beschreibung verwendet werden.- URLs werden in der Beschreibung des Events autom. umgewandelt.
- Die (Kalender-)Dateien sind mit dem Zeichensatz UTF-8 kodiert.
- Anzeige einer Liste der aktuellen Events .
- Ein Event als iCal (ics-Datei) exportieren.
- Die Wochentage (Mo-So) sind anklickbar, diese zeigen dann alle Events des Wochentags im Monat oder im Jahr an.
- Der Tag zeigt alle Events des gewählten Tages an.
- Smileys und Symbole - Emojis (😁💔🤣💋🤟🌹😎👍 …) werden nativ dargestellt.
- Schnelle Auswahl von bestimmten Monaten oder Jahren.
- In den Suchoptionen kann man eine bestimmte Priorität auswählen.
- Der Tag, das Kalenderblatt (und andere) haben eine Navigation , mit dieser kann vor- oder zurück gesprungen werden.
- Ein Doppelklick im Kalender auf einem Kalendertag, zeigt die Woche an.
- Das Event-Eingabefeld und das Eingabefeld für die Suche haben eine Combobox, mit dieser können bereits eingetragene Events ausgewählt werden.
- PHP 7 Unterstützung.
- Serienevents eintragen - Events in den Kalender eintragen die über mehrere Tage gehen.
- Anzeige der Weltzeit (eine Auswahlliste im heutigen Kalenderblatt).
- Ein Journal R für alle Events (komplette Übersicht) im Kalenderjahr.
- Gruppenoptionen: Der Admin. kann mehrere Events (gleichzeitig!) bearbeiten, drucken, exportieren oder löschen.
- Das Datumsformat ist anpassbar.
- Vorschau-Funktion beim eintragen oder aktualisieren eines Events (Optional).
- Mit der Suche kann nach mehreren Begriffen gesucht werden.
- Der Tag ist in Stunden aufgeteilt. Beim aktuellen Tag wird die Uhrzeit hervorgehoben.
- ICS-Dateien importieren und (Optional) alle Events in den Kalender einfügen.
- Autom. E-Mail Benachrichtigung - Events können per E-Mail versendet werden (Beta!).
- Private Events - Diese werden erst nach der Anmeldung angezeigt.
- Jedem angemeldeten Benutzer nur seine Events anzeigen (Optional).
- Events können in Kategorien sortiert werden.
- Die Felder "Beschreibung", "Ort", "Priorität", "Kategorie" und "Aufgabe" können als Pflichtfelder gesetzt werden.
Neu
- Die Adressen in der Adressdatenbank verwalten (Optional).
- Ein Kontextmenü in der Navigationsleiste (öffnen mit der rechten Maustaste).
- Tastaturbefehle: Mit ALT + ⭣ zur Ausgabe oder mit ALT + ⭡ zum Kalender springen.
- Menü und Benutzer-Optionen, Taste: F10
- Synchronisierung der Events beim bearbeiten von mehreren Einträgen (Optional).
- Dunkler Modus (Dark-Mode) - je nach Browser / Betriebssystem Einstellung!
![[Bildschirmfoto]
Der Event-Kalender mit einem Monatsbild. [Bildschirmfoto]
Der Event-Kalender mit einem Monatsbild.](hilfe_kalender/monatsbilder.webp)
Voraussetzungen
Webserver mit PHP 8.0 (oder höher), eine MySQL oder MariaDB-Datenbank. Einen aktuellen Browser (zum Beispiel: Microsoft Edge, Mozilla Firefox oder Google Chrome).
Führen Sie folgende Anweisungen nacheinander aus:
- In der Datei:
verbindung.php
tragen Sie Ihre Zugangsdaten (zur Datenbank) ein. Dort sind auch weitere Einstellungen möglich. - Laden Sie alle Dateien auf Ihrem Webserver hoch.
- Rufen Sie die Datei:
installation.php
in Ihrem Browser auf. - Rufen Sie die Datei:
demo.htm
in Ihrem Browser auf und tragen Sie Ihre ersten Event in den Kalender ein. - Die Datei:
installation.php
kann nun vom Webserver gelöscht werden.
➤ Demo anzeigen - Was gibt es neues?
Viel Spaß damit!
➤
Mit einer transportablen (SQLite) Datenbank und allen Grundfunktionen, der kleine Bruder
Event-Kalender (SQLite)

Hilfe und Tipps
![]() |
Grundfunktionen
Spezielle Mausfunktionen
Kalender Funktionen
Diverses
|
Den Event-Kalender einbinden
Der Kalender lässt sich in jede HTML-Seite einbinden, einfach den Blau hervorgehobenen Text in die Seite einfügen.
<!DOCTYPE html> <html lang="de"> <head> <meta charset="UTF-8"> <title>Kalender</title> <link rel="preload" href="kalenderstyle.css" as="style"> <link rel="preload" href="kalenderscript.js" as="script"> <link rel="stylesheet" href="kalenderstyle.css"> <script type="text/javascript" src="kalenderscript.js"></script> </head> <body> <div id="kalender"></div> </body> </html>
Den Event-Kalender in ein anderes Verzeichnis einbinden
Die Relativen Pfade anpassen, ausgehend vom aktuellen Verzeichnis in dem der Verweis liegt!
<!DOCTYPE html> <html lang="de"> <head> <meta charset="UTF-8"> <title>Kalender</title> <link rel="preload" href="deinverzeichnis/event-kalender/kalenderstyle.css" as="style"> <link rel="preload" href="deinverzeichnis/event-kalender/kalenderscript.js" as="script"> <link rel="stylesheet" href="deinverzeichnis/event-kalender/kalenderstyle.css"> <script src="deinverzeichnis/event-kalender/kalenderscript.js"></script> </head> <body> <div id="kalender"></div> </body> </html>
➤ In der Datei: kalenderscript.js (Zeile: 19 ) folgendes anpassen:
const verzeichnis = "deinverzeichnis/event-kalender/";
Ein Hintergrundbild für den Event-Kalender
Öffne die Datei: "kalenderstyle.css" und entferne die folgenden CSS-Kommentarzeichen (
/* Kalender */ div#kalender { box-shadow: 1px 1px 10px #CFCFCF;/* background-image: url("hintergrundbild.jpg");*/ background-repeat: No-Repeat; background-size: Cover; } /* Tabelle */ table#tafel { font-family: Verdana, Sans-Serif; background-color: #F5F5F5; border-collapse: Collapse; empty-cells: Hide; width: 100%;/* opacity: 0.85;*/ cursor: Default; box-shadow: 1px 1px 0px 0px #c3c3c3; }
![[Bildschirmfoto]
Der Event-Kalender mit einem Hintergrundbild. [Bildschirmfoto]
Der Event-Kalender mit einem Hintergrundbild.](hilfe_kalender/hintergrund.webp)
Die Wochennummern ein.- und ausblenden
Die Wochennummern per Ziehen
ein.- und ausblenden oder Taste # drücken.

Den Event-Kalender als APP installieren
Voraussetzung: Windows 10 und Microsoft Edge (Chromium).- Die Datei: "demo.htm" mit CSS anpassen (Optional).
<style> body { margin: 0 0 850px 0; } div#kalender { box-shadow: unset; } </style>
- Browser: Microsoft Edge (Chromium) öffnen und die Datei in der Adresszeile aufrufen.
- Im Menü folgendes auswählen:
- Fertig
Einen Tag, einen Wochentag oder eine Woche farbig hervorheben
Die folgende CSS-Anweisung, in der Datei: "kalendericons.css", hebt die Wochentage Samstag und Sonntag rot hervor:
.Samstag, .Sonntag { background-color: #FF9595 !important; }

td:nth-child(4) {
background-color: #FF9595 !important;
}
Den 10 Monatstag hervorheben:
#n10 {
background-color: #FF9595 !important;
}
Die 50 Woche hervorheben:
#kw50 {
background-color: #FF9595 !important;
}
Den 02.12.2021 hervorheben:
td[data-day="2021-12-02"] {
background-color: #FF9595 !important;
}
Ein Hintergrundbild für einem bestimmten Tag:
td[data-day="2021-12-24"] {
background-image: url("monatsbilder/baum.gif");
background-size: Contain;
background-repeat: No-Repeat;
background-position: Right;
}
Audio-Ausgabe des Kalenders deaktivieren
Öffnen Sie die Datei: "kalenderscript.js", suchen Sie nach folgendem Eintrag:
const audioausgabe = true;
Ersetzen Sie: true
durch: false
Events über "Ziehen und Ablegen" verschieben
Events über Ziehen und Ablegen
(Drag and Drop) verschieben.


Einen Tag direkt über die Tastatur anwählen
• Einen Tag direkt über die Tastatur 0 … 9 (Ziffernblock) anwählen.
• Eine Woche mit STRG + 0 … 9 (Ziffernblock) anwählen.
• Einen Monat mit ALT + 0 … 9 (Ziffernblock) anwählen.
• Einen Wochentag mit 1 … 7 (Buchstabenblock) anwählen.
Achtung! Wenn der Kalender auf einer Seite eingebunden wird, sollten keine weiteren Formulare (z.B.: Kontaktformular) auf der Seite stehen, dies kann Probleme verursachen! Entweder das andere Formular entfernen oder die Steuerung des Kalenders über die Tastatur deaktivieren (siehe nächster Tipp).
Steuerung des Kalenders über die Tastatur deaktivieren
Manchmal ist es notwendig, die Tastaturbefehle die der Kalender verwendet zu deaktivieren.
Zum Beispiel wenn weitere Formulare auf der Seite vorhanden sind.
Öffnen Sie die Datei: "kalenderscript.js", suchen Sie nach folgendem Eintrag:
const tastaturnavigation = true;
Ersetzen Sie: true
durch: false
Formularfelder ausblenden
Formularfelder die für die Eingabe eines Events nicht benötigt werden lassen sich ganz einfach per CSS ausblenden.
In der Datei: "kalenderformfelder.css" zum Abschnitt: /* Formularfelder ausblenden
*/ gehen.
Und dort die gewünschten Formularfelder deaktivieren.
/* Formularfelder ausblenden */ /* table#tafel .ausblenden_volltag, table#tafel .ausblenden_dauer, table#tafel .ausblenden_ort, table#tafel .ausblenden_prioritaet, table#tafel .ausblenden_kategorie, table#tafel .ausblenden_kopieren, table#tafel .ausblenden_wiederholung, table#tafel .ausblenden_beschreibung, table#tafel .ausblenden_privat, table#tafel .ausblenden_aufgabe { display: None; } */
Beispiel:
/* Formularfelder ausblenden */ /* table#tafel .ausblenden_volltag, table#tafel .ausblenden_dauer, table#tafel .ausblenden_ort, table#tafel .ausblenden_prioritaet, table#tafel .ausblenden_kategorie, */ table#tafel .ausblenden_kopieren, table#tafel .ausblenden_wiederholung, table#tafel .ausblenden_beschreibung, table#tafel .ausblenden_privat, table#tafel .ausblenden_aufgabe { display: None; }
Ausgeblendet wird nun: Kopieren, Wiederholung, Beschreibung, Privat und Aufgabe.
![[Bildschirmfoto]
Der Event-Kalender mit zahlreichen Optionen. [Bildschirmfoto]
Der Event-Kalender mit zahlreichen Optionen.](hilfe_kalender/optionen.webp)
Für Experten!
Spezielle Scripte für den Event-Kalender
finden Sie unter:
event-kalender.checkip.net
iCal-Export
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
<?php
/*
* Event-Kalender - Events exportieren - ical_events_exportieren.php (utf-8)
* origin: - » » werner-zenk.de
* modify: RaHa
* Scriptname z.B.: /var/www/vhosts/domain.tld/kalender/kalender2srvics.php
* domain.tld ist durch den eigenen Domainnamen zusetzen!
*/
session_start();
// Verbindungsdaten zur Datenbank
require_once("dbinfo.inc.php");
// ersetzen mit eigener Domain
$StrDomain = "myDomain";
// ersetzen mit gültigem Path
$StrPath = "/var/www/vhosts/" . $StrDomain . "/ics/";
// Standarddateiname der ICS-Datei, ggf. ändern
$StrFileName = $TABLE_PREFIX;
/*
* Aufruf unter Plesk - Geplante Aufgaben oder crontab (stündlich oder anders):
* $StrPath.kalender2srvics.php"
* oder $StrPath.kalender2srvics.php?pass=XXX"
* Kalenderdatei wird gespeichert unter $StrPath.$abfragename.ics
* mit Smartphone wird diese als Kalenderabo abonniert: $StrDomain/ics/$abfragename.ics
* Alarm: 1 Tag und 1 Stunde vor dem Event, wird nur gesetzt wenn das Eventdatum nach dem aktuellen Datum liegt
* Prioritäten >15 werden hier nicht gespeichert
* getestet mit iPhone, iPad, Mac OS X, iCal, Thunderbird Mac/Win
*/
/*
* Events als ICS exportieren
*/
$abfragename = "";
// Parameter via URL-Aufruf
if (isset($_REQUEST['pass'])) {
$abfragename = $_REQUEST['pass'];
}
// Parameter via Scriptaufruf
if (isset($argv[1])) {
$abfragename = $argv[1];
}
mb_internal_encoding("UTF-8");
// Verbindung zur Datenbank aufbauen
$db_link = mysqli_connect($DB_HOST, $DB_BENUTZER, $DB_PASSWORT, $DB_NAME);
mysqli_query($db_link, "SET NAMES 'utf8'");
$sql = "SELECT * FROM " . $TABLE_PREFIX . "_kalender ORDER BY start";
$db_erg = mysqli_query($db_link, $sql);
if (!$db_erg) {
die('Ungültige Abfrage: ' . mysqli_error());
}
$str_suche = chr(13) . chr(10);
$str_ersatz = '\n';
$eol = '\n';
$cal_timestamp = time();
$cal_ics_content = "BEGIN:VCALENDAR" . $eol . "METHOD:PUBLISH" . $eol . "VERSION:2.0" . $eol . "CALSCALE:GREGORIAN" . $eol . "PROID:domain.tld" . $eol;
while ($event = mysqli_fetch_array($db_erg)) {
if ($event["prioritaet"] < 16) {
sscanf($event["start"], "%4s-%2s-%2s %2s:%2s", $dbJahr, $dbMonat, $dbTag, $dbStunde, $dbMinute);
sscanf($event["ende"], "%4s-%2s-%2s %2s:%2s", $dbJahr2, $dbMonat2, $dbTag2, $dbStunde2, $dbMinute2);
$cal_start = $dbJahr . $dbMonat . $dbTag . 'T' . $dbStunde . $dbMinute . '00';
$cal_end = $dbJahr2 . $dbMonat2 . $dbTag2 . 'T' . $dbStunde2 . $dbMinute2 . '00';
$cal_current_time = date("Ymd") . 'T' . date("His");
$cal_title = $event["event"];
$cal_location = $event["adresse"];
$cal_description = strip_tags($event["beschreibung"]);
$cal_description = preg_replace('/\[.*?\](.*)\[\/.*?\]/isU', '', $cal_description);
$cal_description = str_replace($str_suche, $str_ersatz, $cal_description);
$cal_url = "";
$alarm = "ALARM";
$cal_alarm_datecreate = date_create($dbJahr . '-' . $dbMonat . '-' . $dbTag . ' ' . $dbStunde . ':' . $dbMinute . ':00');
$cal_alarm_timestamp = date_timestamp_get($cal_alarm_datecreate);
// wenn aktuelle Zeit vor Event, dann keinen Alarm auslösen
if ($cal_alarm_timestamp < $cal_timestamp) {
$alarm = "NOALARM";
}
// wenn in Beschreibung NOALARM als Textzeile vorhanden, dann keinen Alarm auslösen
if (strpos($cal_description, "NOALARM")) {
$alarm = "NOALARM";
}
// z.B.: wenn Priorität = 3, dann wenn Event-Name=Abfragename, dann keinen Alarm auslösen
if ($event["prioritaet"] = 3) {
if ($event["name"] !== $abfragename) {
$alarm = "NOALARM";
}
}
$cal_ics_content .= 'BEGIN:VEVENT' . $eol .
'UID:' . $cal_start . $event["id"] . $eol .
'DTSTART:' . $cal_start . $eol .
'DTEND:' . $cal_end . $eol .
'LOCATION:' . $cal_location . $eol .
'DTSTAMP:' . $cal_current_time . $eol .
'SUMMARY:' . $cal_title . $eol .
'URL;VALUE=URI:' . $cal_url . $eol .
'DESCRIPTION:' . $cal_description . $eol;
if ($alarm !== "NOALARM") {
// obige Zeile vor $cal_ics_content .= 'BEGIN:VEVENT'.$eol. verschieben, wenn das gesamte Event nicht gespeichert werden soll
$cal_ics_content .= 'BEGIN:VALARM' . $eol .
'TRIGGER:-PT1H' . $eol .
'ATTACH;VALUE=URI:Basso' . $eol .
'ACTION:AUDIO' . $eol .
'DESCRIPTION:' . $cal_title . $eol .
'END:VALARM' . $eol .
'BEGIN:VALARM' . $eol .
'TRIGGER:-P1D' . $eol .
'ATTACH;VALUE=URI:Basso' . $eol .
'ACTION:AUDIO' . $eol .
'DESCRIPTION:' . $cal_title . $eol .
'END:VALARM' . $eol;
}
$cal_ics_content .= 'END:VEVENT' . $eol;
}
}
$cal_ics_content .= 'END:VCALENDAR';
// ics-file begin
if ($abfragename !== "") {
$StrFileName = $abfragename;
}
$StrFileName = $StrPath . $StrFileName . ".ics";
$IntFileOpenHandle = fopen($StrFileName, "wb");
fwrite($IntFileOpenHandle, $cal_ics_content);
fclose($IntFileOpenHandle);
// ics-file end
?>
CSV-Export / Import
CSV-Export Outlook
1. CSV-Datei vom Event-Kalender exportieren
Quelltext: csv_outlook_export.php Ausblenden ❘ Kopieren ❘ Link ❘ Zeilen ❘
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
<?PHP
/*
* Outlook CSV-Export für Event-Kalender - csv_outlook_export.php (utf-8)
* ©RaHa
* Teile des Scripts wurden übernommen von - https://werner-zenk.de
*
Dieses Script wird in der Hoffnung verteilt, dass es nützlich sein wird, aber ohne irgendeine Garantie;
ohne auch nur die implizierte Gewährleistung der Marktgängigkeit oder Eignung für einen bestimmten Zweck.
Weitere Informationen finden Sie in der GNU General Public License.
Siehe Datei: license.txt - http://www.gnu.org/licenses/gpl.html
Sie können diese Datei unter den Bedingungen der GNU General Public License frei verwenden und weiter verbreiten.
*
* Sie können Änderungen vornehmen oder individuell anpassen.
* Achtung: Fehlerhafte Angaben können Probleme verursachen!
* Testen Sie einzelne Änderungen immer gleich bevor weitere vorgenommen werden.
*
*
* Die erste Zeile der CSV-Datei enthält die Feldnamen, die Reihenfolge entspricht dem normalen Standardexport
* von Outlook!
*
* URL-Aufrufe:
* https://event-kalender.checkip.net/csv_outlook_export.php
* https://event-kalender.checkip.net/csv_outlook_export.php?ErinnerungEIN
* https://event-kalender.checkip.net/csv_outlook_export.php?ErinnerungEIN=1T (X Tage)
* https://event-kalender.checkip.net/csv_outlook_export.php?ErinnerungEIN=1S (X Stunden)
* https://event-kalender.checkip.net/csv_outlook_export.php?ErinnerungEIN=1M (X Minuten)
* zusätzliche Parameter:
* &Suche=Feldname:Wert exportiert nur die Daten, die der Suche entsprechen
* &AlleIN hängt alle nicht übernommenen Felder mit Bezeichnung und Wert an die Beschreibung an
* &Print gibt die Daten zusätzlich auf dem Bildschirm aus
* z.B.: https://event-kalender.checkip.net/csv_outlook_export.php?ErinnerungEIN=15M$AlleIN&Print
* Script-Aufrufe:
* zusätzliche Parameter:
* AlleIN hängt alle nicht übernommenen Felder mit Bezeichnung und Wert an die Beschreibung an
* Feldname:Wert exportiert nur die Daten, die der Suche entsprechen
* /var/www/vhosts/event-kalender.checkip.net/csv_outlook_export.php 1T
* /var/www/vhosts/event-kalender.checkip.net/csv_outlook_export.php 1S
* /var/www/vhosts/event-kalender.checkip.net/csv_outlook_export.php 1M
* /var/www/vhosts/event-kalender.checkip.net/csv_outlook_export.php 1T JA
* /var/www/vhosts/event-kalender.checkip.net/csv_outlook_export.php 1T NEIN
* /var/www/vhosts/event-kalender.checkip.net/csv_outlook_export.php 1T JA Feldname:Wert
* /var/www/vhosts/event-kalender.checkip.net/csv_outlook_export.php 1T NEIN Feldname:Wert
* Reihenfolge Argumente beachten: Erinnerung Leerzeichen AlleIN
*/
// Pruefung ob Aufruf von zulaessiger IP/DYNDNS erfolgt
// ggf. Zeilen auskommentieren!
/*
$dynsallow['1']="test.dyndns.checkip.net";
$dynsallow['2']="test.dyndns.checkip.net";
$i = 0;
$allowed=false;
foreach ($dynsallow as $dynallow) {
$i++;
$ipremote=$_SERVER["REMOTE_ADDR"];
$hostip=gethostbyname($dynallow);
if ($ipremote==$hostip) { $allowed=true; }
}
if ($allowed === false) { exit; }
*/
// Sicherung der Kalender-Datenbank nach Outlook
session_start();
header('Content-Type: text/php; charset=UTF-8');
// Erinnerung ein?
$erinnerungEIN = "NEIN";
$erinnerungTime = 86400;
// Parameter via URL-Aufruf
if (isset($_REQUEST['ErinnerungEIN'])) {
$erinnerungEIN = "JA";
$erinnerungTime = $_REQUEST['ErinnerungEIN'];
}
// Parameter via Scriptaufruf
// Achtung: bei Scriptaufruf befindet man sich im Hauptroot. Der Ort muss in chdir ergänzt/geändert werden!
if (isset($argv[0])) {
if (isset($argv[1])) {
$erinnerungEIN = "JA";
$erinnerungTime = $argv[1];
}
chdir(getcwd() . "/event-kalender.checkip.net/");
}
$erinnerungValue = str_replace("T", "", $erinnerungTime, $count);
if ($count > 0) {
$erinnerungTime = 86400 * intval($erinnerungValue);
}
$erinnerungValue = str_replace("S", "", $erinnerungTime, $count);
if ($count > 0) {
$erinnerungTime = 3600 * intval($erinnerungValue);
}
$erinnerungValue = str_replace("M", "", $erinnerungTime, $count);
if ($count > 0) {
$erinnerungTime = 60 * intval($erinnerungValue);
}
// Suche
unset($Suche);
// Parameter via URL-Aufruf
if (isset($_REQUEST['Suche'])) {
$Suche = explode(":", $_REQUEST['Suche']);
}
// Parameter via Scriptaufruf
if (isset($argv[3])) {
$Suche = explode(":", $_REQUEST['Suche']);
}
// Felder, die nicht übernommen werden können an Beschreibung anhängen
$AlleIN = "NEIN";
// Parameter via URL-Aufruf
if (isset($_REQUEST['AlleIN'])) {
$AlleIN = "JA";
}
// Parameter via Scriptaufruf
if (isset($argv[2])) {
$AlleIN = $argv[2];
}
// Ausgabe auf Bildschirm
$Print = "NEIN";
// Parameter via URL-Aufruf
if (isset($_REQUEST['Print'])) {
$Print = "JA";
}
include "verbindung.php";
$DB_EXPORT_DIR = getcwd() . '/export/';
$DB_EXPORT_FILE = 'outlook_zu.csv';
$DB_EXPORT_PATH = $DB_EXPORT_DIR . $DB_EXPORT_FILE;
if (!is_dir($DB_EXPORT_DIR)) {
mkdir($DB_EXPORT_DIR, 0700);
}
if (isset($Suche)) {
$select = $db->query("SELECT `*` FROM `" . $TABLE_PREFIX . "_kalender` WHERE `" . $Suche[0] . "` = '" . $Suche[1] . "' ORDER BY `start`");
} else {
$select = $db->query("SELECT `*` FROM `" . $TABLE_PREFIX . "_kalender` ORDER BY `start`");
}
$events = $select->fetchAll();
$csv = "";
if (count($events) > 0) {
$csv = '"Betreff","Beginnt am","Beginnt um","Endet am","Endet um","Ganztägiges Ereignis","Erinnerung Ein/Aus","Erinnerung am","Erinnerung um","Beschreibung","Kategorien","Ort","Priorität","Privat"' . chr(10);
foreach ($events as $event) {
sscanf($event["start"], "%4s-%2s-%2s %2s:%2s:%2s", $dbJahr, $dbMonat, $dbTag, $dbStunde, $dbMinute, $dbSekunde);
sscanf($event["ende"], "%4s-%2s-%2s %2s:%2s:%2s", $dbJahr2, $dbMonat2, $dbTag2, $dbStunde2, $dbMinute2, $dbSekunde2);
$erinnerung_datecreate = date_create($dbJahr . '-' . $dbMonat . '-' . $dbTag . ' ' . $dbStunde . ':' . $dbMinute . ':' . $dbSekunde);
$erinnerung_timestamp = date_timestamp_get($erinnerung_datecreate) - $erinnerungTime;
$erinnerung = date("Y-m-d H:i:s", $erinnerung_timestamp);
sscanf($erinnerung, "%4s-%2s-%2s %2s:%2s:%2s", $dbJahrE, $dbMonatE, $dbTagE, $dbStundeE, $dbMinuteE, $dbSekundeE);
if ($event["volltag"] == 1) {
$volltag_datecreate = date_create($dbJahr2 . '-' . $dbMonat2 . '-' . $dbTag2 . ' ' . $dbStunde2 . ':' . $dbMinute2 . ':' . $dbSekunde2);
$volltag_timestamp = date_timestamp_get($volltag_datecreate) + 86400;
$volltag = date("Y-m-d H:i:s", $volltag_timestamp);
sscanf($volltag, "%4s-%2s-%2s %2s:%2s:%2s", $dbJahr2, $dbMonat2, $dbTag2, $dbStunde2, $dbMinute2, $dbSekunde2);
}
$csv .= '"' . $event["event"] . '","' . $dbTag . "." . $dbMonat . "." . $dbJahr . '","' . $dbStunde . ":" . $dbMinute . ":" . $dbSekunde . '","' . $dbTag2 . "." . $dbMonat2 . "." . $dbJahr2 . '","' . $dbStunde2 . ":" . $dbMinute2 . ":" . $dbSekunde2 . '"';
if ($event["volltag"] == 1) {
$csv .= ',"EIN"';
} else {
$csv .= ',"AUS"';
}
if ($erinnerungEIN == "JA") {
$csv .= ',"EIN"';
} else {
$csv .= ',"AUS"';
}
$csv .= ',"' . $dbTagE . "." . $dbMonatE . "." . $dbJahrE . '","' . $dbStundeE . ":" . $dbMinuteE . ":" . $dbSekundeE . '"';
if ($AlleIN == "JA") {
$beschreibung = "";
foreach ($event as $nichtIN => $nichtIN_key) {
if ($nichtIN == "start" or $nichtIN == "ende" or $nichtIN == "event" or $nichtIN == "volltag" or $nichtIN == "beschreibung" or $nichtIN == "kategorie" or $nichtIN == "adresse" or $nichtIN == "privat") {
continue;
}
if (intval($nichtIN == 0)) {
$beschreibung .= chr(10) . $nichtIN . ' = ' . $nichtIN_key;
}
}
$csv .= ',"' . str_replace('"', '""', $event["beschreibung"] . chr(10) . chr(10) . '---' . chr(10) . $beschreibung) . '"';
} else {
$csv .= ',"' . str_replace('"', '""', $event["beschreibung"]) . '"';
}
$csv .= ',"' . $event["kategorie"] . '","' . $event["ort"] . '","Normal"';
if ($event["privat"] == 1) {
$csv .= ',"Privat"';
} else {
$csv .= ',"AUS"';
}
$csv .= chr(10);
}
if ($Print == "JA") {
print $csv . chr(10) . chr(10) . "---END---";
}
if (!file_put_contents($DB_EXPORT_PATH, $csv)) {
print 'Fehler beim Schreiben in die Datei: ' . $DB_EXPORT_FILE;
exit;
}
print chr(10) . 'Datei ' . $DB_EXPORT_FILE . ' wurde gespeichert.';
}
if ($csv == "") {
print chr(10) . 'Nichts gespeichert.';
}
?>
Parameter via URL-Aufruf (Optional)
• Erinnerung X Tage vorher: https://event-kalender.checkip.net/csv_outlook_export.php?ErinnerungEIN=1T
(1T)
• Erinnerung X Stunden vorher: https://event-kalender.checkip.net/csv_outlook_export.php?ErinnerungEIN=1S
(1S)
• Erinnerung X Minuten vorher: https://event-kalender.checkip.net/csv_outlook_export.php?ErinnerungEIN=1M
(1M)
2. CSV-Datei in Microsoft Outlook (2020) importieren
Vorgehensweise in Screenshots
CSV-Import Outlook
1. CSV-Datei von Microsoft Outlook (2020) exportieren
Vorgehensweise in Screenshots
- csv_outlook_export_001.png
- csv_outlook_export_002.png
- csv_outlook_export_003.png
- csv_outlook_export_004.png
- csv_outlook_export_005.png
- csv_outlook_export_006.png
- csv_outlook_export_007.png
2. CSV-Datei in den Event-Kalender importieren
Quelltext: csv_outlook_import.php Ausblenden ❘ Kopieren ❘ Link ❘ Zeilen ❘
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
<?PHP
/*
* Outlook CSV-Import in den Event-Kalender - csv_outlook_import.php (utf-8)
* ©RaHa
* Teile des Scripts wurden übernommen von - https://werner-zenk.de
*
Dieses Script wird in der Hoffnung verteilt, dass es nützlich sein wird, aber ohne irgendeine Garantie;
ohne auch nur die implizierte Gewährleistung der Marktgängigkeit oder Eignung für einen bestimmten Zweck.
Weitere Informationen finden Sie in der GNU General Public License.
Siehe Datei: license.txt - http://www.gnu.org/licenses/gpl.html
Sie können diese Datei unter den Bedingungen der GNU General Public License frei verwenden und weiter verbreiten.
*
* Sie können Änderungen vornehmen oder individuell anpassen.
* Achtung: Fehlerhafte Angaben können Probleme verursachen!
* Testen Sie einzelne Änderungen immer gleich bevor weitere vorgenommen werden.
*
*
* Die erste Zeile der CSV-Datei muss die Feldnamen enthalten. Die Reihenfolge der Feldnamen muss dem normalen
* Standardexport von Outlook entsprechen (keine Verschiebung oder Umbenennung)!
*
* URL-Aufrufe:
* https://event-kalender.checkip.net/csv_outlook_import.php
* zusätzliche Parameter:
* &AlleIN hängt alle nicht übernommenen Felder mit Bezeichnung und Wert an die Beschreibung an
* &Dateiname der zu importiereten Datei
* &Print gibt die Daten zusätzlich auf dem Bildschirm aus
* z.B.: https://event-kalender.checkip.net/csv_outlook_import.php?AlleIN&Dateiname=xxxx&Print
* Script-Aufrufe:
* /var/www/vhosts/event-kalender.checkip.net/csv_outlook_import.php JA
* /var/www/vhosts/event-kalender.checkip.net/csv_outlook_import.php NEIN
* /var/www/vhosts/event-kalender.checkip.net/csv_utlook_import.php JA Dateiname
* /var/www/vhosts/event-kalender.checkip.net/csv_outlook_import.php NEIN Dateiname
* Reihenfolge Argumente beachten: JA/NEIN für AlleIN Leerzeichen Dateiname
*/
// Pruefung ob Aufruf von zulaessiger IP/DYNDNS erfolgt
// ggf. Zeilen auskommentieren!
/*
if (!isset($argv[0])) {
$dynsallow['1']="test.dyndns.checkip.net";
$dynsallow['2']="test.dyndns.checkip.net";
$i = 0;
$doaction=false;
foreach ($dynsallow as $dynallow) {
$i++;
$ipremote=$_SERVER["REMOTE_ADDR"];
$hostip=gethostbyname($dynallow);
if ($ipremote==$hostip) { $doaction=true; }
}
if ($doaction === false) { exit; }
}
*/
// Einfügen der Outlook-Kalenderdaten in den Event-Kalender
session_start();
header('Content-Type: text/php; charset=UTF-8');
// Felder, die nicht übernommen werden können an Beschreibung anhängen
$AlleIN = "NEIN";
// Parameter via URL-Aufruf
if (isset($_REQUEST['AlleIN'])) {
$AlleIN = "JA";
}
// Parameter via Scriptaufruf
// Achtung: bei Scriptaufruf befindet man sich im Hauptroot. Der Ort muss in chdir ergänzt/geändert werden!
if (isset($argv[0])) {
if (isset($argv[1])) {
$AlleIN = $argv[1];
}
chdir("/var/www/vhosts/checkip.net/event-kalender.checkip.net/");
}
// Dateiname
$Dateiname = "";
// Parameter via URL-Aufruf
if (isset($_REQUEST['Dateiname'])) {
$Dateiname = $_REQUEST['Dateiname'];
}
// Parameter via Scriptaufruf
if (isset($argv[2])) {
$Dateiname = $argv[2];
}
// Ausgabe auf Bildschirm
$Print = "NEIN";
// Parameter via URL-Aufruf
if (isset($_REQUEST['Print'])) {
$Print = "JA";
}
include "verbindung.php";
$DB_IMPORT_DIR = getcwd() . '/export/';
if ($Dateiname !== "") {
$DB_IMPORT_FILE = $Dateiname;
if ($Print == "JA") {
echo "Dateiname: " . $Dateiname . chr(10) . chr(10);
}
} else {
$DB_IMPORT_FILE = 'outlook_von.csv';
}
$DB_IMPORT_PATH = $DB_IMPORT_DIR . $DB_IMPORT_FILE;
$ok = 0;
$setFeldbezeichner = "NEIN";
$gruppe = date("YmdHis") . mt_rand(100, 999);
if (($handle = fopen($DB_IMPORT_PATH, "r")) !== FALSE) {
while (($data = fgetcsv($handle, 1000, ",")) !== FALSE) {
// holen wir die Feldbezeichner
if ($setFeldbezeichner == "NEIN") {
$Feldbezeichner = $data;
$setFeldbezeichner = "JA";
if ($Print == "JA") {
print_r($Feldbezeichner);
print chr(10) . chr(10);
}
continue;
}
// jetzt die Daten
$csvStart = explode(".", $data[1]);
$csvEnde = explode(".", $data[3]);
$start = $csvStart[2] . '-' . substr("00" . $csvStart[1], -2) . '-' . substr("00" . $csvStart[0], -2) . ' ' . $data[2];
$ende = $csvEnde[2] . '-' . substr("00" . $csvEnde[1], -2) . '-' . substr("00" . $csvEnde[0], -2) . ' ' . $data[4];
if ($data[5] == "Ein") {
$volltag = 1;
} else {
$volltag = 0;
}
if ($data[17] !== "Normal") {
$prioritaet = intval($data[17]);
} else {
$prioritaet = 0;
}
if ($data[18] !== "Aus") {
$privat = 1;
} else {
$privat = 0;
}
$data_kategorien_beschreibung = "";
$insertinto_kategorie = "";
if ($data[15] !== "") {
$data[15] = str_replace(";", ",", $data[15]);
$data_kategorien = explode(",", $data[15]);
$kategorietest_break = "";
foreach ($KATEGORIEN as $kategorietest => $kategorie_value) {
foreach ($data_kategorien as $data_kategorie => $data_value) {
if (strtolower($kategorie_value) == strtolower($data_value)) {
$insertinto_kategorie = $kategorie_value;
$kategorietest_break = "JA";
break;
}
if ($kategorietest_break == "JA") {
break;
}
}
}
$data_kategorien_beschreibung = "#" . str_replace($insertinto_kategorie, "", $data[15]);
$data_kategorien_beschreibung = str_replace(["#,", ",,", "#"], ["", ",", ""], $data_kategorien_beschreibung);
} else {
$insertinto_kategorie = "";
}
if ($AlleIN == "JA") {
$beschreibung = "";
if ($data_kategorien_beschreibung !== "") {
$beschreibung .= "weitere Kategorien: " . $data_kategorien_beschreibung . chr(10);
}
if ($data[6] !== "") {
$beschreibung .= $Feldbezeichner[6] . " = " . $data[6] . chr(10);
}
if ($data[7] !== "") {
$beschreibung .= $Feldbezeichner[7] . " = " . $data[7] . chr(10);
}
if ($data[8] !== "") {
$beschreibung .= $Feldbezeichner[8] . " = " . $data[8] . chr(10);
}
if ($data[9] !== "") {
$beschreibung .= $Feldbezeichner[9] . " = " . $data[9] . chr(10);
}
if ($data[10] !== "") {
$beschreibung .= $Feldbezeichner[10] . " = " . $data[10] . chr(10);
}
if ($data[11] !== "") {
$beschreibung .= $Feldbezeichner[11] . " = " . $data[11] . chr(10);
}
if ($data[12] !== "") {
$beschreibung .= $Feldbezeichner[12] . " = " . $data[12] . chr(10);
}
if ($data[13] !== "") {
$beschreibung .= $Feldbezeichner[13] . " = " . $data[13] . chr(10);
}
if ($data[19] !== "") {
$beschreibung .= $Feldbezeichner[19] . " = " . $data[19] . chr(10);
}
if ($data[20] !== "") {
$beschreibung .= $Feldbezeichner[20] . " = " . $data[20] . chr(10);
}
if ($data[21] !== "") {
$beschreibung .= $Feldbezeichner[21] . " = " . $data[21] . chr(10);
}
$beschreibung = str_replace('""', '"', $data[14] . chr(10) . chr(10) . '---' . chr(10) . $beschreibung);
} else {
$beschreibung = str_replace('""', '"', $data[14]);
}
$sqlerror = false;
if ($Print == "JA") {
echo "Start: " . $start . chr(10);
echo "Ende: " . $ende . chr(10);
echo "Volltag: " . $volltag . chr(10);
echo "Name: " . $NAME . chr(10);
echo "Event: " . $data[0] . chr(10);
echo "Beschreibung: " . $beschreibung . chr(10);
echo "Adresse: " . $data[16] . chr(10);
echo "Priorität: " . $prioritaet . chr(10);
echo "Privat: " . $privat . chr(10);
echo "Kategorie: " . $insertinto_kategorie . chr(10);
echo "Gruppe: " . $gruppe . chr(10);
echo chr(10) . chr(10) . "###---####" . chr(10) . chr(10);
//print_r($data);
}
$insertinto = "INSERT INTO `" . $TABLE_PREFIX . "_kalender` (start, ende, volltag, name, event, beschreibung, adresse, prioritaet, privat, kategorie, gruppe) ";
$insertinto .= "VALUES ('" . $start . "', '" . $ende . "', '" . $volltag . "', '" . $NAME . "', '" . $data[0] . "', '" . $beschreibung . "', '" . $data[16] . "', '" . $prioritaet . "', '" . $privat . "', '" . $insertinto_kategorie . "', '" . $gruppe . "')";
if ($db->exec($insertinto)) {
$ok++;
} else {
$sqlerror = true;
$ok = 0;
break;
}
}
if ($ok > 0) {
print chr(10) . 'Die Daten aus ' . $DB_IMPORT_FILE . ' wurden in den Event-Kalender importiert.';
exit;
}
if ($sqlerror) {
print chr(10) . 'SQL-Fehler bei Datenimport!';
exit;
}
} else {
print chr(10) . 'Fehler beim Öffnen der Datei ' . $DB_IMPORT_FILE;
}
?>
CSV-Export des Event-Kalenders
Quelltext: csv_event-kalender_export.php Ausblenden ❘ Kopieren ❘ Link ❘ Zeilen ❘
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
<?PHP
/*
* CSV-Export des Event-Kalenders - csv_event-kalender_export.php (utf-8)
* ©RaHa
* Teile des Scripts wurden übernommen von - https://werner-zenk.de
*
Dieses Script wird in der Hoffnung verteilt, dass es nützlich sein wird, aber ohne irgendeine Garantie;
ohne auch nur die implizierte Gewährleistung der Marktgängigkeit oder Eignung für einen bestimmten Zweck.
Weitere Informationen finden Sie in der GNU General Public License.
Siehe Datei: license.txt - http://www.gnu.org/licenses/gpl.html
Sie können diese Datei unter den Bedingungen der GNU General Public License frei verwenden und weiter verbreiten.
*
* Sie können Änderungen vornehmen oder individuell anpassen.
* Achtung: Fehlerhafte Angaben können Probleme verursachen!
* Testen Sie einzelne Änderungen immer gleich bevor weitere vorgenommen werden.
*
* URL-Aufrufe:
* https://event-kalender.checkip.net/csv_event-kalender_export.php
* zusätzliche Parameter:
* &Suche=Feldname:Wert exportiert nur die Daten, die der Suche entsprechen
* &Print gibt die Daten zusätzlich auf dem Bildschirm aus
* Script-Aufrufe:
* Feld:Wert exportiert nur die Daten, die der Suche entsprechen
* /var/www/vhosts/event-kalender.checkip.net/csv_event-kalender_export.php
* /var/www/vhosts/event-kalender.checkip.net/csv_event-kalender_export.php Feldname:Wert
*/
// Pruefung ob Aufruf von zulaessiger IP/DYNDNS erfolgt
// ggf. Zeilen auskommentieren!
/*
if (!isset($argv[0])) {
$dynsallow['1']="test-remote.dyndns.checkip.net";
$dynsallow['2']="test-mobile.dyndns.checkip.net";
$i = 0;
$doaction=false;
foreach ($dynsallow as $dynallow) {
$i++;
$ipremote=$_SERVER["REMOTE_ADDR"];
$hostip=gethostbyname($dynallow);
if ($ipremote==$hostip) { $doaction=true; }
}
if ($doaction === false) { echo "NO"; exit; }
}
*/
// Sicherung der Kalender-Datenbank nach CSV
session_start();
header('Content-Type: text/php; charset=UTF-8');
// Suche
unset($Suche);
// Parameter via URL-Aufruf
if (isset($_REQUEST['Suche'])) {
$Suche = explode(":", $_REQUEST['Suche']);
}
// Achtung: bei Scriptaufruf befindet man sich im Hauptroot. Der Ort muss in chdir ergänzt/geändert werden!
if (isset($argv[0])) {
chdir("/var/www/vhosts/checkip.net/event-kalender.checkip.net/event-kalender.checkip.net/");
if (isset($argv[1])) {
$Suche = explode(":", $_REQUEST['Suche']);
}
}
// Ausgabe auf Bildschirm
$Print = "NEIN";
// Parameter via URL-Aufruf
if (isset($_REQUEST['Print'])) {
$Print = "JA";
}
include "verbindung.php";
$DB_EXPORT_DIR = getcwd() . '/export/';
$DB_EXPORT_FILE = 'event-kalender.csv';
$DB_EXPORT_PATH = $DB_EXPORT_DIR . $DB_EXPORT_FILE;
if (!is_dir($DB_EXPORT_DIR)) {
mkdir($DB_EXPORT_DIR, 0700);
}
if (isset($Suche)) {
$select = $db->query("SELECT `*` FROM `" . $TABLE_PREFIX . "_kalender` WHERE `" . $Suche[0] . "` = '" . $Suche[1] . "' ORDER BY `start`");
} else {
$select = $db->query("SELECT `*` FROM `" . $TABLE_PREFIX . "_kalender` ORDER BY `start`");
}
$events = $select->fetchAll();
$csv = "";
if (count($events) > 0) {
$istKopf = "NEIN";
$csv = "#";
foreach ($events as $event) {
if ($istKopf == "NEIN") {
foreach ($event as $feld => $feld_value) {
if (!is_numeric($feld)) {
$csv .= ',"' . $feld . '"';
}
}
$istKopf = "JA";
$csv .= chr(10) . "#";
}
foreach ($event as $feld => $feld_value) {
if (!is_numeric($feld)) {
if ($feld == "beschreibung") {
$csv .= ',"' . str_replace('"', '""', $feld_value) . '"';
} else {
if (is_numeric($feld_value)) {
$csv .= ',"' . strval($feld_value) . '"';
} else {
$csv .= ',"' . $feld_value . '"';
}
}
}
}
$csv .= chr(10) . "#";
}
$csv = str_replace("#,", "", $csv) . chr(10);
if ($Print == "JA") {
print $csv . chr(10) . chr(10) . "---END---";
}
if (!file_put_contents($DB_EXPORT_PATH, $csv)) {
print 'Fehler beim Schreiben in die Datei: ' . $DB_EXPORT_FILE;
exit;
}
print chr(10) . 'Datei ' . $DB_EXPORT_FILE . ' wurde gespeichert.';
}
if ($csv == "") {
print chr(10) . 'Nichts gespeichert.';
}
?>
CSV-Import in den Event-Kalender
Quelltext: csv_event-kalender_import.php Ausblenden ❘ Kopieren ❘ Link ❘ Zeilen ❘
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
<?PHP
/*
* CSV-Import in den Event-Kalender - csv_event-kalender_import.php (utf-8)
* ©RaHa
* Teile des Scripts wurden übernommen von - https://werner-zenk.de
*
Dieses Script wird in der Hoffnung verteilt, dass es nützlich sein wird, aber ohne irgendeine Garantie;
ohne auch nur die implizierte Gewährleistung der Marktgängigkeit oder Eignung für einen bestimmten Zweck.
Weitere Informationen finden Sie in der GNU General Public License.
Siehe Datei: license.txt - http://www.gnu.org/licenses/gpl.html
Sie können diese Datei unter den Bedingungen der GNU General Public License frei verwenden und weiter verbreiten.
*
* Sie können Änderungen vornehmen oder individuell anpassen.
* Achtung: Fehlerhafte Angaben können Probleme verursachen!
* Testen Sie einzelne Änderungen immer gleich bevor weitere vorgenommen werden.
*
*
* Die erste Zeile der CSV-Datei muss die Feldnamen enthalten, diese müssen in der Benamung denen
* des Event-Kalenders entsprechen!
*
*
* URL-Aufrufe:
* https://event-kalender.checkip.net/csv_event-kalender_import.php
* zusätzliche Parameter:
* ?Dateiname der zu importiereten Datei
* &Print gibt die Daten zusätzlich auf dem Bildschirm aus
* z.B.: https://event-kalender.checkip.net/csv_event-kalender_import.php?Print
* Script-Aufrufe:
* /var/www/vhosts/event-kalender.checkip.net/csv_event-kalender_import.php Dateiname
*
*/
// Pruefung ob Aufruf von zulaessiger IP/DYNDNS erfolgt
// ggf. Zeilen auskommentieren!
/*
if (!isset($argv[0])) {
$dynsallow['1']="test.dyndns.checkip.net";
$dynsallow['2']="test.dyndns.checkip.net";
$i = 0;
$doaction=false;
foreach ($dynsallow as $dynallow) {
$i++;
$ipremote=$_SERVER["REMOTE_ADDR"];
$hostip=gethostbyname($dynallow);
if ($ipremote==$hostip) { $doaction=true; }
}
if ($doaction === false) { exit; }
}
*/
// Einfügen der CSV-Daten in den Event-Kalender
session_start();
header('Content-Type: text/php; charset=UTF-8');
// Dateiname
$Dateiname = "";
// Parameter via URL-Aufruf
if (isset($_REQUEST['Dateiname'])) {
$Dateiname = $_REQUEST['Dateiname'];
}
// Parameter via Scriptaufruf
// Achtung: bei Scriptaufruf befindet man sich im Hauptroot. Der Ort muss in chdir ergänzt/geändert werden!
if (isset($argv[0])) {
if (isset($argv[1])) {
$Dateiname = $argv[1];
}
chdir("/var/www/vhosts/checkip.net/event-kalender.checkip.net/");
}
// Ausgabe auf Bildschirm
$Print = "NEIN";
// Parameter via URL-Aufruf
if (isset($_REQUEST['Print'])) {
$Print = "JA";
}
include "verbindung.php";
$DB_IMPORT_DIR = getcwd() . '/export/';
if ($Dateiname !== "") {
$DB_IMPORT_FILE = $Dateiname;
if ($Print == "JA") {
echo "Dateiname: " . $Dateiname . chr(10) . chr(10);
}
} else {
$DB_IMPORT_FILE = 'event-kalender.csv';
}
$DB_IMPORT_PATH = $DB_IMPORT_DIR . $DB_IMPORT_FILE;
if (!is_file($DB_IMPORT_PATH)) {
print "Datei " . $DB_IMPORT_PATH . " nicht vorhanden!";
exit;
}
$ok = 0;
$setFeldbezeichner = "NEIN";
$gruppe = date("YmdHis") . mt_rand(100, 999);
if (($handle = fopen($DB_IMPORT_PATH, "r")) !== FALSE) {
while (($data = fgetcsv($handle, 1000, ",")) !== FALSE) {
if ($data[0] == "#") {
break;
}
// holen wir die Feldbezeichner
if ($setFeldbezeichner == "NEIN") {
$Feldbezeichner = $data;
$setFeldbezeichner = "JA";
if ($Print == "JA") {
print_r($data);
}
$insertintofeld = "#";
foreach ($data as $feld) {
if ($feld == "id") {
continue;
}
$insertintofeld .= ',' . $feld;
}
$insertintofeld = str_replace("#,", "", $insertintofeld);
continue;
}
// jetzt die Daten
$insertintovalue = "#";
foreach ($data as $feld => $feld_value) {
if ($Feldbezeichner[$feld] !== "id") {
$insertintovalue .= ", '" . $feld_value . "'";
}
}
$insertintovalue = str_replace("#, '", "'", $insertintovalue);
$sqlerror = false;
$insertinto = "INSERT INTO `" . $TABLE_PREFIX . "_kalender` (" . $insertintofeld . ") ";
$insertinto .= "VALUES (" . $insertintovalue . ")";
if ($Print == "JA") {
foreach ($data as $feld => $feld_value) {
print $Feldbezeichner[$feld] . ': ' . $feld_value . chr(10);
}
//print chr(10).chr(10)."insertintofeld: ".$insertintofeld.chr(10);
//print "insertintovalue: ".$insertintovalue.chr(10);
//print chr(10).chr(10).$insertinto;
//print_r($data);
print chr(10) . chr(10);
}
if ($db->exec($insertinto)) {
$ok++;
} else {
$sqlerror = true;
$ok = 0;
break;
}
}
if ($ok > 0) {
print chr(10) . chr(10) . 'Die Daten aus ' . $DB_IMPORT_FILE . ' wurden in den Event-Kalender importiert.';
exit;
}
if ($sqlerror) {
print chr(10) . chr(10) . 'SQL-Fehler bei Datenimport!';
exit;
}
} else {
print chr(10) . 'Fehler beim Öffnen der Datei ' . $DB_IMPORT_FILE;
}
?>
CSV-Export / Import über MySQL
CSV-Exportieren über MySQL
SELECT * INTO OUTFILE 'output.txt' FIELDS TERMINATED BY ',' ENCLOSED BY '"' LINES TERMINATED BY '\n' FROM `mai20_kalender`;
Bei XAMPP liegt die Datei: 'output.txt' dann z.B. unter: C:\xampp\mysql\data\dbname\output.txt
CSV-Importieren über MySQL
LOAD DATA INFILE 'output.txt' INTO TABLE `mai20_kalender` FIELDS TERMINATED BY ',' ENCLOSED BY '"' LINES TERMINATED BY '\n';
Wenn man eine Liste der aktuellen Events auch auf einer anderen Seite anzeigen möchte, dann sind die folgenden PHP-Scripte hilfreich.
Die Events des aktuellen Monats anzeigen
Dieses Script zeigt die Events des aktuellen Monats an.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<?php
// Event-Kalender
// Events des aktuellen Monats anzeigen
include "verbindung.php"; // Dateipfad eventuell anpassen
$select = $db->query("SELECT `start`, `event`, `beschreibung`
FROM `" . $TABLE_PREFIX . "_kalender`
WHERE YEAR(`start`) = YEAR(NOW()) AND
MONTH(`start`) = MONTH(NOW())
ORDER BY `start` ASC");
$events = $select->fetchAll();
foreach ($events as $event) {
sscanf($event["start"], "%4s-%2s-%2s %5s", $dbJahr, $dbMonat, $dbTag, $dbUhr);
echo '<p>' . $dbTag . '.' . $dbMonat . '.' . $dbJahr . ' ' . $dbUhr . ' Uhr - ' .
$event["event"] . '<br>' . $event["beschreibung"] . '</p>';
}
?>
Events der nächsten 31 Tage
Immer Aktuell, die Events der nächsten 31 Tage (individuell einstellbar).
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<?php
// Event-Kalender
// Events der nächsten 31 Tage (individuell einstellbar).
include "verbindung.php"; // Dateipfad eventuell anpassen
$tage = 31; // Tage
$select = $db->query("SELECT `start`, `event`, `beschreibung`
FROM `" . $TABLE_PREFIX . "_kalender`
WHERE (TO_DAYS(`start`) - TO_DAYS(NOW())) >= 0 AND (TO_DAYS(`start`) - TO_DAYS(NOW())) <= " . $tage . "
ORDER BY `start` ASC");
$events = $select->fetchAll();
foreach ($events as $event) {
sscanf($event["start"], "%4s-%2s-%2s %5s", $dbJahr, $dbMonat, $dbTag, $dbUhr);
echo '<p>' . $dbTag . '.' . $dbMonat . '.' . $dbJahr . ' ' . $dbUhr . ' Uhr - ' .
$event["event"] . '<br>' . $event["beschreibung"] . '</p>';
}
?>
Aktuelle Events anzeigen
Hier können Sie selbst die Anzahl der Events bestimmen die angezeigt werden soll.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
<?php
// Event-Kalender
// Aktuelle Events anzeigen (mit Beschreibung)
include "verbindung.php"; // Dateipfad eventuell anpassen
$anzahl = 12; // Anzahl
$select = $db->query("SELECT `start`, `event`, `beschreibung`
FROM `" . $TABLE_PREFIX . "_kalender`
WHERE `start` >= NOW()
ORDER BY `start` ASC
LIMIT " . $anzahl);
$events = $select->fetchAll();
foreach ($events as $event) {
sscanf($event["start"], "%4s-%2s-%2s %5s", $dbJahr, $dbMonat, $dbTag, $dbUhr);
echo '<p>' . $dbTag . '.' . $dbMonat . '.' . $dbJahr . ' ' . $dbUhr . ' Uhr - ' .
$event["event"] . '<br>' . $event["beschreibung"] . '</p>';
}
?>
![[Bildschirmfoto]
Der Event-Kalender teilweise im dunklen Modus (Dark-Mode). [Bildschirmfoto]
Der Event-Kalender teilweise im dunklen Modus (Dark-Mode).](hilfe_kalender/darkmode.webp)
Besten Dank an:
Ralph Hahn von: checkip.net