Musterkontakformular.?

PHP - alles Rund um die Programmierung von PHP und MySQL

Ist die geniale Programmiersprache, da sowohl für Einsteiger geeignet wie auch für Profis.

Moderator: lauras

Beiträge bitte im neuen Forum

Musterkontakformular.?

Beitragvon drPHIP132 » Montag 2. Januar 2012, 15:58

Hi Leute,
habe mir ein Kontaktformular als Vorlage "geschrieben". Könnt ihr es bitte auf seine "Perfektion" prüfen? Mir sagen was man besser machen könnte?

Danke im vorraus

drPhip132
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
index.php
Code: Alles auswählen

<?php
if( $_POST['button'] != "" )
#wurde der submit button gedrückt?
#wenn ja läuft die auswertung weiter
#sonst bricht es ab
{
    #pflichtfelder
    $anrede         = $_POST['anrede'];
    $nachname       = $_POST['nachname'];
    $vorname        = $_POST['vorname'];
    $strasse        = $_POST['strasse'];
    $plz            = $_POST['plz'];
    $email          = $_POST['email'];
    $nachricht      = $_POST['nachricht'];

    #freiwillige felder
    $firma          = $_POST['firma'];
    $telefon        = $_POST['telefon'];


    if( $_POST['button'] != "" )
    {
        if( $anrede !=  "" AND $nachname != "" AND $vorname != "" AND $strasse != "" AND $plz != "" AND $email != "" AND $nachricht != "" )
        #wenn alle pflichtfelder ausgefüllt sind...
        {
            $empfaenger = "empf&auml;nger_email";
            #deine emailadresse hier oben
            $absender   = $email;
            $betreff    = "Kontakt - " . $anrede . " " . $nachname . ", " . $vorname;
            $mailtext   = "Nachricht: " . $nachricht. " | " . "Firma: " . $firma . " | " . "Telefon: " . $telefon;
            $antwortan  = "empf&auml;nger_email";
                           #deine email

            mail( $empfaenger,
            $betreff,
            $mailtext,
            "From: $absender\nReply-To: $antwortan");
        }
        else
        
{
            $fehler = TRUE;
            #irgendwo im quellcode fragen ob $fehler FALSE ist
            #dann an der gewünschten stelle ausgeben "bitte alle pflichtfelder ausfüllen"
            #oder so Ã¤hnlich
        }
    }
}
?>
<!DOCTYPE html>
<html>
<head>
    <title>Titel</title>
    <meta charset="UTF-8" />

    <link href="style.css" type="text/css" rel="stylesheet" />
</head>

<body>

    <form method="post" action="">
        <label>* Anrede:
            <select name="anrede" >
                <option value="Herr">Herr     </option>
                <option value="Frau">Frau     </option>
            </select>
        </label>

        <!-- ---------------------------------------------- -->

        <label>* Nachname:
            <input type="text" name="nachname" />
        </label>

        <!-- ---------------------------------------------- -->

        <label>* Vorname:
            <input type="text" name="vorname" />
        </label>

        <!-- ---------------------------------------------- -->

        <label>Firma:
            <input type="text" name="firma" />
        </label>

       <!-- ---------------------------------------------- -->

        <label>* Stra&szlig;e / Nr:
            <input type="text" name="strasse" />
        </label>

        <!-- ---------------------------------------------- -->

        <label>* PLZ / Ort:
            <input type="text" name="plz" />
        </label>

        <!-- ---------------------------------------------- -->

        <label>Telefon:
            <input type="tel" name="telefon" />
        </label>

        <!-- ---------------------------------------------- -->

        <label>* E-Mail:
            <input type="email" name="email" />
        </label>

        <!-- ---------------------------------------------- -->

        <label>* Nachricht:
            <textarea name="nachricht" rows="13" cols="40"></textarea>
        </label>

        <!-- ---------------------------------------------- -->

        <input type="submit" name="button" value="Absenden"/>

    </form>

</body>
</html>


design.css
Code: Alles auswählen
body
{
    margin: 0;
    padding: 0;
}

form
{
    width: 500px;
    padding: 20px;
}

fieldset
{
    width: 100%;
}

label
{
    width: 500px;
    float: left;
    margin: 6px 0;
}

input, select, textarea
{
    width: 300px;
    max-width: 300px;
    /*wegen textarea max-width*/
    max-height: 200px;
    float: right;
}

input[type="submit"]
{
    display: block;
    float: none;
    clear: both;
    width: 120px;
    margin: 0 auto;
}
Benutzeravatar
drPHIP132
HTML-Acrobat
 
Beiträge: 744
Registriert: Samstag 15. Januar 2011, 19:10
Wohnort: Sachsen, Erzgebirge

Re: Musterkontakformular.?

Beitragvon drPHIP132 » Dienstag 3. Januar 2012, 01:06

bitte um antworten ;)
Benutzeravatar
drPHIP132
HTML-Acrobat
 
Beiträge: 744
Registriert: Samstag 15. Januar 2011, 19:10
Wohnort: Sachsen, Erzgebirge

Re: Musterkontakformular.?

Beitragvon Sarkkan » Dienstag 3. Januar 2012, 01:57

Okey, hier meine Bewertung/Verbesserungsvorschläge:
  • Du bist in keinsterweise gegen Mail-Injection geschützt. (Mail-Injection ist Ähnlich wie MySQL-Injection ein Vorgehen, bei dem der Anwender noch weitaus andere Sachen in das Formular mit einfließen lassen kann, als gewollt. Hierbei werden durch Mitübergebene Zeilenumbrüche einfach Benutzerdefinierte Header mitgegeben. So kann man ein Formular im besten Falle komplett so nutzen, dass es einfach nur als Schnittstelle zu Mail-Server fungiert und E-Mails nach meinen Belieben versendet. Versichere dich, dass keine Zeilenumbrüche übergeben wurden)
  • Überprüfe ob der Benutzer wenigstens eine gütlige E-Mail-Adresse eingegeben hat. PHP bietet dazu filter_var mit dem FILTER_VALIDATE_EMAIL-Filter.
  • Überprüfe nicht alle Fehler in einer if-Anweisung, sondern gehe jede Variabel durch und überprüfe Sie. So kannst du gezieltere Fehler ausgeben und genau angeben, bei welchem Feld es hackt. Sätze á la "Haha, da war ein Fehler drin, versuch es noch einmal" lesen Benutzer ungerne :P
  • Bei der Anrede frage ich persönlich immer gerne mit Radio-Buttons
  • Die Sternchen gehören eigentlich eher davor..
  • Die Inputs und Beschriftung ist vertauscht. Richtig wäre es, wenn das Floatende-Element zuerst kommt. Du schreibst ja auch nicht zuerst einen Text und lässt anschließend ein Bild Rechts floaten.
  • Deine Besucher werden das Formular 1x ausfüllen, bei einem Fehler werden Sie frustriert aufhören, da du keinerlei Nutzerdaten übernimmst.
  • <textarea> wird mittels CSS gestylt, auch die Größe.
Gruß Dustin
Benutzeravatar
Sarkkan
HTML-Acrobat
 
Beiträge: 1557
Registriert: Montag 5. April 2010, 01:46
Wohnort: Bei Köln

Re: Musterkontakformular.?

Beitragvon lauras » Mittwoch 4. Januar 2012, 11:00

Kleine Anmerkung: Du überprüfst, ob dein Submit-Button gedrückt wurde.. Sprich jemand der das ganze per Enter-Taste absendet, bekommt ein Problem ;)
Ich überprüfe immer lieber ob irgendeins von den Feldern ausgefüllt ist :)

Grüße
Benutzeravatar
lauras
Moderator
 
Beiträge: 2114
Registriert: Samstag 3. November 2007, 22:08

Re: Musterkontakformular.?

Beitragvon Sarkkan » Mittwoch 4. Januar 2012, 12:17

lauras hat geschrieben:Kleine Anmerkung: Du überprüfst, ob dein Submit-Button gedrückt wurde.. Sprich jemand der das ganze per Enter-Taste absendet, bekommt ein Problem ;)

Aus welchem Grund bekommt diese Person ein Problem? o.o Davon habe ich noch nie gehört.. .___. Der Browser springt meines wissens nach dann den ersten (und einzigen) Submit-Button an, den er finden kann.
Benutzeravatar
Sarkkan
HTML-Acrobat
 
Beiträge: 1557
Registriert: Montag 5. April 2010, 01:46
Wohnort: Bei Köln

Re: Musterkontakformular.?

Beitragvon lauras » Mittwoch 4. Januar 2012, 12:29

Also ich hatte das schon öfters.. Bei mir hat sich dann einfach immer das Formular geleert.. Kann aber auch daran liegen, dass meine Buttons nicht immer submit heißen, sondern nachdem benannt werden was sie tun sollen.. Aber rein von der Logik her geht es ja darum, dass das Formular geprüft wird, wenn mindestens ein Feld ausgefüllt ist.. Sonst kommt ja ein Haufen Fehlermeldungen, wenn jemand mal nur zum Spaß auf den Button drückt oder versehentlich auf die Enter-Taste kommt..
Benutzeravatar
lauras
Moderator
 
Beiträge: 2114
Registriert: Samstag 3. November 2007, 22:08

Re: Musterkontakformular.?

Beitragvon Sarkkan » Mittwoch 4. Januar 2012, 12:35

Du wirst denke ich all deinen Absende-Buttons aber den Type "Submit" geben, oder? Und genau darum geht es den Browser.
Mir ist das mit dem Absenden so noch nie passiert :/
Und die meisten Seiten lassen es zu, dass du ein leeres Formular absendest und überprüfen dann direkt die eingaben. Es ist die einfachste Lösung :/
Benutzeravatar
Sarkkan
HTML-Acrobat
 
Beiträge: 1557
Registriert: Montag 5. April 2010, 01:46
Wohnort: Bei Köln

Re: Musterkontakformular.?

Beitragvon drPHIP132 » Sonntag 8. Januar 2012, 12:52

Sarkkan hat geschrieben:Okey, hier meine Bewertung/Verbesserungsvorschläge:
  • Überprüfe ob der Benutzer wenigstens eine gütlige E-Mail-Adresse eingegeben hat. PHP bietet dazu filter_var mit dem FILTER_VALIDATE_EMAIL-Filter.


Ich dachte da reicht input type="email". Bin mir nur nicht sicher, wie weit abwärtskompatibel dieser input type ist..
Benutzeravatar
drPHIP132
HTML-Acrobat
 
Beiträge: 744
Registriert: Samstag 15. Januar 2011, 19:10
Wohnort: Sachsen, Erzgebirge

Re: Musterkontakformular.?

Beitragvon webmaster3000 » Sonntag 8. Januar 2012, 14:20

Alles, was du mit HTML ausgibst, kann sehr leicht modifiziert werden.
Außerdem steht in den Sternen, inwiefern Browser verhindern, dass dort etwas anderes als eine E-Mail-Adresse eingegeben wird.
webmaster3000
HTML-Doctor
 
Beiträge: 257
Registriert: Donnerstag 29. September 2011, 16:32
Wohnort: Irgendwo in Thüringen

Re: Musterkontakformular.?

Beitragvon drPHIP132 » Sonntag 8. Januar 2012, 14:41

webmaster3000 hat geschrieben:Alles, was du mit HTML ausgibst, kann sehr leicht modifiziert werden.
Außerdem steht in den Sternen, inwiefern Browser verhindern, dass dort etwas anderes als eine E-Mail-Adresse eingegeben wird.



achja.? ;)

versuche mal in chrome oder firefox (opera glaube auch) ein formular abzusenden OHNE das du eine gültige email im input type="email" feld hast ;)
Benutzeravatar
drPHIP132
HTML-Acrobat
 
Beiträge: 744
Registriert: Samstag 15. Januar 2011, 19:10
Wohnort: Sachsen, Erzgebirge

Re: Musterkontakformular.?

Beitragvon drPHIP132 » Sonntag 8. Januar 2012, 14:49

mache gerade alles nochmal neu. eure verbesserungsvorschläge werden übernommen sowie der fehler, dass ich zweimal überprüfe ob $_POSZ['button'] nicht leer ist xD
Benutzeravatar
drPHIP132
HTML-Acrobat
 
Beiträge: 744
Registriert: Samstag 15. Januar 2011, 19:10
Wohnort: Sachsen, Erzgebirge

Re: Musterkontakformular.?

Beitragvon Sarkkan » Sonntag 8. Januar 2012, 16:02

drPHIP132 hat geschrieben:versuche mal in chrome oder firefox (opera glaube auch) ein formular abzusenden OHNE das du eine gültige email im input type="email" feld hast ;)

Nichts leichter als das (: Selbst in meinem FF10b schaffe ich das noch :P
Für Otto-Normal ist es natürlich nicht möglich dir da böses zu tun, aber wie sieht es mit dem netten Hacker von nebenan aus? Wenn er unbedingt seinen Browser verwenden will, wählt er via JavaScript das Formular aus und lässt es via .submit() versenden. Oder er ändert einfach den type vom input :P
(Oder er schickt die Daten von einem Programm aus an deinen Server, den kümmert es nämlich herzlich wenig, ob der Benutzer ein Browser wahr oder sonst was)

Gruß
Sarkkan
Benutzeravatar
Sarkkan
HTML-Acrobat
 
Beiträge: 1557
Registriert: Montag 5. April 2010, 01:46
Wohnort: Bei Köln

Re: Musterkontakformular.?

Beitragvon webmaster3000 » Sonntag 8. Januar 2012, 17:10

Man muss gar nicht vom "bösen Hacker" ausgehen. Die Validierung des Formulars (und hier der E-Mail) macht man nämlich, damit beimAusfüllen dem unachtsamen/unkozentrierten User keine Fehler unterlaufen, über die er sich noch ärgern könnte.

Beispiel: Die Anmeldung an einem Newsletter.
Der Besucher ist interessiert, vergisst beim eingeben aber die TLD seiner E-Mail-Adresse und bemerkt es nicht. Ein Validiertes Formular macht ihn darauf aufmerksam, ein nicht Validiertes versucht jedes mal, einer ungültigen E-Mail-Adresse etwas zuzusenden.

Gruß,
webmaster3000
webmaster3000
HTML-Doctor
 
Beiträge: 257
Registriert: Donnerstag 29. September 2011, 16:32
Wohnort: Irgendwo in Thüringen

Re: Musterkontakformular.?

Beitragvon Basiii » Montag 9. Januar 2012, 06:38

Um noch mal das Absenden des Formulars mit der Entertaste aufzugreifen, ich mutmaße mal:

Code: Alles auswählen
  <form action="" method="get">
    <input type="text" name="textfeld" />
    <input type="submit" name="submit" />
  </form>


In diesem (sehr billigen) Formular bekomme ich wenn ich im Textfeld Enter drücke eindeutig diese Zeichenkette an meine URL:

?textfeld=Text&submit=Senden
Benutzeravatar
Basiii
HTML-Acrobat
 
Beiträge: 1139
Registriert: Dienstag 12. Januar 2010, 13:57

Re: Musterkontakformular.?

Beitragvon drPHIP132 » Montag 9. Januar 2012, 19:58

Großes Problem.
bin grade beim überarbeiten aber finde den fehler nicht. schon seit 30min suche ich.

irgendwas aus zeile 142 obwohl da </html> steht o.O
Parse error: syntax error, unexpected $end in /www/htdocs/w00deefc/formular.php on line 142

Code: Alles auswählen

<?php
function tuersteher
( $zum_testen )
{
    if ( preg_match("/(to:|cc:|bcc:|from:|subject:|reply-to:|content-type:|MIME-Version:|multipart/mixed|Content-Transfer-Encoding:)/ims", $zum_testen))
    {
        echo "hallo";
    }
?>
<!DOCTYPE html>
<html>
<head>
    <title>Titel</title>
    <meta charset="UTF-8" />
    <style type="text/css">
        body, form, fieldset, legend, input, select, textarea
        {
            margin: 0;
            padding: 0;
        }

        form
        {
            width: 500px;
        }

        fieldset
        {
            display: block;
        }

        label
        {
            width: 500px;
            float: left;
            margin: 6px 20px;
        }

        input, select, textarea
        {
            width: 300px;
            float: right;
        }

        textarea
        {
            max-height: 300px;
            max-width: 300px;
            min-height: 300px;
            min-width: 300px;
        }

        input[type="submit"]
        {
            display: block;
            float: none;
            clear: both;
            width: 100px;
            margin: 0 auto;
        }

        <?php
            foreach
( $_POST as $information => $angabe )
            {
                if( empty($angabe) )
                {
                    echo "#" . $information . "{border:1px solid #ff0000;}";
                }
            }
            ?>

    </style>
</head>

<body>

    <!-- im formular werden die ID's vergeben, da durch dazugehörigen php code die nicht ausgefüllten rot maskiert werden' -->
    <form method="post" action="">
        <fieldset>
            <label>* Anrede:
            <select name="anrede" id="anrede" >
                <option value="Herr">Herr     </option>
                <option value="Frau">Frau     </option>
            </select>
            </label>
            <label>* Vorname:
                <input type="text" name="vorname" id="vorname"  />
            </label>
            <label>* Nachname:
                <input type="text" name="nachname" id="nachname" />
            </label>
            <label>* E-Mail:
                <input type="email" name="email" id="email" />
            </label>
            <label>* Nachricht:
                <textarea name="nachricht" id="nachricht"></textarea>
            </label>
            <label> Ort:
                <input type="text" name="ort" />
            </label>
            <input type="submit" name="button" value="Absenden"  />
        </fieldset>
<?php
    
#wurde der submit button gedrückt?
    if( $_POST['button'] == "Absenden" )
    {
        if( $_POST['anrede'] != "" and $_POST['vorname'] != "" and $_POST['nachname'] != "" and $_POST['email'] != "" and $_POST['nachricht'] != "" )
        # kontrolliert ob alle pflichtfelder != leer sind
        {
            /*----------------------variablen bereinigen------------------------*/
            $anrede       = trim($_POST['anrede']);
            $vorname      = trim($_POST['vorname']);
            $nachname     = trim($_POST['nachname']);
            $email        = trim($_POST['email']);
            $nachricht    = trim($_POST['nachricht']);
            $anrede    = tuersteher($anrede);
            $vorname   = tuersteher($vorname);
            $nachname  = tuersteher($nachname);
            $email     = tuersteher($email);
            $nachricht = tuersteher($nachricht);

            /*-----------------------email-------------------------*/
            $empfaenger = "philipp_mail@sarkkan.de"; //Mailadresse
            $absender   = $email;
            $betreff    = "Kontakt" . " | " . $anrede . " " . $vorname . " " . $nachname;
            $mailtext   = $anrede . " " . $vorname . " " . $nachname . " schrieb," . $nachricht;
            $antwortan  = $email;
            mail( $empfaenger,
                  $betreff,
                  $mailtext,
                  "From: $absender\nReply-To: $antwortan");
            echo "Mail wurde gesendet!";
        }
        else
        
{
            echo "Rotmakierte Felder bitte Ordungsgem&auml;&szlig; ausf&uuml;llen!!!";
        }
    }
?>

    </form>
</body>
</html>
Benutzeravatar
drPHIP132
HTML-Acrobat
 
Beiträge: 744
Registriert: Samstag 15. Januar 2011, 19:10
Wohnort: Sachsen, Erzgebirge

Nächste

Beiträge bitte im neuen Forum

Zurück zu PHP

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 1 Gast

cron