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/contentid/90585

Ausgedruckt am: 23.11.2024 um 07:11 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..

<?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