Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

Aktuelle Themen

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit

Ein ganz einfacher Eventkalender für das Intranet

Tipp Entwicklung PHP

Mitglied: Guenni

Guenni (Level 2) - Jetzt verbinden

03.11.2010, aktualisiert 24.11.2010, 7919 Aufrufe, 5 Kommentare, 1 Danke

Eigentlich hatte ich den Kalender als Antwort auf einen Beitrag aus meinem "Skript-Schnipsel-Bestand" herausgesucht.

Da ich in Erinnerung habe, dass nach einem solchen schon des öfteren gefragt wurde, poste ich das Skript einfach mal als Tipp
oder quasi mehr als Einstieg, denn ein richtiger Kalender ist das Skript nicht, sondern nur ein "digitales" schwarzes Brett.

Da ein Benutzer hier "eigentlich" keine eigene Angaben machen sondern nur eine Auswahl aus zwei DropDown-Listen wählen kann, sind
Fehlerbehandlungen in soweit beschränkt, dass dieses Skript bei ordnungsgemäßer Benutzung funktioniert.
Etwaige Manipulationsversuche, wie z.B. falsche Werte in einer URL zu übergeben, müssten noch unterbunden werden.

Verwendete Software:

- MySQL, Datenbankname events

- Apache Webserver


Vezeichnis auf dem Webserver, das die nachfolgend bezeichneten Dateien enthält

- z.B. events


Dateien im Verzeichnis events

- eine Datei index.php, das Skript selber

- eine Datei connect.inc.php, wird in index.php includiert

- eine Datei style.inc.css, ein bißchen Kosmetik


Tabellen in der Datenbank events

- personal: id(int, autoincrement, Primärschlüssel), Vorname(varchar(24)), Nachname(varchar(24))

- events: id(int, autoincrement, Primärschlüssel), event(varchar(48)), Datum(varchar(10)), Uhrzeit(varchar(5))

- teilnahme: id(int, autoincrement, Primärschlüssel), persid(int), eventid(int)

Das id-Feld in der Tabelle personal sollte/könnte/kann natürlich durch ein einfaches id-Feld mit realen Personalnummern ersetzt werden.

Die Felder Datum und Uhrzeit in der Tabelle events habe ich bewußt als varchar definiert, weil der Umgang damit einfacher ist.


Die Datei connect.inc.php

Hier wird die Verbindung zum Server und zur DB hergestellt

01.
<?php 
02.
 
03.
function connect(){ 
04.
  
05.
mysql_connect("localhost","benutzer","passwort"); 
06.
  
07.
mysql_select_db("event"); 
08.
 
09.
10.
 
11.
/* 
12.
* Funktion in der includierten Datei direkt aufrufen, um die DB-Verbindung herzustellen 
13.
*/ 
14.
 
15.
connect(); 
16.
 
17.
?>
Die Datei style.inc.css

Diese Datei behandelt nur die Links im Skript, wie oben gesagt, nur ein bißchen Kosmetik

01.
 
02.
a:link{ 
03.
color: #2C60B2; 
04.
font-weight:bold; 
05.
text-decoration:none; 
06.
07.
 
08.
a:visited{ 
09.
color: #2C60B2; 
10.
font-weight:bold; 
11.
text-decoration:none; 
12.
13.
 
14.
a:active{ 
15.
color: #c0c0c0; 
16.
font-weight:bold; 
17.
text-decoration:none; 
18.
19.
 
20.
a:hover{ 
21.
 color: #c0c0c0; 
22.
 font-weight:bold; 
23.
 text-decoration:underline; 
24.
25.
 

Was macht das Skript?

Nach erfolgreicher Integration ins Intranet stellt das Skript ein Formular mit zwei DropDown-Listen dar. Dort wählt man ein Event

und eine(n) Mitarbeiter(in) aus und trägt sie in die Tabelle teilnahme ein. Das Ganze passiert ohne Passwort, denn ob ich ein

ein Blatt Papier am schwarzen Brett oder dieses Skript benutze, ist das Gleiche: Am Blatt Papier gibts auch kein Passwort.

d4737eacdc7ea8a09948621bfe797793 - Klicke auf das Bild, um es zu vergrößern

Darunter werden die Events aus der Tabelle events als Link dargestellt. Klickt man einen Link an, so werden das Event

nebst Datum, Uhrzeit und die eingetragenen Personen aufgelistet.

Hinter jeder Person wird auch ein Link zum Löschen ausgegeben (Löschen mit Abfrage zur Bestätigung).

3ac6d00763b69405cb886274173c68c8 - Klicke auf das Bild, um es zu vergrößern
Wenn der Link zum Löschen angeklickt wurde . . .
bc441413afa0a856b4a707ee4bb10efc - Klicke auf das Bild, um es zu vergrößern


Was macht das Skript nicht?

Ein Event oder eine Person in die entsprechenden Tabellen einpflegen. Das macht der Datenbank-Admin oder man schreibt sich ein

entsprechendes Formular . Dort müsste dann wohl eine Authorisierung erfolgen, deshalb hab ich hier aufgrund des Aufwands darauf verzichtet.


Das Skript himself

01.
<?php 
02.
/* 
03.
* Von den nachfolgenden 2 Anweisungen kann der Kommentar-Tag entfernt werden, um Fehlermeldungen anzuzeigen. 
04.
*/ 
05.
//error_reporting(E_ALL); 
06.
//ini_set('display_errors','On'); 
07.
include('connect.inc.php'); 
08.
/* 
09.
* Teilnehmer löschen *****************************************************************************
10.
* Wenn die $_GET-Variable del existiert, wird abgefragt, ob sie den Wert "ja" enthält. 
11.
* Wenn das der Fall ist, wird der Teilnehmer aus der Tabelle teilnahme gelöscht. Wenn nicht, 
12.
* wird die Löschbestätigung ausgegeben, wo dann erst der Variablen del der Wert "ja" zugewiesen wird. 
13.
* Weitere $_GET-Variablen: 
14.
* - id -> Index der Tabelle teilnahme 
15.
* - pn -> Person Nachname 
16.
* - pv -> Person Vorname 
17.
* - e  -> Das Event 
18.
*/ 
19.
if(isset($_GET['del'])){ 
20.
 if($_GET['del']=="ja"){ 
21.
  if(isset($_GET['id'])){ 
22.
	 mysql_query("delete from teilnahme where id=".$_GET['id']); 
23.
	 echo "Teilnehmer gelöscht"
24.
	 echo "<a href=\"index.php\"> - Zur Startseite - </a>"
25.
	 /* 
26.
	 * Skript beenden, damit der nachfolgende Code nicht mehr ausgeführt wird 
27.
	 */ 
28.
	 exit
29.
30.
31.
 /* 
32.
 * Löschbestätigung abfragen/anzeigen 
33.
 */ 
34.
 echo "<br>"
35.
 $querystring="?del=ja&id=".$_GET['id']; 
36.
 echo "<h3>Teilnehmer löschen:</h3>"
37.
 echo "<h4>Event: ".$_GET['e']."</h4>"
38.
 echo "<h4>Teilnehmer:</h4> ".$_GET['pn'].", ".$_GET['pv']."<a href=\"index.php$querystring\"> - Ja, löschen - </a><br>"
39.
 echo "<br><a href=\"index.php\"> - Zur Startseite - </a>"
40.
 exit
41.
42.
/* 
43.
* *************************************************************************************************** 
44.
* Person an Event anmelden 
45.
* Die ersten Einträge der DropDown-Listen enthalten den Wert 0. 
46.
* Wenn eine 0 gesendet wurde, wird kein Eintrag vorgenommen. 
47.
*/ 
48.
if(isset($_POST['cmd'])){ 
49.
 if($_POST['sel_event']==0 || $_POST['sel_person']==0){ 
50.
  echo "Sie müssen ein Event und eine Person auswählen!"
51.
	echo "<a href=\"javascript:history.back()\"> - Zurück - </a>"
52.
	exit
53.
54.
 /* 
55.
 * sel_event enthält die id aus der Tabelle events 
56.
 * sel_person enthält die id aus der Tabelle personal 
57.
 * Somit wird in der Tabelle teilnahme festgelegt, welche Person 
58.
 * sich an welchem Event anmeldet. 
59.
 */ 
60.
 $event=$_POST['sel_event']; 
61.
 $person=$_POST['sel_person']; 
62.
 mysql_query("insert into teilnahme(id,persid,eventid) values(0,$person,$event)"); 
63.
 /* 
64.
 * Um die gesendeten POST-Daten zu löschen, wird die Seite mittels der Funktion header 
65.
 * erneut aufgerufen. 
66.
 */ 
67.
 header("location:index.php");  
68.
69.
/* 
70.
* Tabellen events und personal abfragen, um DropDown-Listen im Formular zu füllen. 
71.
*/ 
72.
$events=mysql_query("select * from events"); 
73.
$personal=mysql_query("select * from personal order by Nachname,Vorname"); 
74.
/* 
75.
* Anschließend wird das Formular ausgegeben. Zum Auswählen eines Events bzw. einer Person 
76.
* werden zwei DropDown-Listen (select) erstellt. Die Abfrageergebnisse werden mittels einer 
77.
* while-Schleife in die jeweiligen Listen übertragen. Der Parameter value(<option value=Wert . . .) 
78.
* bekommt hier die id eines Datensatzes zugewiesen. Das ist der Wert, der beim Absenden des Formulars 
79.
* übertragen wird. 
80.
*/ 
81.
?> 
82.
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
83.
<html> 
84.
<head> 
85.
<title>Eventkalender</title> 
86.
<link rel="stylesheet" type="text/css" href="style.inc.css"
87.
</head> 
88.
<body> 
89.
<form action="" method="post"
90.
<table width="50%"><caption align="left"><h3>Zum Event anmelden</h3></caption> 
91.
<tr> 
92.
<td>Anmelden an</td> 
93.
<td> 
94.
<select name="sel_event"
95.
<option value="0"> - Event wählen - </option> 
96.
<?php 
97.
while($row=mysql_fetch_array($events,MYSQL_ASSOC)){ 
98.
 echo "<option value=$row[id]>$row[Event], $row[Datum], $row[Uhrzeit]</option>"
99.
100.
?> 
101.
</select> 
102.
</td> 
103.
</tr> 
104.
<tr> 
105.
<td>Person anmelden</td> 
106.
<td> 
107.
<select name="sel_person"
108.
<option value="0"> - Person wählen - </option> 
109.
<?php 
110.
while($row=mysql_fetch_array($personal,MYSQL_ASSOC)){ 
111.
 echo "<option value=$row[id]>PersNr: $row[id], $row[Nachname], $row[Vorname]</option>"
112.
113.
?> 
114.
</select> 
115.
</td> 
116.
</tr> 
117.
<tr> 
118.
<td colspan="2"
119.
<input type="submit" name="cmd" value="Anmelden" /> 
120.
</td> 
121.
</tr> 
122.
</table> 
123.
</form> 
124.
<h3>Teilnehmerlisten einsehen</h3> 
125.
<? 
126.
/* 
127.
* Alle Events aus Tabelle events abfragen und als Link ausgeben. 
128.
* Der Variablen $eventlink werden der Eventname, Datum und Uhrzeit zugewiesen, 
129.
* der $_GET-Variablen eventid die id aus der Tabelle events. 
130.
*/ 
131.
$events=mysql_query("select * from events"); 
132.
while($row=mysql_fetch_array($events,MYSQL_ASSOC)){ 
133.
 $eventlink=$row['Event'].", ".$row['Datum'].", ".$row['Uhrzeit']; 
134.
 echo "<a href=\"index.php?eventid=$row[id]\">$eventlink</a><br>"
135.
136.
/* 
137.
* Wenn die $_GET-Variable eventid exisitert, wird das Event aus der Tabelle events abgefragt 
138.
* und ausgegeben. 
139.
*/ 
140.
if(isset($_GET['eventid'])){ 
141.
 $events=mysql_query("select * from events where id=".$_GET['eventid']); 
142.
 $event=mysql_fetch_array($events,MYSQL_ASSOC); 
143.
 $eventtitel=$event['Event'].", ".$event['Datum'].", ".$event['Uhrzeit']; 
144.
 echo "<h3>Teilnehmerliste: $eventtitel</h3>"
145.
 /* 
146.
 * Anschließend werden die Tabellen personal und teilnahme abgefragt. 
147.
 * Abfragekriterien in der where-Klausel: 
148.
 * - $event['id'] -> ist die id aus der Tabelle events, die zuvor abgefragt wurde 
149.
 * - - Diese id wird in der Tabelle teilnahme in das Feld eventid eingetragen 
150.
 * - p.id(Tabelle personal.id) -> Diese id aus der Tabelle personal wird in der Tabelle 
151.
 * - - teilnahme in das Feld persid eingetragen 
152.
 * Die Abfrage prüft also auf Gleichheit von personal.id und teilnahme.persid und 
153.
 * auf Gleichheit event.id und teilnahme.eventid. 
154.
 * Die Abfrage des Feldes id aus der Tabelle teilnahme(t.id as 'Index') wird gebraucht, um 
155.
 * den Index eines Eintrags in der Tabelle zum Löschen zu ermitteln. 
156.
 *  
157.
 */ 
158.
 $sql="select p.Vorname as 'Vorname', p.Nachname as 'Nachname', t.id as 'Index' from personal p, teilnahme t"
159.
 $sql.=" where p.id=t.persid and t.eventid=".$event['id']; 
160.
 /* 
161.
 * Sortierung der Teilnehmer nach Nachname, Vorname. Anstatt Feldnamen können auch Spaltennummern an die 
162.
 * order by-Anweisung übergeben werden. Sortiert wird hier also zuerst nach Spalte 2(Nachname), anschließend 
163.
 * nach Spalte 1(Vorname). 
164.
 * Beispiel: Meyer,Anton wird vor Meyer,Dieter ausgegeben. 
165.
 */ 
166.
 $sql.=" order by 2,1"
167.
 $result=mysql_query($sql); 
168.
 /* 
169.
 * Anzahl der angemeldeten Teilnehmer ermitteln und ausgeben. 
170.
 */ 
171.
 $angemeldet=mysql_num_rows($result); 
172.
 echo "<h4>Es hat/haben sich $angemeldet Person(en) angemeldet</h4>"
173.
 /* 
174.
 * Ausgabe der Teilnehmerliste. 
175.
 * Ausgabe eines Links mit Variablen zum Löschen eines Eintrags(siehe Skript oben). 
176.
 * Übergebene Variablen: 
177.
 * - del, ohne Wertzuweisung -> als Abfragekriterium 
178.
 * - id -> index in der Tabelle teilnahme 
179.
 * - pn -> Nachname der Person 
180.
 * - pv -> Vorname der Person 
181.
 * - e -> Name des Events 
182.
 */ 
183.
 while($teilnehmer=mysql_fetch_array($result,MYSQL_ASSOC)){ 
184.
  $querystring="?del&id=".$teilnehmer['Index']."&pn=".$teilnehmer['Nachname']."&pv=".$teilnehmer['Vorname']."&e=".$event['Event']; 
185.
  echo "<li>".$teilnehmer['Nachname'].", ".$teilnehmer['Vorname']."<a href=\"index.php$querystring\"> - Löschen - </a><br>"
186.
187.
 echo "<br><h4><a href=\"index.php\"> - Zur Startseite - </a></h4>"
188.
189.
?> 
190.
</body> 
191.
</html> 
192.
 
Gruß
Günni
Mitglied: dave114
04.11.2010 um 09:14 Uhr
morgen Günni,

dein Projekt klingt gut. Könntest du vllt noch ein oder zwei Screenshots dazu hochladen damit man sich darunter etwas vorstellen kann.

Mit freundlichen Grüßen
David
Bitte warten ..
Mitglied: Guenni
04.11.2010 um 20:49 Uhr
Hi dave114,

Bilder sind da.

Gruß
Günni
Bitte warten ..
Mitglied: dave114
04.11.2010 um 21:32 Uhr
Cool, sieht gut aus. Werde ich die Tage mal testen.
Bitte warten ..
Mitglied: masterG
24.11.2010 um 09:27 Uhr
Hallo Günni,
Guter Tipp, allerdings würde ich hier noch ein paar mysql_escape_strings einbaun. Wegen der Sicherheit halber.
Und nicht vergessen nach header("location....") das script zu beenden ;)
Bitte warten ..
Mitglied: Guenni
25.11.2010 um 17:57 Uhr
Hi masterG,

Guter Tipp, allerdings würde ich hier noch ein paar mysql_escape_strings einbaun. Wegen der Sicherheit halber.

Deshalb habe ich ja auch in der Einleitung darauf aufmerksam gemacht, dass das Skript bei ordnugsgemäßer Benutzung

funktioniert, und dass Manipulationsversuche noch unterbunden werden müssen

Ich mache das aus folgendem Grund nicht:

Die Maßnahmen zur Abwehr von Manipulationen sind ja mehr oder weniger immer die gleichen. Also, warum soll man die

bei jedem Tutorial/Tipp immer wieder einbauen?

Und nicht vergessen nach header("location....") das script zu beenden ;)

Warum?

Gruß
Günni
Bitte warten ..
Neuester Wissensbeitrag
Humor (lol)

Linkliste für Adventskalender

(3)

Information von nikoatit zum Thema Humor (lol) ...

Ähnliche Inhalte
Netzwerkmanagement
Einfacher Router gesucht für 150 Clients (4)

Frage von weisseradler zum Thema Netzwerkmanagement ...

PHP
gelöst Drucker über Intranet verbinden (8)

Frage von Bodabirra zum Thema PHP ...

Erkennung und -Abwehr
gelöst MS Outlook - einfacher Absender Check (27)

Frage von K-ist-K zum Thema Erkennung und -Abwehr ...

HTML
gelöst Intranet Schutz (8)

Frage von finnhannemann zum Thema HTML ...

Heiß diskutierte Inhalte
Router & Routing
gelöst Ipv4 mieten (22)

Frage von homermg zum Thema Router & Routing ...

Windows Server
DHCP Server switchen (20)

Frage von M.Marz zum Thema Windows Server ...

Exchange Server
gelöst Exchange 2010 Berechtigungen wiederherstellen (20)

Frage von semperf1delis zum Thema Exchange Server ...

Hardware
gelöst Negative Erfahrungen LAN-Karten (19)

Frage von MegaGiga zum Thema Hardware ...