Seite 1 von 9 1234 ... LetzteLetzte
Ergebnis 1 bis 15 von 122

Thema: Einfacher Formmailer mit Reloadsperre

  1. #1
    TP-Special Mod Avatar von steffenk
    Registriert seit
    Feb 2005
    Ort
    Haan / NRW
    Beiträge
    12.869

    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
    Angehängte Dateien Angehängte Dateien
    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

  2. #2
    g0u
    g0u ist offline
    TP-Junior
    Registriert seit
    Feb 2006
    Beiträge
    9
    Hallo,

    Parse error: syntax error, unexpected ';' in /is/htdocs/......content/formmailer.php on line 28


    gruss
    g0u

  3. #3
    TP-Special Mod Avatar von steffenk
    Registriert seit
    Feb 2005
    Ort
    Haan / NRW
    Beiträge
    12.869
    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

  4. #4
    g0u
    g0u ist offline
    TP-Junior
    Registriert seit
    Feb 2006
    Beiträge
    9
    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

  5. #5
    TP-Moderator Avatar von Peter
    Registriert seit
    Nov 2001
    Ort
    Vienna
    Beiträge
    3.425
    Hallo,

    Habs ja jetzt nicht ausprobiert. Aber Reloadsperre "sehe" ich keine.
    _________-- - adicto otra vez - --
    (¯`·.¸¸.·´¯`·.¸¸..¸¸.·´¯`·.¸¸..¸¸.·´¯`·.¸¸.·`¯)
    Unterwasserrugby - der dreidimensionale Sport

  6. #6
    TP-Special Mod Avatar von steffenk
    Registriert seit
    Feb 2005
    Ort
    Haan / NRW
    Beiträge
    12.869
    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

  7. #7
    TP-Specialist Avatar von Paco
    Registriert seit
    Sep 2001
    Ort
    Rhein-Main
    Beiträge
    2.296
    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="";
        } 

  8. #8
    TP-Greis Avatar von Boris
    Registriert seit
    Mar 2001
    Ort
    Stuttgart & Kornwestheim
    Beiträge
    9.420
    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

  9. #9
    TP-Specialist Avatar von Paco
    Registriert seit
    Sep 2001
    Ort
    Rhein-Main
    Beiträge
    2.296
    Danke.

  10. #10
    g0u
    g0u ist offline
    TP-Junior
    Registriert seit
    Feb 2006
    Beiträge
    9
    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

  11. #11
    TP-Special Mod Avatar von steffenk
    Registriert seit
    Feb 2005
    Ort
    Haan / NRW
    Beiträge
    12.869
    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

  12. #12
    g0u
    g0u ist offline
    TP-Junior
    Registriert seit
    Feb 2006
    Beiträge
    9
    damit ist es leider nicht getan, hab es so auch schon selber ausprobiert. Bekomme folgenden Fehler:

    PHP-Code:
    WarningCannot modify header information headers already sent by (output started at /is/htdocs/38289/www..../index.php:8in 
    /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)

  13. #13
    TP-Special Mod Avatar von steffenk
    Registriert seit
    Feb 2005
    Ort
    Haan / NRW
    Beiträge
    12.869
    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

  14. #14
    g0u
    g0u ist offline
    TP-Junior
    Registriert seit
    Feb 2006
    Beiträge
    9
    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

  15. #15
    TP-Moderator Avatar von Cybergreek
    Registriert seit
    Nov 2005
    Ort
    Köln
    Beiträge
    1.666
    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...
    Grüße vom Griechen,
    Cybergreek!

    everygain Translator - eine Firefox-Erweiterung, damit der Grieche Euch besser versteht

Seite 1 von 9 1234 ... LetzteLetzte

Aktive Benutzer

Aktive Benutzer

Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)


Aktive Benutzer

Aktive Benutzer

Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)

     

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •  

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51