Hallo,
Parse error: syntax error, unexpected ';' in /is/htdocs/......content/formmailer.php on line 28
gruss
g0u
Da es immer wieder zu Nachfragen wegen Formmailern kommt, möchte ich hier eine einfache Variante vorstellen.
Ich habe eine einfache Formatierung per css vorgenommen, das kann natürlich alles nach Herzenslust verändert werden.
Die Form besteht nur aus 3 Feldern, Name, Email und Message.
Bei Fehlern wird der Fehlertext angezeigt und die entsprechenden Felder rot umrandet.
Folgende Pflichtangaben hab ich vorrausgesetzt:
Der Name muss aus mind. 3 Zeichen bestehen
Die Message muss aus mind. 10 Zeichen bestehen
Die Email-Adresse muss ein gültiges Format besitzen.
Hier der Quelltext, die Datei muss die Endung php bekommen.
Der Name der Datei ist im Script mit $pagename angegeben (in diesem Fall formmailer.php). Soll die Datei unter einem anderen Namen laufen, so muss die Variable entsprechend geändert werden.
Aus aktuellem Anlass habe ich noch eine Überprüfung auf Formattacken eingebaut.
und hier das ganze noch als Download.HTML-Code:<?php /*******************************************/ /* formmailer.php */ /* */ /* FORMMAILER mit Reloadsperre */ /* */ /* von Steffen Kamper */ /* erstellt für das Traumprojekt-Forum */ /* */ /*******************************************/ //erstmal Variablen definieren $pagename="formmailer.php"; $error=$name=$email=$message=""; // an wen geht die Mail ? $empfaenger="ich@zuhause.de"; if(isset($_POST['domail'])) { // es wurde abschicken gedrückt, also erst mal die Felder holen $name=get_magic_quotes_gpc() ? stripslashes($_POST['name']) : $_POST['name']; $email=get_magic_quotes_gpc() ? stripslashes($_POST['email']) : $_POST['email']; $message=get_magic_quotes_gpc() ? stripslashes($_POST['message']) : $_POST['message']; //Form-Attacken verhindern if(strpos($name,"\r\n")>0) { DebugAttack(substr($name,strpos($name,"\r\n")); $name=""; } if(strpos($email,"\r\n")>0) { DebugAttack(substr($email,strpos($email,"\r\n")); $email=""; } // wir setzen einen Flag, um Fehler zu registrieren $ok=true; //jetzt werden die Felder überprüft if (strlen($name)<3) // der Name muss mindestens 3 Zeichen haben { $err[0]=true; //Fehler merken $ok=false; //Fehlerflag setzen $error.='Bitte geben Sie Ihren Namen an. (mindestens 3 Zeichen)<br>'; // Fehlertext } if ( (!(eregi('^[a-z0-9_\.-]+@[a-z0-9_-]+\.[a-z0-9_\.-]+$',$email))) && (strlen($email)>0) || $email=="") { //email-Adresse ist ungültig $err[1]=true; $ok=false; $error.='Bitte kontrollieren Sie die angegebene E-Mail-Adresse.<br>'; } if (strlen($message)<10) // die Message muss mindestens 10 Zeichen haben { $err[2]=true; //Fehler merken $ok=false; //Fehlerflag setzen $error.='Bitte geben Sie eine Message von mindestens 10 Zeichen ein.<br>'; // Fehlertext } // ist alles ok ? dann senden if($ok) { //Mail komponieren $mailheader="From: $name <$email>\r\nX-Mailer: PHP/" . phpversion(). "\r\nX-Sender-IP: ".$_SERVER['REMOTE_ADDR']."\r\nContent-Type: text/plain; charset=ISO-8859-1;"; $subject="Webseiten-Nachricht von $name"; if (@mail($empfaenger, $subject, $message, $mailheader)) { //Alles ok, Seite neuladen (Reloadsperre) header("Location:$pagename?success"); } else { $error='<h3>Fehler beim Mailen aufgetreten</h3>'; } } else { // Fehler ausgeben $error='<h3>Fehler bei der Eingabe</h3><p class="error">'.$error.'</p>'; } } ?> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"> <html> <head> <title>Form-Mailer</title> <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"> <style type="text/css"> body {background:#fff;} form {width:360px;} label {display:block;} input, textarea {font-size:11px;} textarea {width:360px;height:240px;} input.button {border:1px solid #000;background:#ffcc00;margin-top:12px;} .fehler {border:1px solid red;} p.error {color:red;} </style> </head> <body> <h1>Form-Mailer mit Reloadsperre</h1> <?php if($error!="") echo $error; if(isset($_GET['success'])) { //Erfolgsnachricht ausgeben echo '<p>Vielen Dank für Ihre Nachricht. Sie wurde erfolgreich verschickt.</p>'; } else { // Form ausgeben ?> <form action="<?php echo $pagename;?>" method="post" name="formmailer"> <fieldset><legend>Mail schreiben</legend> <label for="name">Name</label> <input type="Text" value="<?php echo $name;?>" maxlength="60" size="50" name="name" <?php if(isset($err[0])) echo 'class="fehler"';?>> <label for="email">Email-Adresse</label> <input type="Text" value="<?php echo $email;?>" maxlength="80" size="50" name="email" <?php if(isset($err[1])) echo 'class="fehler"';?>> <label for="comment">Message</label> <textarea cols="10" rows="10" name="message" <?php if(isset($err[2])) echo 'class="fehler"';?>><?php echo $message;?></textarea> <input type="reset" class="button" value="zurücksetzen" name="reset"> <input type="submit" class="button" value="abschicken" name="domail"> </fieldset> </form> <?php } function DebugAttack($s) { //Hier den Pfad für die Protokolldatei einfügen, wenn kein Protokoll erwünscht ist, einfach auskommentieren $fp=fopen("/tmp/attack.txt","ab"); fwrite($fp,$s); fclose($fp); } ?> </body> </html>
Viel Spass beim mailen![]()
Geändert von steffenk (15.09.2005 um 10:55 Uhr)
TYPO3 · MySQLDumper · dislabs
·
manche Mühlen mahlen schneller ...
"Ich habe Rücken"
Horst Schlämmer
Hallo,
Parse error: syntax error, unexpected ';' in /is/htdocs/......content/formmailer.php on line 28
gruss
g0u
bitte die aktuelle Version benutzen:
http://www.dislabs.de/index.php?ac=labor&sub=5&id=16
TYPO3 · MySQLDumper · dislabs
·
manche Mühlen mahlen schneller ...
"Ich habe Rücken"
Horst Schlämmer
ah, danke
habe den Fehler vom "alten" script gefunden, da fehlen bei 2 Zeilen jeweils eine ) .... ich hatte dann versucht Felder hinzuzufügen, für eine adresse, mit wohnort, usw. allerdings hatte das nicht geklappt :/ muss dazu sagen das ich ein Anfänger bin.
Kannst du kurz und knapp erklären, was ich wo hinzufügen muss, um neue Felder zu bekommen?
Findes das Script übrigens ziemlich gutbin lange rumgesurft bis ich ein passendes gefunden hab
gruss
g0u
Hallo,
Habs ja jetzt nicht ausprobiert. Aber Reloadsperre "sehe" ich keine.
_________-- - adicto otra vez - --
(¯`·.¸¸.·´¯`·.¸¸..¸¸.·´¯`·.¸¸..¸¸.·´¯`·.¸¸.·`¯)
Unterwasserrugby - der dreidimensionale Sport
Die Reloadsperre ist die header-Anweisung - es wird eine neue Seite geladen, dadurch ist ein erneutes Absenden per Refresh nicht möglich
@gOu: einfach im Formular die Felder hinzufügen, beim auslesen die entsprechende Variable benutzen (wie
$name=get_magic_quotes_gpc() ? stripslashes($_POST['name']) : $_POST['name'];
)
und die Variable im Messagetext der Mail hinzufügen.
TYPO3 · MySQLDumper · dislabs
·
manche Mühlen mahlen schneller ...
"Ich habe Rücken"
Horst Schlämmer
Was sind denn eigentlich Form-Attacken? Und was bewirkt oder tut das script:
PHP-Code://Form-Attacken verhindern
if(strpos($name,"\r\n")>0) {
DebugAttack(substr($name,strpos($name,"\r\n"));
$name="";
}
if(strpos($email,"\r\n")>0) {
DebugAttack(substr($email,strpos($email,"\r\n"));
$email="";
}
![]()
Steht hier:Zitat von Paco
http://www.traum-projekt.com/forum/1...injection.html
“My software never has bugs. It just develops random features ...”
» DevShack - die Website des freien Webentwicklers Boris
Ich hab da ein anderes großes Problem mit dem Script.
Ich benutze auf meiner Seite ein kleines php Script um die gewünschten Unterseiten, "in der Seite" anzuzeigen:
Wenn ich den Formmailer nun über http://www.name.de/index.php?site=bestellung aufrufe zeigt er mir den Mailer zwar an, nur sobald ich eine Mail abschicken will, kommt die Meldung "Dei Seite kann nicht angezeigt werden" und in der Adresszeile steht "http://www.name.de/formmailer.php".PHP-Code:<? if(file_exists("content/" . $_GET['site'] . ".php")){
include("content/" . $_GET['site'] . ".php");
}elseif($_GET['site'] == ""){
include("content/start.php");
}else{
echo "<div class=\"error\">Die Datei wurde nicht gefunden</div><br />";
include("content/start.php");
}
?>
Gibts dafür irgendwie eine einfache Lösung?
Das ich vielleicht irgendwo im Code eine Kleinigkeit änder?
Ich habs selber schon versucht, nur dabei kamen so einige php Fehler raus
Würd mich über eine Hilfestellung freuen.
Gruss
g0u
klar, ist nur eine Kleinigkeit:
PHP-Code:$pagename="index.php?site=bestellung";
TYPO3 · MySQLDumper · dislabs
·
manche Mühlen mahlen schneller ...
"Ich habe Rücken"
Horst Schlämmer
damit ist es leider nicht getan, hab es so auch schon selber ausprobiert. Bekomme folgenden Fehler:
PHP-Code:Warning: Cannot modify header information - headers already sent by (output started at /is/htdocs/38289/www..../index.php:8) in
/is/htdocs/38289/www..../content/formmailer.php on line 71
und das steht in Zeile 71
PHP-Code:header("Location:$pagename?success");
Geändert von g0u (16.03.2006 um 11:01 Uhr)
dann hast Du vorher schon irgendeine Ausgabe - das darf nicht. Setz den php-Teil ganz an den Anfang.
Wenn Du includest, darf auch in index.php vorher nichts ausgegeben werden.
TYPO3 · MySQLDumper · dislabs
·
manche Mühlen mahlen schneller ...
"Ich habe Rücken"
Horst Schlämmer
das einzigste was ich an php in meiner index.php hab, ist der oben angegebene code.
Was muss ich denn dann wo ändern? Sorry wenn ich so blöd frage
^^ Das daZitat von St@eff.en
Vor dem php-Teil ("<?php") darf auch kein Leerzeichen oder sonstwas stehen...
Grüße vom Griechen,
Cybergreek!
everygain Translator - eine Firefox-Erweiterung, damit der Grieche Euch besser versteht
Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)