Ankündigung

Einklappen
Keine Ankündigung bisher.

Kontaktformular

Einklappen

Neue Werbung 2019

Einklappen
X
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Kontaktformular

    kontakt.php
    PHP-Code:
    <?php
    function check($email)
    {        
    if(
    preg_match('/^[^\x00-\x20()<>@,;:\\".[\]\x7f-\xff]+(?:\.[^\x00-\x20()<>@,;:\\".[\]\x7f-\xff]+)*\@[^\x00-\x20()<>@,;:\\".[\]\x7f-\xff]+(?:\.[^\x00-\x20()<>@,;:\\".[\]\x7f-\xff]+)+$/i'$email)) {
    send();
    } else {
    echo 
    "Sie haben keine korrekten Daten angegeben! <a href=\"index.php\">Zurück</a>";
    die();
    }
    }  
    function 
    send()
    {
    $timestamp time();
    $datum date("d.m.Y",$timestamp);
    $uhrzeit date("H:i:s",$timestamp);
    $zeit $datum." um ".$uhrzeit." Uhr";
    $empfanger "!!!!!!!HIER KOMMT IHRE E-ADRESSE HIN!!!!!!!";
    $betreff "Die wilden Bandenwürmer Kontaktformular - ";
    $betreff .= $_POST[betreff];
    $text "<!DOCTYPE html PUBLIC \"-//W3C//DTD HTML 4.0 Transitional//EN\" \"http://www.w3.org/TR/REC-html40/loose.dtd\">\n";
    $text .= "<html><body style=\"margin:0;padding:0;font-family:Arial;color:#000000;background: #caced1;\"><p>";
    $text .= $_POST[absender];
    $text .= " mit der E-mail Adresse ";
    $text .= $_POST[email];
    $text .= " schrieb am<br>";
    $text .= $zeit;
    $text .= ": <br><br>\n";
    $text .= $_POST[text];
    $text .= "</p></body></html>";
    $absender "From: ";
    $absender .= $_POST[absender];
    $absender .= " <";
    $absender .= $_POST[email];
    $absender .= ">\nContent-Type: text/html\nContent-Transfer-Encoding: 8bit\n";
    mail($empfanger$betreff$text$absender);
    $message "Ihre Nachricht wurde am ";
    $message .= $zeit;
    $message .= " mit folgenden Daten versendet:<br>";
    $message .= "Absender: ";
    $message .= $_POST[absender];
    $message .= " &lt;";
    $message .= $_POST[email];
    $message .= "&gt;<br>";
    $message .= "Betreff: ";
    $message .= $_POST[betreff];
    $message .= "<br>";
    $message .= "Nachricht: <br>";
    $message .= $_POST[text];
    echo 
    $message;
    }
    #####################################################
    echo "<!DOCTYPE html PUBLIC \"-//W3C//DTD HTML 4.0 Transitional//EN\" \"http://www.w3.org/TR/REC-html40/loose.dtd\">\n";
    echo 
    "<html><body style=\"margin:0;padding:0;font-family:Arial;color:#000000;background: #caced1;\"><p>\n";
    check($_POST[email]);
    echo 
    "<br><br><a href=\"index.php\">Zurück</a>";
    echo 
    "</p></body></html>";
    die();
    ?>
    Eingabe Formular
    Code:
    <form name="kontakt" method="post" action="kontakt.php">
    <p>
    <input type="text" value="Ihr Name" name="absender" />
    <input type="text" value="Ihre E-Mail" name="email" />
    <input type="text" value="Betreff" name="betreff" />
    <textarea name="text">Nachricht</textarea>
    <input type="submit" value="Absenden" name="submit" />
    </p>
    </form>


  • #2
    Hallo silver_surfer,

    ein paar Anmerkungen zu deinem Code:
    Ich finde die Namen deiner Funktionen nicht gut gewählt - check() und send() sind zu allgemein und den Aufbau/die Funktionalität finde ich so auch nicht schön Außerdem solltest du deinen Code einrücken...

    Du solltest bei deinen Array-Zugriffen den Index in Anführungszeichen setzen. Also statt $_POST[email] einfach $_POST['email'].

    Außerdem ist dein Kontaktformular anfällig für Header-Injections weil du $_POST['email'] und $_POST['absender'] ungeprüft in den Header setzt...
    Create your own quiz show.

    Kommentar


    • #3
      Ich stimme voll agrajag zu.

      Ich würde sogar noch weiter gehen:
      Während die Funktionsnamen viel zu allgemein und untreffend sind (vergleiche mal "check" mit der Funktionalität die die gleichnamige Funktion eigentlich tut!) ist deren Funktionalität viel zu speziell. Funktionen dienen eigentlich dazu, wiederverwendbaren Code zu kapseln. Keine der Funktionen tut das. Im Gegenteil: sie sind voneinander anhängig, sind kaum konfigurierbar (alle Daten sind fest in ihnen verdrahtet) und sogar die Anwendung wird von Ihnen abhängig, weil die Funktion genau dort aufgerufen werden muß, wo u.U. eine Fehlermeldung ausgegeben werden muß.

      Die Ausgabe der Erfolgs/Fehlermeldungen, eventuelle Programmabbrüche, das Absenden der Mail - alle diese Aktionen gehören in den Body des Hauptscripts. Versuche, Funktionen als das zu verstehen was sie sind: Eingabe-Verarbeitung-Rückgabe (nicht [Bildschirm]Ausgabe).

      Spezielle Anmerkungen:
      - das die(); in check verhindert die Ausgabe der schließenden HTML-Tags und erzeugt somit ungültigen Quellcode
      - Die Zusammenstellung des $message Inhalts über zig Konkatenationen ist unübersichtlich. Besser wäre sprintf zu verwenden. Die dadurch verwendete Text-Vorlage wäre dazu ein idealer Funktionsparameter
      - Das die(); im Root Script ist überflüssig
      - Mit dem Betreff in $betreff wirst DU schnell Probleme bekommen: Sowohl lange Zeilen als auch Umlaute werden von mail ohne Codierung nach RFC nicht unterstützt.
      - Fehlende ' ' in $_POST wurden schon genannt
      --

      „Emoticons machen einen Beitrag etwas freundlicher. Deine wirken zwar fachlich richtig sein, aber meist ziemlich uninteressant.
      Wenn man nur Text sieht, haben viele junge Entwickler keine interesse, diese stumpfen Texte zu lesen.“


      --

      Kommentar


      • #4
        Wenn ich Mails versenden möchte, baue ich mir vorab immer eine Mailvorlage in einer Textdatei, die ich dann z.B. als "mailvorlage.txt" in einem geschützten Ordner abspeichere:

        Beginn der Textdatei:
        -----------------------------------
        Guten Tag lieber _KUNDENNAME_,

        wir bedanken uns für Ihr Interesse an unseren Produkten.
        _ANREDE_ _NAME_ wird sich umgehend telefonisch bei Ihnen melden.

        Mit freundlichen Grüßen
        Meier GmbH
        Am Acker 21
        12345 Testhausen
        Tel....
        usw.
        usw.
        ------------------------------------

        Den Text hole ich mir dann in eine Variable $text:
        PHP-Code:
        function lesen($filename) {
            
        $fd fopen$filename"r" );
            
        $text fread$fdfilesize$filename ) );
            
        fclose$fd );
            return 
        $text;
        }

        $text lesen("/domain/templates/mailvorlage.txt"); 
        Die Platzhalter werden dann mit str_replace() ersetzt und der Text mittels mail() abgeschickt.

        PHP-Code:
        $text=str_replace("_KUNDENNAME_",$kundenname,$text); 
        Ich kann nun sehr viel statischen Text aus meinem Script heraushalten und die Mailvorlagen einfach und ohne Codestudium verändern.
        PHP-Code:
        if ($var != 0) {
          
        $var 0;

        Kommentar


        • #5
          Ich verfahre ähnlich. Für diesen Zweck verwende ich eine Funktion, die hier in einem Tutorial näher beschrieben ist: PHP: 'Templating' auf Basis von sprintf () - phpfriend.de
          --

          „Emoticons machen einen Beitrag etwas freundlicher. Deine wirken zwar fachlich richtig sein, aber meist ziemlich uninteressant.
          Wenn man nur Text sieht, haben viele junge Entwickler keine interesse, diese stumpfen Texte zu lesen.“


          --

          Kommentar


          • #6
            Ich verwende dafuer eine MessageTemplate-Klasse, bei der sich Daten-Klassen mit bestimmtem Interface registrieren koennen. Diese liefern dann selbst Ersetzungspaare (Key/Value).

            Damit kann eine Daten-Klasse selbst festlegen, was sie von sich preisgeben moechte und was nicht. Was mir noch etwas Kopfschmerzen bereitet ist, was mache ich, wenn 2 gleiche Objekte fuer Textersetzung benoetigt werden, z.B. zwei interagierende User. Eventuell muss ich hier noch ein Alias zuweisen lassen (receiver/sender).
            "Mein Name ist Lohse, ich kaufe hier ein."

            Kommentar

            Lädt...
            X