 |
| Hinweise |
Willkommen im TP-Hilfe-Forum!Dies ist ein Forum zu den Themen Photoshop, Dreamweaver, Flash, Selbständigkeit und mehr, in dem Du Hilfe, Anleitung oder eine Lösung zu Deinen Problemen erhältst. Aktuell bist Du in unseren Foren als Gast mit reinen Leserechten unterwegs. Wenn Du Dich registrierst, kannst Du eigene Themen verfassen, Deine Frage stellen und privat mit anderen TPlern kommunizieren. Weitere Foren werden zugänglich, und Du wirst – falls gewünscht – per Mail über neue Beiträge informiert. Die Registrierung ist schnell und kostenlos. Sollten bei der Registrierung Fragen auftauchen, reicht ein Klick in unsere Hilfe - Häufig gestellte Fragen oder eine kurze Mitteilung an das Support-Team. Viel Spaß bei Traum-Projekt.com |
07.09.2005, 13:07
|
#1
|
|
TP-Special Mod
Registriert seit: Feb 2005
Ort: Haan / NRW
|
Einfacher Formmailer mit Reloadsperre
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.
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>
und hier das ganze noch als Download.
Viel Spass beim mailen 
Geändert von steffenk (15.09.2005 um 10:55 Uhr).
|
|
|
06.03.2006, 17:25
|
#2
|
|
TP-Junior
Registriert seit: Feb 2006
|
Hallo,
Parse error: syntax error, unexpected ';' in /is/htdocs/......content/formmailer.php on line 28
gruss
g0u
|
|
|
06.03.2006, 20:09
|
#3
|
|
TP-Special Mod
Registriert seit: Feb 2005
Ort: Haan / NRW
|
|
|
|
07.03.2006, 09:38
|
#4
|
|
TP-Junior
Registriert seit: Feb 2006
|
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 gut  bin lange rumgesurft bis ich ein passendes gefunden hab
gruss
g0u
|
|
|
07.03.2006, 09:48
|
#5
|
|
TP-Moderator
Registriert seit: Nov 2001
Ort: Vienna
|
Hallo,
Habs ja jetzt nicht ausprobiert. Aber Reloadsperre "sehe" ich keine.
|
|
|
12.03.2006, 14:52
|
#6
|
|
TP-Special Mod
Registriert seit: Feb 2005
Ort: Haan / NRW
|
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.
|
|
|
15.03.2006, 08:37
|
#7
|
|
TP-Specialist
Registriert seit: Sep 2001
Ort: Rhein-Main
|
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="";
}

|
|
|
15.03.2006, 11:03
|
#8
|
|
TP-Greis
Registriert seit: Mar 2001
Ort: Berlin, Germany
|
Zitat:
|
Zitat von Paco
Was sind denn eigentlich Form-Attacken? Und was bewirkt oder tut das script:
|
Steht hier:
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
|
|
|
15.03.2006, 12:14
|
#9
|
|
TP-Specialist
Registriert seit: Sep 2001
Ort: Rhein-Main
|
Danke. 
|
|
|
15.03.2006, 23:46
|
#10
|
|
TP-Junior
Registriert seit: Feb 2006
|
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:
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");
}
?>
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".
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
|
|
|
16.03.2006, 10:45
|
#11
|
|
TP-Special Mod
Registriert seit: Feb 2005
Ort: Haan / NRW
|
klar, ist nur eine Kleinigkeit:
PHP-Code:
$pagename="index.php?site=bestellung";
|
|
|
16.03.2006, 10:55
|
#12
|
|
TP-Junior
Registriert seit: Feb 2006
|
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).
|
|
|
16.03.2006, 11:06
|
#13
|
|
TP-Special Mod
Registriert seit: Feb 2005
Ort: Haan / NRW
|
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.
|
|
|
16.03.2006, 11:13
|
#14
|
|
TP-Junior
Registriert seit: Feb 2006
|
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
|
|
|
16.03.2006, 11:23
|
#15
|
|
TP-Moderator
Registriert seit: Nov 2005
Ort: Köln
|
Zitat:
|
Zitat von St@eff.en
Setz den php-Teil ganz an den Anfang.
|
^^ Das da
Vor dem php-Teil ("<?php") darf auch kein Leerzeichen oder sonstwas stehen...
|
|
|
|
Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
|
|
|
| Themen-Optionen |
Thema durchsuchen |
|
|
|
| Thema bewerten |
|
|
Forumregeln
|
Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.
HTML-Code ist aus.
|
|
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 06:13 Uhr.
|
 |