zensbert
Goto Top

PHP Terminkalender mit Einträgen ohne Authentifizierung mit SQL als Datenablage

Hallo,
ich bastele gerade an einer Intranet-Seite,
auf der soll ein Terminkalender sein auf der jeder etwas eintragen können soll ohne sich vorab anzumelden.
Da ich kein PHP-Fachmann bin, bin ich natürlich ein Fan von vorgefertigten Scripts..
Habe auch so etwas gefunden,

http://dimk.de/Demos/kalenderv3/

Der funktioniert jedoch nur bedingt auf meiner HP, die Einträge werden in meinem MYSQL abgespeichert,
das klappt, jedoch kann ich nur den aktuellen Monat einsehen, wenn ich in der Monatsauswahl einen anderen
Monat auswähle tut sich nichts. Habe schon versucht den Autor zu kontaktieren, scheint jedoch keine Lust zu haben
auf meine dummen Fragen zu antworten. Betreibe hier Xampp in der aktuellsten Version.
Wenn jemand ne idee hat wie ich den Fehler wegbekomme oder schon ein passendes Skript hat, der würde mir sehr helfen.

Danke im voraus,


Thomas

Content-ID: 90585

Url: https://administrator.de/forum/php-terminkalender-mit-eintraegen-ohne-authentifizierung-mit-sql-als-datenablage-90585.html

Ausgedruckt am: 15.04.2025 um 13:04 Uhr

herpes
herpes 25.06.2008 um 15:13:30 Uhr
Goto Top
hallo thomas
wie kann man dir denn jetzt helfen?
das beispiel
http://dimk.de/Demos/kalenderv3/
funktioniert ja
auch eintraege im monat juli kann man machen..


hast du bei der installation auch alle
einstellungen gemacht die der kalender benoetigt?

wenn bei deiner lokalen verison nach auswahl
eines anderen monats nichts passiert, sieht es so aus
das variablen nicht korrekt uebergeben/verarbeitet werden.

ist in dem skrit sb
error_reporting(0)
gesetzt?

was wird dir angezeigt wenn du ein

PHPINFO();


ausgibst?


gruss
steffi
zensbert
zensbert 26.06.2008 um 08:06:42 Uhr
Goto Top
ja ich kann ja auch eintragen, nur wenn man den 29. hat isses praktisch termine für den 1. nächsten monats machen zu könnendas is nunmal das problem, ich bekomme nur den aktuellen monat angezeigt..
dieses error_reporting hab ich nich im skript gefunden..
bei phpinfo kommt unter 1000 anderen Infos: PHP Version 5.2.5
wenn du andere daten benötigst sag mir was


dieses kalender skript besteht aus 3 phps.

eine config mit verbindungsdaten zum sql,
eine install die die tables im sql installiert, nur einmal auszuführen
und eine kalender.php mit dem ganzen quellcode für die Eintragsfunktionen usw..

irgendwie dehnt dieses skript auch die seite sehr aus, sehr zum layout-nachteil...
ich geb einfach mal den quelltext bei, vll. fällt euch / dir ja was auf..

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
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
<?php



class Kalender
{
	 
	var $time_aktuell = array();
	var $aktuell;
	var $mktime;
	
	var $mysql = array();
	var $values;
	
	
	function zeitmarke($values=FALSE)
	{
		@setlocale (LC_ALL, 'de_DE@euro', 'de_DE', 'de', 'ge');  

		#'de_DE', 'de', 'ge' 
		# Aktuelle Zeit wird in die Variable $this->aktuell als ein Array gespeichert.
		$actually = time();
		$date1 = strftime("%A,%B,%c,%d,%H,%m,%M,%w,%Y,%x", $actually);  
		$this->aktuell = explode(",",$date1);  
		
		#print $date1;
		
		
		# Varibale values kommt von einem Formular. User bestimmt Jahr und Monat.
		# Wenn es also Values gibt, dann ersetzt es die aktuelle Zeit durch
		# benutzerdefinierte Zeit
		if(!empty($values))
		{
			list($zeitf[5],$zeitf[8]) = $values;
		}
		else{
			$zeitf[5] = $this->aktuell[5];
			$zeitf[8] = $this->aktuell[8];
			#list($zeitf[5],$zeitf[8]) = arary($this->aktuell[5],$this->aktuell[8]);
		}
		
		# Zeitmarke um das kalender anzuzeigen. Es weis nun, welcher Monat 
		# und Jahr angezeigt werden müssen.		
		
		$this->mktimee = mktime(0,0,0,$zeitf[5],1,$zeitf[8]);
		
		# benutzerdefinierte zeit wird in variable monat_mk gespeichert.
		# aktueller Monat wird in mktime_unveraendert gespeichert.
		$date2 = strftime("%A,%B,%c,%d,%H,%m,%M,%w,%Y",$this->mktimee);  
		$this->monat_mk = explode(",",$date2);  
		$this->mktime_unveraendert = $this->mktimee;
		
		$this->aktuell[9] = preg_replace("#^([0-9]+)/([0-9]+)/([0-9]+)$#","\\2.\\1.20\\3",$this->aktuell[9]);  
		
		
	}
	
	function aktuell()
	{
		# Zeit für den Kaledner wird definiert, durch die schon definierte mktime.
		# Muss Außerhalb der zeitmarke() geschechen, weil Zeitmarke unverändert
		# bleiben muss. benutzerdefinierte zeit wird in time_aktuell gespeichert.
		 
		$date = strftime("%A,%B,%c,%d,%H,%m,%M,%w,%Y,%x,%X",$this->mktimee);  
		$this->time_aktuell = explode(",",$date);  
		
		#$this->time_aktuell[9] = "08/15/03"; 
		#$this->time_aktuell[9] = preg_replace("#^([0-9]+).([0-9]+).([0-9]+)$#","\\2/\\1/\\3",$this->time_aktuell[9]); 
		$this->time_aktuell[9] = preg_replace("#^([0-9]+)/([0-9]+)/([0-9]+)$#","\\2.\\1.20\\3",$this->time_aktuell[9]);  
		
	
	}
	
	function smal_kal()
	{
		
		# Kurzschreibweisen der Wochentage
		$wochentage =array(
		"M", "D",  
		"M","D",  
		"F", "S", "S");  
		
		print "<table border=1>";  
		foreach ($wochentage as $a){
		echo "<td bgcolor=#92A5EF><font color=white>$a</font></td>";  
		}
		
		for($x=0; $x<6*7;$x++){
			
			# Aktuelle Zeit wird bei jedem Schleifendurchlauf neu definiert
			$this->aktuell();
					
			# Wandelt die amerikanische Zeitform in die europäische Form um		
			
			# Bei jedem siebten Tag wird eine neue Zeile erzeugt
			if(($x%7)==0)
			print "</tr><tr>";  
			
			# Es wird eine leere Zelle in der Zeile erezugt,
			# solange $x kleiner ist als der aktuelle Wochentag oder falls
			# der durchlaufende Monat nicht den aktuellen oder benutzerdefinierten dem Monat entspricht.
			if(($x+1) < $this->time_aktuell[7] || $this->time_aktuell[5] !== $this->monat_mk[5])
			print "<td><br></td>";  
			else{
				
				# Aktueller Tag wird farbig gekennzeichnet 
				$td = ($this->aktuell[9] == $this->time_aktuell[9]) ?
				"<td bgcolor='#A4D5F2'><font color=white>" :"<td></font>";  
				
				if(!$_POST['values'])  
					$values = array($this->time_aktuell[5],$this->time_aktuell[8]);
				else{
				$values = $GLOBALS['values'];  
				}
				
				
				
				
				print "$td  
				 
				
				 
				 
				 
				 <a href='$PHP_SELF?aktion=ansicht&date=".$this->time_aktuell[9]."&values=".$values."&values=".$values[1]."'>  
				".$this->time_aktuell[3]."</td></a>";  
				
				# +1 Tag
				$this->mktimee	 += (60*60*24);
			}
		}
		print "</table>";  
		
		
	}
	
	function form_date()
	{
			
		$days = array("Montag", "Dienstag", "Mittwoch", "Donnerstag", "Freitag", "Samstag", "Sonntag");  
		$monate_en = array(	"Januar", "Februar", "März",  
		"April", "Mai", "Juni", "Juli",  
		"August", "September", "Oktober",  
		"November", "Dezember");  
	
		print "  
		<form action=$_SERVER[PHP_SELF] method='post'>  
		<select name='values'>  
		";  
		for($x=0; $x<=(count($monate_en)); $x++){
		$sel = ($this->aktuell[5] == ($x+1)) ? "SELECTED" : " ";  
		print "<option value='".($x+1)."' $sel >".$monate_en[$x]."</option>";  
		}
		print "</select><br>";  

		print "  
		<select name='values'>  
		";  
		for($x=2008; $x<=2015; $x++){
		
			$sel = ($this->aktuell[8] == ($x)) ? "SELECTED" : " ";  
		print "<option value='".$x."' $sel >".$x."</option>";  
		
		

		
		
		
		
		
		}
		print "</select>";  
		print "<input type=submit value='los!' name='sub'></form>";  
	}
	
	function ansicht(){
		#setlocale ("LC_TIME", "de_DE");  
		include("config.inc.php");  
		$sql = "SELECT * FROM dimk_termin order by timestamp";  
		$query = mysql_query($sql);
		$anzahl = mysql_num_rows($query);
		while($val = mysql_fetch_row($query))
		{
			$timestamp = $val[1];
			$tmj_stamp_c = strftime("%x", $timestamp);  
			$tmj_stamp = preg_replace("#^([0-9]+)/([0-9]+)/([0-9]+)$#","\\2.\\1.20\\3",$tmj_stamp_c);  

			
			$uhrzeit_stamp = strftime("%X", $timestamp);  
			$eintrag = $val[2];
		}
		
		
		for($x=0;$x<count($eintrag);$x++)
		{
			
		
			#rint $tmj_stamp[$x]."=".$_GET['date']."=<br>"; 
			print "<table>";  
			
			
			if ($tmj_stamp[$x] == $_GET['date']){  
			print "<tr><td><b>$uhrzeit_stamp[$x]:</b></td></tr><tr><td>$eintrag[$x]<br></td></tr><tr><td>&nbsp;</td></tr>";  
			$zahl += 1;
			}
			else{
				if(!isset($zahl))
				$zahl=0;
			}
			print "</table>";  
			}
	if($zahl==0)
		print "<b>Zurzeit kein Termine am ".$_GET['date']."!</b><br>";  
	$url_query =  substr(strchr($_ENV["REDIRECT_QUERY_STRING"],"&"),1);  
	print "<a href='$PHP_SELF?aktion=new_termin&date=".$_GET['date']."'>Termin eintragen</a>";  
	}
	
	
	function show_form(){
	

	print "<b>Neuen Termin ".$_GET['date']." eintragen</b>";  
	
	
	print "<form action='$PHP_SELF' method='post'>";  
	print "Tag: <select name='tag' size='1'>";  
		for($x=1;$x<=date("t",$this->mktimee);$x++){  
			$y = str_pad($x,2,0,STR_PAD_LEFT);
			
		
			if($y == substr($_GET[date],0,2))
				$selected = "SELECTED";  
			else{
				$selected = " ";  
			}
			
		
			
	print "<option $selected>$y</option>";}	  
	print "</select>&nbsp;&nbsp;&nbsp;";  
	print "Uhr: <select name='stunde'>";  
	for($x=0;$x<=23;$x++){
		
		if($x == date("G"))  
				$selected = "SELECTED";  
			else{
				$selected = " ";  
			}
			
		
	print "<option $selected>$x</option>";}	  
	print "</select><b>:</b>";  
	print "<select name='minute'>";  
	for($x=0;$x<=59;$x++){
		
	$s = (strlen($x) == 1) ? "0$x" : "$x";  
	
	if($x == date("i"))  
				$selected = "SELECTED";  
			else{
				$selected = " ";  
			}
	
	print "<option $selected>  
	
	$s
	
	</option>";}  
	print "</select>";  
	
	print "<br>Ihr Eintrag:<bR><textarea name='eintrag' cols='20' rows='5'></textarea><br>  
	<input type='submit' value='Termin eintragen'></form>";  
	
	}
	
	function heutige_termine(){
	print "Termine heute am ".$this->aktuell[9].":"."<br><br>";  
	$_GET['date'] = $this->aktuell[9];  
	
	
	$this->ansicht();
	
	
	
	}
	
	
	function eingetragen(){
	
	$timestamp = mktime($_POST['stunde'],$_POST['minute'],0,substr($_GET[date],3,2),substr($_GET[date],0,2),substr($_GET[date],6,4));  
	include("config.inc.php");  
	$sql = "INSERT INTO dimk_termin (timestamp, eintrag) VALUES ('$timestamp', '$_POST[eintrag]')";  
	
	if($query = mysql_query($sql))
		print "Termin wurde erfolgreich eingetragen";  
	else{
	print "<b>ERROR!</b>";  
	}
	
	
	
}

	function ueberschrift(){
	
		
		$ueberschrift = array("Neuer Termin", "Startseite", $_GET['date']);  
		if($_GET['aktion'] == "ansicht")  
			$this->ueberschrift = $ueberschrift[2];
		elseif($_GET['aktion'] == "new_termin")  
			$this->ueberschrift = $ueberschrift;
		elseif(!isset($_GET['aktion']))  
			$this->ueberschrift = $ueberschrift[1];
	
	}
	
	function AKTIONEN(){
						
			if($_GET['aktion']=="ansicht"){  
				
			$this->ansicht();


			
			}
			elseif ($_GET['aktion'] == "new_termin"){  
				
				if($_SERVER['REQUEST_METHOD'] != 'POST')  
					$this->show_form();
				else {
					$this->eingetragen();
				}
			}
			elseif(!isset($_GET['aktion']))  
				{
				
				$this->heutige_Termine();
				
				}
	}

}

$kal = new Kalender;
$kal->zeitmarke($values);
$kal->ueberschrift();

print "<pre><b>Aktuell:   ". $kal->aktuell.", ". $kal->aktuell[3] .". ".$kal->aktuell[1]." ".$kal->aktuell[8]." - ". $kal->aktuell[4].":".$kal->aktuell[6]."<br></pre></b>";  
		
print "<a>Monatsübersicht</a><br><table border=0>";  

print "<tr><td valign=top>";  

$kal->smal_kal();
$kal->form_date();




print "  

</td><td valign= top>
	<table width='300' border='0'>  
  	<tr> <td bgcolor='B9C0F0' height='2'><div align='center'><b><font face='Arial, Helvetica, sans-serif' color='#FFFFFF'>  
      	
      $kal->ueberschrift
      	
      	</font></b></div></td></tr><tr> <td height='342' valign='top'><p>";  

		$kal->AKTIONEN();
			
			
			
			
			print "   
	</p>
      </td>
  </tr>
</table>";  
		






/*
print "<br><br><br>"; 
$x=0;
foreach ($kal->time_aktuell as $t){
	print "$x: $t<br>"; 
	$x++;
}

*/
?>


mir ist zudem aufgefallen, dass wenn ich die daten in der url ändere, dass ich dann termine von einem anderen monat sehen kann, jedoch verändert sich nicht das monatsschaubild mit der übersicht der
wochentage der eingabe entsprechend mit, sondern bleibt beim aktuellen monat.

eine beispiel-url:
http://localhost/00000198700766d09/kalender.php?aktion=ansicht&date ...

irgendwie ist dieser los!-Button (Z.173) verhext, kommt mir so vor als ob der nur n reload macht,
statt die änderungen zu übernehmen...


nochmal vielen dank für die bemühungen..

thomas
herpes
herpes 26.06.2008 um 16:45:42 Uhr
Goto Top
ojeh...der code is horror!
php und html zusammen geruehrt..!
nix fuer meine empfindliche nerven face-smile!

setzt mal bitte die
error_reportings(E_ALL)

und lass die fehler anzeigen,

bzw schau unter dispaly_errors()
in der PHPINFO nach ob diese auf ON
im master value gestetzt sind...

also es geht darum rauszubekommen
warum der die variablen nicht verarbeitet!.

fuer welche php version ist das skript denn gebaut worden?

wird zb verlang das die register_globals auf ON gesetzt sein muessen
wie es viele aeltere php scripte erwarten
zensbert
zensbert 27.06.2008 um 09:40:18 Uhr
Goto Top
hi, ich habe einen Kalender gefunden der funktioniert und auch stylisch besser passt..
sry steffi wenn ich nun deine zeit vertrödelt hab.. aber dann hol ich mir lieber einen den ich leichter
einsetzen kann..


für die dies interessiert..
http://braun.dyndns.tv/downloads.php?control_nr=2

das is der kalender, zwar mit auth., aber schöne funktionen..

Gruß

thomas