Gästebuch - Datum und keine Eingabe

xNeOx

Mitglied
Hallo ihr Profis :) :)
ich bin dabei mir ein Gästebuch zu schreiben.

Zuerst mal der Quellcode der Ausgabeseite:
-----------------------------
PHP:
<?php
include("dbconnect.php");

$name = $_REQUEST["name"];
$wohnort = $_REQUEST["wohnort"];
$email = $_REQUEST["email"];
$homepage = $_REQUEST["homepage"];
$kommentar = $_REQUEST["kommentar"];





#entfernt Slashes und wandelt Sonderzeichen in HTML-Code um
$name = htmlentities($name);
$wohnort = htmlentities($wohnort);
$email = htmlentities($email);
$homepage = htmlentities($homepage);
$kommentar = htmlentities($kommentar);
$name = strip_tags($name);
$wohnort = strip_tags($wohnort);
$email = strip_tags($email);
$homepage = strip_tags($homepage);
$kommentar = strip_tags($kommentar);

#überprüft, ob alle wichtigen Felder ausgefüllt sind
if($name == "" or $wohnort == "" or $email == "" or $kommentar == "")
	{
	echo "Folgende Felder musst du auf jeden Fall ausfüllen:";
	echo "<br>\n";
	echo "<li>Name</li><br>\n";
	echo "<li>Wohnort</li><br>\n";
	echo "<li>e-Mail</li><br>\n";
	echo "<li>Kommentar</li><br>\n";
	echo "<br><a href='javascript:history.back()'>Zurück</a>";
	}

$eintrag = "INSERT INTO gaestebuch (name, wohnort, email, homepage, kommentar)
			VALUES ('$name', '$wohnort', '$email', '$homepage', '$kommentar')";
$eintragen = mysql_query($eintrag);

# ----------------------------------gibt DB-Inhalt aus---------------------------------------------------
$abfrage = "SELECT * FROM gaestebuch ORDER BY id DESC";
$abfragen = mysql_query($abfrage);


while($row = mysql_fetch_array($abfragen))
	{
	$name1 = $row["name"];
	$wohnort1 = $row["wohnort"];
	$email1 = $row["email"];
	$homepage1 = $row["homepage"];
	$kommentar1 = $row["kommentar"];
	$id = $row["id"];
	$datum = date("d.m.Y - H:i");
	$datum .=" Uhr";
	$kommentar1 = nl2br($kommentar1);
	
	
	
	echo "<table align='center' border='0' width='90%' cellpadding='1' cellspacing='1'>";
	echo "<tr>";
	echo "<td bgcolor='#FF962D' width='10%'>Nr. $id</td>";
	echo "<td bgcolor='#8EE6E6' width='65%'><a href='mailto:$email'>$name1</a> aus $wohnort1</td>";
	echo "<td bgcolor='#5FC44D' width='10%'><div align='center'><a href='$email1'><img src='homepage.gif' alt='zur homepage von $name1'></a></div></td>";
	echo "<td bgcolor='#E73930' width='15%'><font size='-1'>$datum</font></td>";
	echo "</tr>";
	echo "</table>";

	echo "<table align='center' border='0' width='90%' cellpadding='1' cellspacing='1'>";
	echo "<tr>";
	echo "<td bgcolor='#ff00ff' width='85%'>$kommentar1</td>";
	echo "<td bgcolor='#008000' width='*'>&nbsp;</td>";
	echo "</tr>";

	echo "</table>";
	echo "<br>\n";
	
	}



?>

-----------------------------

Jetzt habe ich zwei Fragen:

1) Irgendwas mit dem Datum stimmt nicht. Kommt ein neuer Eintrag hinzu, wird bei allen Einträgen das Datum (die Uhrzeit) des letzten Eintrags angezeigt. Wie kann ich das verhindern?

2) Ich habe ja die if-Abfrage, ob alle Felder (Name, e-Mail...) usw ausgefüllt sind. Ist dies nicht der Fall, so wird man darauf hingewiesen, doch bitte alle Felder auszufülen. Jedoch wird trotzdem ein Eintrag in die Datenbank gemacht. Wie kann ich das verhindern?

Könnt ihr mir bei meinen Problemen helfen?

Danke im Voraus
 
PHP:
if($name == "" or $wohnort == "" or $email == "" or $kommentar == "")

    {

    echo "Folgende Felder musst du auf jeden Fall ausfüllen:";
    echo "<br>\n";
    echo "<li>Name</li><br>\n";
    echo "<li>Wohnort</li><br>\n";
    echo "<li>e-Mail</li><br>\n";
    echo "<li>Kommentar</li><br>\n";
    echo "<br><a href='javaScript:history.back()'>Zurück</a>";
    break; // Stoppt dass Script an dieser stelle, also wird der beitrag nicht mehr eingetragen.
    }

Dass du immer das gleiche Datum bekommst ist logisch, da du nicht wissen kannst wann der Beitrag gesendet wurde wenn du das nicht in der Datenbank speicherst.
date("d.m.Y - H:i") gibt dir nur das Datum aus welches bei der Ausführung des skripts gerade war, also immer das aktuelle.
Du musst einfach einen Timestamp in der DB speicher und den dann mit date formatieren.

gruß tob
 
zuersteinmal danke!:)

Wenn ich das "break;" einfüge kommt folgende Fehlermeldung:

Fatal error: Cannot break/continue 1 level in C:\Intranet\Apache2\htdocs\Gästebuch\gb2.php on line 36

wobei Linie 36 eben gerade dieses "break;" ist. Was soll ich machen?
 
kann man if-Anweisungen überhaupt "breaken"?

damit der rest der anweisung nicht durchlaufen wird, musst du den Rest der Anweisung (wenn alles ausgefüllt wurde) in den else-Teil der if-SChleife setzen

PHP:
#überprüft, ob alle wichtigen Felder ausgefüllt sind
if($name == "" or $wohnort == "" or $email == "" or $kommentar == "")
    {
    echo "Folgende Felder musst du auf jeden Fall ausfüllen:";
    echo "<br>\n";
    echo "<li>Name</li><br>\n";
    echo "<li>Wohnort</li><br>\n";
    echo "<li>e-Mail</li><br>\n";
    echo "<li>Kommentar</li><br>\n";
    echo "<br><a href='java script:history.back()'>Zurück</a>";
    } else {
......
}
 
Zuletzt bearbeitet:
@pxlArtizzt
hast recht, war gestern abend ja auch schon spät, da passiert so was :-) ,
Deine Lösung ist logischerweise die bessere...

Aber zu meiner verteidigung muss ich sagen, dass ich dooferweise nur break mit der exit() Funktion verwechselt habe, damit müsste es gehen...

tob
 
Aber ich möchte dich warnen :-) wenn du exit benutz hat das einen
kleinen Nachteil im vergleicht zu pxlArtizzts Version:
Code:
if(bedingung){
      Diverse Anweisungen;
      exit();
}
Daten speichern;
Daten anzeigen;
sobald die Exit funktion aufgerufen wurde geht gar nichts mehr, wolltest
du zum Beispiel die Fehlermeldung ausgeben und darunter noch die anderen
einträge anzeigen ohne die Daten zu speichern, musst du den ganzen
Code für das Anzeigen der Beiträge nochmal vor das exit packen. Mit pxlArtizzts
version sieht es dann aber einfach so aus:
Code:
if(bedingung){
      Diverse Anweisungen;
}
else{
      Daten speichern;
}
Daten anzeigen;
vor allem wenn du das Script per include einbindest ist das besser.

gruß tob
 
Tut mir leid, dass ich schon wieder störe, aber es gibt wieder Probleme:

1) bekomm ich das mit dem Datum nicht hin. (hab versch. Möglichkeiten probiert)
2) wird die e-Mail-Adresse überschrieben (der erste Eintrag hat dann die selbe Adresse wie der zweite)


Hier der Code:

PHP:
<?php
include("dbconnect.php");

$name = $_REQUEST["name"];
$wohnort = $_REQUEST["wohnort"];
$email = $_REQUEST["email"];
$homepage = $_REQUEST["homepage"];
$kommentar = $_REQUEST["kommentar"];





#entfernt Slashes und wandelt Sonderzeichen in HTML-Code um
$name = htmlentities($name);
$wohnort = htmlentities($wohnort);
$email = htmlentities($email);
$homepage = htmlentities($homepage);
$kommentar = htmlentities($kommentar);
$name = strip_tags($name);
$wohnort = strip_tags($wohnort);
$email = strip_tags($email);
$homepage = strip_tags($homepage);
$kommentar = strip_tags($kommentar);

$timestamp = time();

#überprüft, ob alle wichtigen Felder ausgefüllt sind
if($name == "" or $wohnort == "" or $email == "" or $kommentar == "")
	{
	echo "Folgende Felder musst du auf jeden Fall ausfüllen:";
	echo "<br>\n";
	echo "<li>Name</li><br>\n";
	echo "<li>Wohnort</li><br>\n";
	echo "<li>e-Mail</li><br>\n";
	echo "<li>Kommentar</li><br>\n";
	echo "<br><a href='javascript:history.back()'>Zurück</a>";
	echo "<br>\n";
	echo "<br>\n";
	}
else
	{




$eintrag = "INSERT INTO gaestebuch (name, wohnort, email, datum, homepage, kommentar)
			VALUES ('$name', '$wohnort', '$email', '$timestamp', '$homepage', '$kommentar')";
$eintragen = mysql_query($eintrag);
	}

# ----------------------------------gibt DB-Inhalt aus---------------------------------------------------
$abfrage = "SELECT * FROM gaestebuch ORDER BY id DESC";
$abfragen = mysql_query($abfrage);


while($row = mysql_fetch_array($abfragen))
	{
	$name1 = $row["name"];
	$wohnort1 = $row["wohnort"];
	$email1 = $row["email"];
	$homepage1 = $row["homepage"];
	$kommentar1 = $row["kommentar"];
	$id = $row["id"];
	$datum = $row["timestamp"];
	
	$datum1 = date("d.m.Y - H:i", $datum);
	$datum1 .=" Uhr";
	$kommentar1 = nl2br($kommentar1);
	
	//Im Kommentar wird automatisch nach 65 zeichen ein Zeilenumbruch eingefügt
	$kommentar1 = wordwrap($kommentar1, 65, "<br>\n", 1);


	echo "<table align='center' border='0' width='90%' cellpadding='1' cellspacing='1'>";
	echo "<tr>";
	echo "<td bgcolor='#FF962D' width='10%'>Nr. $id</td>";
	echo "<td bgcolor='#8EE6E6' width='65%'><a href='mailto:$email'>$name1</a> aus $wohnort1</td>";
	echo "<td bgcolor='#5FC44D' width='10%'><div align='center'><a href='http://$homepage1'><img src='homepage.gif' alt='zur homepage von $name1' border='0'></a></div></td>";
	echo "<td bgcolor='#E73930' width='15%'><font size='-1'>$datum1</font></td>";
	echo "</tr>";
	echo "</table>";

	echo "<table align='center' border='0' width='90%' cellpadding='1' cellspacing='1'>";
	echo "<tr>";
	echo "<td bgcolor='#ff00ff' width='85%'>$kommentar1</td>";
	echo "<td bgcolor='#008000' width='*'>&nbsp;</td>";
	echo "</tr>";

	echo "</table>";
	echo "<br>\n";
	
	}
	



?>
Bitte helft mir:rolleyes: :rolleyes:
 
Zurück