[php] Gästebuch macht Probleme

CWPA

Ensign
Registriert
März 2005
Beiträge
205
Hallo, ich wollte heute ein Gästebuch programmiern, allerdings macht es mir Probleme.
Ich wollte es so machen dass wenn Angaben fehlen eine Fehlermeldung kommt, geht aber irgendwie nicht.
Dann wollte ich dass die Beiträge in einer Txt datei hinterlegt werden funktioniert auch nicht.
PHP:
<?php
if($_POST['sent']==1)
{
$_POST['name']=str_replace('~','',strip_tags(trim($_POST['name'])));
$_POST['name']=str_replace('~','',strip_tags(trim($_POST['betreff'])));
$_POST['name']=str_replace('~','',strip_tags(trim($_POST['message'])));
if(!$_POST['name']){$fehler="Bitte geben sie Ihren Namen ein <br>";}
if(!$_POST['betreff']){$fehler.="Bitte geben sie den Betreff an <br>";}
if(!$_POST['message']){$fehler.="Bitte geben sie eine Nachricht ein ein <br>";}
if($fehler){$fehler="<h4><font color=red>".$fehler."</font></h4>";}
}
if($_POST['name'] AND $_POST['betreff'] AND $_POST['message'])//Formular wurde ausgefüllt
{
//$_POST['message']=nl2br($_POST['message']);
$t1=chr(10);
$t2=chr(13);
$_POST['message']=str_replace($t1,'<br>',$_POST['message']);
$_POST['message']=str_replace($t2,'<br>',$_POST['message']);
if(file_exists('gast.txt')){$ausgabe="\n";}
$comment=fopen('gast.txt','a');
$ausgabe.=$_POST['name']."~".$_POST['betreff']."~".$_POST['message'];
fputs($comment,$ausgabe);
fclose($comment);
$_POST['name']="";
$_POST['betreff']="";
$_POST['message']="";
}
?>

HTML:
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<title>Gästebuch</title>
</head>
<body>
<h3> Unser Gästebuch </h3>
<form action="<?php echo $_SERVER['PHP_SELF']; ?>" methode="post">
<input type="hidden" name="sent" value="1" />
<p>Ihr Name:<br />
<input type="text" name="name" size="30" value="<?php echo $_POST['name']; ?>" /> <br />
Betreff<br />
<input type="text" name="betreff" size="30" value="<?php echo $_POST['betreff']; ?>" /> <br />
Ihre Nachricht:<br />
<textarea name="message" size="30" value="<?php echo $_POST['message']; ?>" /> 
</textarea>
</p>
<input type="submit" value="abschicken" />
</form>
</body>
</html>

PS: ist eine Datei - nur zur übersicht getrennt.

Edit: mir fällt gerade ein das das aus einem PHP 5 Buch ist und mein server nur PHP 4 hat ? was kann ich dann machen?
 
Zuletzt bearbeitet:
definiere mal geht nicht? Was für Fehlermeldung, etc...

Der Quellcode sieht normal aus und ist denke ich nicht PHP 5 spezifisch. Sprich sollte auch auf PHP 4 laufen.
 
Es tut sich einfach nix.

Also die input felder sehe ich im Browser.

Wenn ich dann angaben vergessen. Wird alles gelöscht und die Fehlermeldung kommt nicht!

Wenn ich alles ein tippe kommt nicht der eintrag in der gast.txt?
 
schau mal das hier:

PHP:
<form action="<?php echo $_SERVER['PHP_SELF']; ?>" methode="post">

es heißt eigentlich method (englisch) und nicht methode (deutsch)
 
mist hätte gedacht dann würde es gehen, aber immer noch selber sachverhalt wie vorher :(
 
mach vielleicht einfach mal die('test');
an verschiedene Stellen, dann siehst du ob er überhaupt soweit kommt.

z.B: nach:

PHP:
if($_POST['sent']==1)
{

oder nach

PHP:
if($_POST['name'] AND $_POST['betreff'] AND $_POST['message'])//Formular wurde ausgefüllt
{

Dann weiß man zumindest ob er da schon gar nicht rein geht oder wo er hängt.
 
der erste geht,

beim zweiten geht dann wieder nichts wie voher ?
 
Irgendwie habe ich hin bekommen, das es in die .txt geschrieben wird :) aber die fehlermeldung klappt nicht?
 
In dem Zweiten stehen ja auch keine boolesche Ausdrücke sonderen nur eine AND Verknüpfung von Strings, was soll das bringen?

Solltest du nicht isset() benutzen oder ein !="" ?

Ich merke gerade, dass du in fast jedem IF-Clause nach Inhalte von POST abfragst, anstatt nach booleschen Ausdrücke. Oder vielleicht verstehe ich nicht genug von PHP!
 
Zuletzt bearbeitet:
ich habe das nur so aus nen mut buch ...?

wie meinst du soll ich dass machen?
 
Anstatt

PHP:
if($_POST['name'] AND $_POST['betreff'] AND $_POST['message'])

solltest du vielleicht:

PHP:
if($_POST['name']!=""  AND $_POST['betreff']!="" AND $_POST['message']!="")

versuchen.

Und dann das gleiche bei den anderen IF-clauses!
 
Zuletzt bearbeitet:
nein geht nicht ;( aber ist auch nicht so schlimm wenn die fehler funktion nicht geht


Habe eien Problem mit der ausgabe, weiß nicht warum!
PHP:
<?php
$eintrag=file('gast.txt');
$ausgabe="<br>";
$temp=count($eintrag)-1;
for($i=$temp;$i>=0;$1--)
{
$element=explode('~',$eintrag[$i]);
$ausgabe.="<table>";
$ausgabe.="<tr><td><b>".$element[1]."</b></td></tr>";
$ausgabe.="<tr><td>".$element[0]."</td></tr>";
$ausgabe.="<tr><td>".$element[2]."</td></tr>";
$ausgabe.="</table>";
}
?>

Parse error: syntax error, unexpected T_LNUMBER, expecting T_VARIABLE or '$' in \ausgabe.php on line 5

ich danke euch schon mal bis hier :)
 
jo, ich glaube du hast in deinem Vorschleifenkopf was falsch. Du benutzt "$1--" anstatt ein "$i--".

Kommt das hin?


Leider gibt es bei PHP 1000 EInstellungsmöglichkeiten und 1000 Unterscheide zwischen den Versionen. Es ist sehr schwer zu helfen ohne die genaue Konfig und die genaue Version zu kennen!
 
Gibt immer noch ein kleine Probleme.

Es gibt ja 3 felder aus zufüllen, Name betreff Message

Statt den namen gibt er aber die Message aus und die, message wie es sein sollte noch mal dannach aus.

Es sollte ja so ausssehen

Betreff
Name
Message

und nicht

Betreff
Message
Message

weiße einer worans liegt?
 
Hier müsste doch jeder einen Fehler sehen ^^
PHP:
$_POST['name']=str_replace('~','',strip_tags(trim($_POST['name'])));
$_POST['name']=str_replace('~','',strip_tags(trim($_POST['betreff'])));
$_POST['name']=str_replace('~','',strip_tags(trim($_POST['message'])));

müsste doch heißen
PHP:
$_POST['name']=str_replace('~','',strip_tags(trim($_POST['name'])));
$_POST['betreff']=str_replace('~','',strip_tags(trim($_POST['betreff'])));
$_POST['message']=str_replace('~','',strip_tags(trim($_POST['message'])));

und
PHP:
if($_POST['name'] AND $_POST['betreff'] AND $_POST['message'])
könnte man ja auch in
PHP:
if (!isset($fehler))
tauschen... weil die Variable $fehler ja nur dann existiert, falls eines der Felder nicht ausgefüllt wurde...
 
Danke das mit dem ausfüllen klappt, aber weiß nicht was du mit
PHP:
 if (!isset($fehler))
meinst damit habe ich noch nichts gemacht?
 
Das
PHP:
if(!isset(variable))
prüft, ob eine Variable nicht gesetzt ist. Man kann das einetzen, um festzustellen, ob ein Feld in einem Formular eingefüllt wurde, oder ob eine Variable noch keine Zuwesung erhalten hat. Leider funktioniert dies nicht immer, ist von Version und Konfig abhängig. Es macht fast das gleiche wie
PHP:
if(variable=="")
wenn man mit Strings arbeitet.
 
Zuletzt bearbeitet:
Zurück
Oben