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.

👁️ Live-Demo anzeigen - Event-Kalender
Live-Demo - Event-Kalender

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

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

 

[Bildschirmfoto] Der Event-Kalender mit einem Monatsbild.
Der Event-Kalender mit einem Monatsbild.

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:

  1. In der Datei: verbindung.php tragen Sie Ihre Zugangsdaten (zur Datenbank) ein. Dort sind auch weitere Einstellungen möglich.
  2. Laden Sie alle Dateien auf Ihrem Webserver hoch.
  3. Rufen Sie die Datei: installation.php in Ihrem Browser auf.
  4. Rufen Sie die Datei: demo.htm in Ihrem Browser auf und tragen Sie Ihre ersten Event in den Kalender ein.
  5. Die Datei: installation.php kann nun vom Webserver gelöscht werden.

event-kalender.zip

Demo anzeigen - Was gibt es neues?

Viel Spaß damit!


➤ Mit einer transportablen (SQLite) Datenbank und allen Grundfunktionen, der kleine Bruder Event-Kalender (SQLite)

Event-Kalender (SQLite)

Hilfe und Tipps

Hier sehen Sie Animationen die Ihnen die Funktionsweise des Event-Kalenders erklären.
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.
Die Wochennummern ein.- und ausblenden

Die Wochennummern per Ziehen ein.- und ausblenden oder Taste # drücken.

Wochennummern
Den Event-Kalender als APP installieren Voraussetzung: Windows 10 und Microsoft Edge (Chromium).
  1. Die Datei: "demo.htm" mit CSS anpassen (Optional).
    <style>
    body {
     margin:  0 0 850px 0;
    }
    
    div#kalender {
     box-shadow: unset;
    }
    </style>
  2. Browser: Microsoft Edge (Chromium) öffnen und die Datei in der Adresszeile aufrufen.
  3. Im Menü folgendes auswählen:
    Event-Kalender als APP
  4. 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;
}
Einen Wochentag im Kalender farbig hervorheben
Oder, zum Beispiel für den Donnerstag:
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.

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 AusblendenKopierenLinkZeilen

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_DIR0700);
}

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

  1. csv_outlook_import_001.png
  2. csv_outlook_import_002.png
  3. csv_outlook_import_003.png
  4. csv_outlook_import_004.png
  5. csv_outlook_import_005.png
  6. csv_outlook_import_006.png
  7. csv_outlook_import_007.png
  8. csv_outlook_import_008.png
  9. csv_outlook_import_009.png
  10. csv_outlook_import_010.png
  11. csv_outlook_import_011.png
CSV-Import Outlook

1. CSV-Datei von Microsoft Outlook (2020) exportieren
Vorgehensweise in Screenshots

  1. csv_outlook_export_001.png
  2. csv_outlook_export_002.png
  3. csv_outlook_export_003.png
  4. csv_outlook_export_004.png
  5. csv_outlook_export_005.png
  6. csv_outlook_export_006.png
  7. csv_outlook_export_007.png

2. CSV-Datei in den Event-Kalender importieren

Quelltext:  csv_outlook_import.php AusblendenKopierenLinkZeilen

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(100999);

if ((
$handle fopen($DB_IMPORT_PATH"r")) !== FALSE) {
      while ((
$data fgetcsv($handle1000",")) !== 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 AusblendenKopierenLinkZeilen

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_DIR0700);
}

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 AusblendenKopierenLinkZeilen

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(100999);

if ((
$handle fopen($DB_IMPORT_PATH"r")) !== FALSE) {
      while ((
$data fgetcsv($handle1000",")) !== 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 '&emsp;$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 '&emsp;$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 '&emsp;$dbUhr ' Uhr - ' .
        
$event["event"] . '<br>$event["beschreibung"] . '</p>';
}
?>

 

[Bildschirmfoto] Der Event-Kalender teilweise im dunklen Modus (Dark-Mode).
Der Event-Kalender teilweise im dunklen Modus (Dark-Mode).

Besten Dank an:

Ralph Hahn von: checkip.net