einfaches Gästebuch mit CSV Datei

petermedien

Mitglied
Hallo Leute,

Eigentlich sollte dies ja ein Tutorial werden, aber irgend wie schaffe
ich es nicht, diesen dort zu plazieren, deshalb stelle ich diesen
Beitrag einfach mal hier ein.

Zur Sache:

Die untenstehenden Scripte ergeben ein einfaches Gästebuch.

Bestehend aus folgenden Dateien:

gaestebuch.php
ausWertung.php
Grundgeruest.inc.php
ausGabe.php
eintraege.php

Nachfolgendes Script bitte unter
gaestebuch.php ablegen:

PHP:
<?php
//  Aufrufen der Verweisdateien für Kopf/Fuss und Funktionen
include("Grundgeruest.inc.php");
include("ausWertung.php");
Kopf("Das Gästebuch");

$Rahmen="0";  						// interne RahmenStärke für TabellenRahmen Kontrolle Aufbau
$hinterGrundFarbe="#c0c0cc";  		// gibt die Hintergrundfarbe für alle Tabellen 
$rahmenFarbe="#808080";  			// gibt die Farbe für äusseren Rahmen um die Tabellen und gest.
$rahmenDicke="3"; 			 		// gibt die Rahmendicke für äusseren Rahmen
$dateiName="eintraege.csv";  		// gibt .csv mit den Herkunftsdaten
$dateiName2="eintraegeTemp.csv";	// Datei zur Zwischenspeicherung der Daten

// **********************************************************************************************************************************
//
//	Generierung des HTML-Codes mittels PHP
//	Das gesamte Gästebuch ist in eine Positionierungstabelle eingebettet aus zwei Cols.
//	Links Eingabe der Einträge, rechts Ausgabe der Einträge in iframe, oder gelistet für no iframe
//	Eingabe und Ausgabe sind jeweils von einem Rahmen mit $rahmenFarbe und $rahmenDicke umgeben
//	Die Bezeichnungen der Eingabefelder liegen als erste Zeile in der $dateiName als .csv
//  und werden automatisch generiert, wobei das Feld Nr. 5 und 6 in einer Zeile dargestellt wird.
//  Der letzte Eintrag bezeichnet den Commentar und wird nicht im "input", sondern im "textarea" aufgenommen.
//	
// **********************************************************************************************************************************

// Positionierungs-Tabellenfeld über ganze Seite zur Positionierung
	echo "\n\t".'<table border="'.$Rahmen.'" width="100%" height="100%" cellpadding="10" cellspacing="10" bgcolor="'.$hinterGrundFarbe.'">';
	echo '<tr><td align="right" valign="top">';

// Angabe des Übertragungsmodus
	echo "\n\t".'<form method="post">';  

// Tabelle zur Vergabe des Rahmens
	echo "\n\t".'<table border="'.$Rahmen.'"  bgcolor="'.$rahmenFarbe.'" cellpadding="'.$rahmenDicke.'" cellspacing="0"><tr><td>';

//  innere Tabelle zur Ausgabe der gewünschten Eingabemaske
	echo "\n\t".'<table border="'.$Rahmen.'" bgcolor="'.$hinterGrundFarbe.'">';

//  erstellung der Eingabefelder für gewünschte Eingaben 
//  aus den Einträgen der Zeile 0 aus .csv Datei
		$zeiger3 = fopen($dateiName,"r");
		$ausgabeDaten = fgetcsv ($zeiger3,4096,"#");
//  Abfrage der Anzahl der Einträge der Zeile
		for ($i=1;$i<sizeof($ausgabeDaten);$i++)
		{
//  Wenn $i == 6 also Ort ist  in meinem Beispiel
//  schreibe den Folgeabsatz  bis endif nicht
			if ($i!=6):
				echo "\n\t\t".'<tr>';
//  wenn $i==5 also PLZ  in meinem Beispiel
				if ($i==5)
//  schreibe PLZ und Ort in eine Tabellenzelle 
					echo "\n\t\t\t".'<td>'.$ausgabeDaten[$i].', '.$ausgabeDaten[$i+1].':</td>';
				else 
//  sonst schreibe nur einen Eintrag in die Tabellenzelle
					echo "\n\t\t\t".'<td>'.$ausgabeDaten[$i].':</td>';
				echo "\n\t\t\t".'<td>';
//  ab hier wieder für alle Einträge 
			endif;
//  wenn der letzte eintrag erreicht ist, Message in meinem Beispiel
				if ($i==sizeof($ausgabeDaten)-1) 
//  nehme ein textarea
					echo '<textarea ';  //>
				else 
//  sonst nehme ein Textfeld
					echo '<input type="text" ';//>
//  Der Name für alle Textfelder, erzeugt durch multible Textfeld,
//  somit werden alle Inhalte in ein Array mit Namen textFeld[] geschrieben
				echo 'name="textFeld[]" multible ';
//  Spezifikationen für das textarea
				if ($i==sizeof($ausgabeDaten)-1) 
					echo 'cols="30" rows="6" size="18"></textarea>';
				else
//  Spezifikationen für das PLZ Feld
					if ($i==5) 
						echo 'maxlength="5" size="3">';
//  Spezifikationen für das Ort Feld
					elseif ($i==6) 
						echo 'maxlength="40" size="15">';
//  Spezifikationen für das alle anderen Eingabe Felder
					else 
						echo 'maxlength="50" size="22">';
//  Wenn $i == 5 also PLZ ist  in meinem Beispiel
//  schliesse das Tabellenfeld und Tabellenzeile nicht
			if ($i!=5) 
				echo "\n\t\t".'</td></tr>';
//  Nach den Eintragspositionen 1 für Firma, 3 für Vorname und 6 für Ort einen Trennstrich
			if ($i==1 || $i==3 || $i==6)
			echo "\n\t\t".'<tr><td colspan="4"><hr color="'.$rahmenFarbe.'" size="'.$rahmenDicke.'"></td></tr>';
		}
// schliesse den Dateizeiger/ die Datei
		fclose ($zeiger3);
		
// Submit, reset und hidden Button
			echo "\n\t\t".'<tr>';
				echo "\n\t\t\t".'<td>&nbsp;</td>';
				echo "\n\t\t\t".'<td colspan="3" align="left">';
				echo "\n\t\t\t\t".'<input type="submit" name="eintrag" value="Hinzuf&uuml;gen">';
				echo "\n\t\t\t\t"."&nbsp;&nbsp;&nbsp;";
				echo "\n\t\t\t\t".'<input type="reset" value="zur&uuml;cksetzen">';
				echo "\n\t\t\t\t".'<input type="hidden" value=1 name="abgeschickt">';
				echo "\n\t\t\t".'</td>';
			echo "\n\t\t".'</tr>';

// Ende innere Tabelle Datenausgabe
	echo "\n\t</table>";

// Ende Tabelle Rahmen
	echo "\n\t".'</td></tr></table>';


// Ende Form Bereich		
	echo "\n\t".'</form>';


// Ende erste Spalte Positionierung
	echo "\n\t".'</td>';

// **********************************************************************************************************************************
//
//  wenn Button "eintrag" gedrückt wurde
//  ermitteln der Aktuellen Zeit mit time()
//  Zusammensetzen der $aktZeit mit Tag: Monat: Jahr; Stunde: Minute, Secunde
//  Zusammensetzen des neuen Eintrages in $neueMessage
//
// **********************************************************************************************************************************
// ist button gedrückt worden
	if(isset($HTTP_POST_VARS[eintrag]))
	{
// unix timestamp ermitteln
		$idx_time = time();
// aktuelle Zeit für Eintrag ermitteln
		$aktZeit = date("d", $idx_time).":".date("m", $idx_time).":".date("Y", $idx_time)."; ".date("H", $idx_time).":".date("i", $idx_time).",".date("s", $idx_time);
// fügt Zeitangabe als ersten Eintrag in String ein	
		$neueMessage = $aktZeit;
// schreibt POST übergabe Array aus multible Eingabefeld in $textFeld
		$textFeld = $HTTP_POST_VARS[textFeld];
// Abfrage der Textfelder, ob Eintrag bei nichtEintrag wird "Kein Eintrag vorgenommen" geschrieben
		for ($i=0;$i < sizeof($textFeld);$i++)   //>
			{	if($textFeld[$i]=="" || $textFeld[$i]==" ") $textFeld[$i]= "Kein Eintrag vorgenommen";
// fügt Inhalte $textFeld an String, wenn letzter Eintrag, dann abschliessend mit Zeilenschaltung
				if($i==sizeof($textFeld)-1) $neueMessage .= "#".$textFeld[$i]."\n";
				else $neueMessage .= "#".$textFeld[$i]; }
// ruft Funktion datenErsetzen mit Übergabevariable auf
		datenErsetzen("2",$neueMessage,$dateiName,$dateiName2);	
	}
	

// Zweite Spalte Positionierung
	echo "\n\t".'<td align="left" valign="top">';

// *************************************************************************************************************************************************
//
//	 Ausgabe der GästebuchEinträge 
//   in iFrame mit Rahmen aussenrum
//
// *************************************************************************************************************************************************	

// Tabelle zur Vergabe des Rahmens für Eintrag
	echo "\n\t".'<table border="'.$Rahmen.'" bgcolor="'.$rahmenFarbe.'" cellpadding="'.$rahmenDicke.'" cellspacing="0"><tr><td>';
// Erstellen eines iframe zur Ausgabe der Gästebucheinträge
	echo "\n\t".'<iframe src="ausGabe.php" name="ausgabeEintraege" width="416" height="500" align="left"
   				scrolling="yes" marginheight="0" marginwidth="0" frameborder="0">';
// Alternativeintrag für keine iframe
			echo "\n\t".'<table border="'.$Rahmen.'" bgcolor="'.$hinterGrundFarbe.'" cellpadding="'.$rahmenDicke.'" cellspacing="0" width="400">';
			eintraegeAusgeben($dateiName,"5",$rahmenFarbe,$rahmenDicke);
			echo "\n\t".'</table>';
	echo '</iframe>';
// ende Tabelle für Rahmen
	echo "\n\t".'</td></tr></table>';

// Ende Tabelle Positionierung
	echo "\n\t".'</td></tr></table>';

// Aufruf der Funktion Fuss() für Ende HTML Seite
	Fuss();

// *************************************************************************************************************************************************

?>

weiter geht es im folgenden Beitrag
 
Weiterfuehrung des Beitrages

Den folgenden Schnipsell dann bitte saven unter
ausWertung.php

PHP:
<?php
//********************************************************************************
//
//  Funktion eintraegeAusgeben()
//  mit Übergabe der Refferenzdatei, der anzahlAusgabe, der rahmenFarbe und rahmenDicke 
//  die Auszugebenden Einträge werden aus der Referenzdatei $datenDatei
//  zeilenweise Ausgelesen und an ein Array zur Ausgabe übergeben
//  
//
//*******************************************************************************************

function eintraegeAusgeben($datenDatei,$anzahlAusgabe,$rahmenFarbe="red",$rahmenDicke="10")
{
// öffnen der zu lesenden Datei
	$bezeichnung=fopen($datenDatei,"r");
// Schreibe die erste Zeile als Array in $ausgabeBezeichnung
	$ausgabeBezeichnung= fgetcsv ($bezeichnung,4096,"#");
	fclose ($bezeichnung);
// öffnen der zu lesenden Datei
	$zeiger3=fopen($datenDatei,"r");
// solange nicht Dateiende erreicht wurde
	while (!feof($zeiger3))
	{
// schreibe die Aktuelle Zeile in das Array $ausgabeDaten
		$ausgabeDaten= fgetcsv ($zeiger3,4096,"#");
// ignoriert die Erste Zeile der Datei, da hier ja die Bezeichnung der Felder liegt
		if ($i>0):
// Ausgabe in einer Tabelle hier nur Tabellenzeilen und Tabellenzellen !!
// Schreibe $ausgabeBezeichnung[0]==Zeit und gebe den ersten Inhalt der aktuellen Zeile aus ($ausgabeDaten[0])
			echo "\n\t\t"."<tr><th colspan=\"3\" width=\"420\" align=\"left\">".$ausgabeBezeichnung[0].": ".$ausgabeDaten[0]."</th></tr>";
// schreibe arrayFeld[2] aus erster Zeile und arrayFeld[2] aus der aktuellen Zeile
			echo "\n\t\t<tr><td><b>".$ausgabeBezeichnung[2].":</b></td><td> ".$ausgabeDaten[2];
// wenn für arrayFeld[3] kein Eintrag vorgenommen wurde, gebe Eintrag nicht aus
			if( $ausgabeDaten[3]!= "Kein Eintrag vorgenommen")
				echo ", ".$ausgabeDaten[3];
			echo "</td></tr>";
			if( $ausgabeDaten[7]!= "Kein Eintrag vorgenommen")
				echo "\n\t\t"."<tr><td><b>E-Mail:</b></td><td> <a href=\"".$ausgabeBezeichnung[7].": ".$ausgabeDaten[7]."\">".$ausgabeDaten[7]."</a></td></tr>";
			echo "\n\t\t"."<tr><td width=".'100 valign="top"'."><b>".$ausgabeBezeichnung[9].":</b></td><td width=\"300\">".$ausgabeDaten[9]."</td></tr>";
			if( $ausgabeDaten[8]!= "Kein Eintrag vorgenommen")
				echo "\n\t\t"."<tr><td><b>".$ausgabeBezeichnung[8].":</b></td><td> <a href=\"".$ausgabeDaten[8]."\">".$ausgabeDaten[8]."</a></td></tr>";
			echo "\n\t\t"."<tr><td colspan=4><hr color=\"".$rahmenFarbe."\" size=\"".$rahmenDicke."\"></td></tr>";
		endif;
// Zähler, wie viele Einträge ausgegeben Wurden
		$i++;
// ist die max Anzahl erreicht, dann beende die Schleife
		if ($i==$anzahlAusgabe+1) break;
	}						// ende while Schleife
//  schliesse Datenzeiger/Datei
	fclose($zeiger3);
}	// Ende Funktion eintraegeAusgeben


//**********************************************************************************************
//
//  Funktion zum Schreiben einer neuen Zeile in eine .sav 
//  wobei die Datei zeilenweise gelesen und umgeschrieben wird
//  Original Datei $datenDatei unter Verwendung der
//  $datenDatei2 als Zwischenspeicherdatei
//  in die Zeile $ziel, mit dem Inhalt $zeileNeu
//  
//*************************************************************************************
function datenErsetzen($ziel,$zeileNeu,$datenDatei,$datenDatei2)
{
// öffnen der bezugs Dateien
	$zeiger=fopen($datenDatei,"r");
	$zeiger2=fopen($datenDatei2,"w+");
	
// durchsuchen der .csv Datei, bis Dateiende erreicht
	while (! feof($zeiger) )
	{
		$zeile = fgets($zeiger,4096);
// An Position $ziel wird Zeile eingefügt
		if ($ziel==0) $ziel=1;							//  verhindert das überschreiben der Basisdaten in Zeile 0
		if ($z==$ziel) fputs($zeiger2,$zeileNeu);  		//  schreibt  neue Zeile in Temp Datei 
		fputs($zeiger2,$zeile);							//  schreibt alten Inhalt in Temp Datei
		$z++;											//  zählt Zeilen
	}
// schliessen beider DatenZeiger/ .csv Dateien
	fclose($zeiger);
	fclose($zeiger2);
	$savDatei = "Sav$datenDatei";				// Bezeichnung der Sav Datei
	unlink ($savDatei);							// Sicherungsdatei wird gelöscht
	rename ($datenDatei,$savDatei);				// umbenennen von .csv original in savOriginal
	copy ($datenDatei2,$datenDatei);			// kopiert Temp Datei in Original 
}												// schliessen der funktion datenErsetzten

//**************************************************************************************


?>

weiter geht es im Folgebeitrag
 
fortsetzung

Nachfolgenden Schnipsel saven unter:
Grundgeruest.inc.php

PHP:
<?php
function Kopf($Seitentitel)
{
echo '<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">';

echo "\n\n<html>";
echo "\n\t<head>\n";
echo "\n\t\t<title>$Seitentitel</title>\n";
echo "\n\t</head>\n";
echo "\n".'<body marginheight="0" marginwidth="0" leftmargin="0" topmargin="0" bottommargin="0" rightmargin="0">'."\n\n";

}

function Fuss()
{
echo "\n</body>\n";
echo "\n</html>\n";
}
?>


Dann war da noch der Code für die Ausgabe im iFrame
ausGabe.php

PHP:
<?php
// *************************************************************************************************
//  Aufrufen der Verweisdateien für Kopf/Fuss und Funktionen
include("Grundgeruest.inc.php");
include("ausWertung.php");
Kopf("Die Ausgabe");

// **************************************************************************************************

$Rahmen="0";  						// bezeichnet die Rahmenstärke aus Table"
$hinterGrundFarbe="#c0c0cc";  		// gibt die Hintergrundfarbe für alle Tabellen 
$rahmenFarbe="#808080";  			// gibt die Rahmenfarbe für Tab. Rahmen und gest.
$rahmenDicke="3"; 			 		// gibt die Rahmendicke aus Design
$dateiName="eintraege.csv";  		// gibt .csv mit den Herkunftsdaten

// *************************************************************************************************

// Aufruf der Funktion eintraegeAusgeben aus der Bezugsdatei $dateiName mit anzahl der Ausgabe, rahmenFarbe und rahmenDicke
// In einer eigenen Tabelle

echo "\n\t".'<table border="'.$Rahmen.'" bgcolor="'.$hinterGrundFarbe.'" cellpadding="'.$rahmenDicke.'" cellspacing="0" width="400">';
eintraegeAusgeben($dateiName,"10",$rahmenFarbe,$rahmenDicke);
echo "\n\t".'</table>';

// **********************************************************************************************

Fuss();
?>

als letzte Datei kommt dann noch die CSV mit den Daten, in welche auch die neuen Daten abgelegt werden. Jeder Eintrag in eine Zeile:
eintraege.csv



Zeit#Firma#Name#Vorname#Strasse#PLZ#Ort#eMail#Homepage#Eintragung
18:09:2002; 13:37,56#modulata#Zscharnack#Peter#Bahnhof 53#67159#Friedelsheim#petermedien@gmx.net#www.petermedien.de.at #Dies ist ein einfaches Gästebuch, mit stehendem ersten Beispieleintrag, createt mit PHP, Datenspeicherung in einer CSV Datei
23:09:2002; 10:08,29#LW-Media#Wadle#Jörg#Andergasse 15#67098#Bad Dürkheim#joerg.wadle@web.de#www.wadle-joerg.de#Das war eine super Veranstaltung, tolle Idee und gut ausgeführt.
19:09:2002; 09:37,54#Holloman#Jöerg#Harnisch#Paulusstrasse#45123#Worms#holloman@web.de#www.holloman.de #das ist ja super das ist ja super das ist ja super
18:09:2002; 16:18,51#Kutscherhaus#Atzler#Astrid#Peter Koch Str. 50#67156#67156#kutscherhaus@web.de#www.kutscherhaus.de #Alles essen kommt gut von mir
18:09:2002; 13:40,53#Jede Brut#Hauser #Johannes#Gaulwerk 54#23456#Hassenhaus#peterene@gmx.net#www.jedebrut.de #Das ist schoen Das ist schoen Das ist
 
Erklärung

Nun solltet Ihr die einzelnen Fragmente nehmen und in den
entsprechenden Dateien speichern und in ein Unterverzeichniss
des Web-Servers legen. Starten geht über die Seite
Gästebuch.php.

Wie ihr sicherlich bereicht gemerkt habt, wird der Aufbau der
Eingabemaske aus der ersten Zeile der eintraege.csv generiert.

Im Folgenden werden die Daten in diese Datei zeilenweise geschrieben
und zwar gleich in der Reihenfolge, wie ausgegeben. Es werden immer
die 10 aktuellsten Einträge ausgegeben.

Die Ausgabe wird auch wieder Automatisch erzeugt, aus dem
Eintrag und der ersten Zeile.

Bei fragen, stellt sie

Gruss

Peter
 
Zurück