Kontaktformular mit php

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • Kontaktformular mit php

    Bin gerade dabei ein Kontaktformular per E-Mail zu erstellen:

    Quellcode

    1. <?php
    2. $vorname = $_POST["vorname"];
    3. $nachname = $_POST["vnachname"];
    4. $adresse = $_POST["adresse"];
    5. $plz = $_POST["plz"];
    6. $ort = $_POST["ort"];
    7. $telefon = $_POST["telefon"];
    8. $email = $_POST["email"];
    9. $betreff = $_POST["betreff"];
    10. $mitteilung = $_POST["mitteilung"];
    11. $empfaenger = "cu.chullain@hotmail.com";
    12. // Formular mit Fehlerauswertung
    13. $errorFelder = array();
    14. $error = null;
    15. $felder = array("vorname", "nachname", "email", "betreff", "mitteilung");
    16. // hier startet die ueberpruefung von den Eingaben im Formular
    17. if(isset($_POST['ueberpruefung'])) {
    18. $error = false;
    19. foreach($felder as $feld) {
    20. if(empty($_POST[$feld])) {
    21. $error = true;
    22. $errorFelder[$feld] = true;
    23. }
    24. }
    25. }
    26. //
    27. if($error === false) {
    28. mail($empfaenger, $betreff, $mitteilung, "From: $email");
    29. } else {
    30. if($error === true)
    31. echo "<b>Bitte füllen Sie alle mit * bezeichneten Felder aus!</b>";
    32. function rand_string($lng)
    33. {
    34. mt_srand(crc32(microtime()));
    35. //Welche Buchstaben benutzt werden sollen (Charset)
    36. $buchstaben = "abcdefghijklmnpqrstuvwxyz";
    37. $str_lng = strlen($buchstaben)-1;
    38. $rand= "";
    39. for($i=0;$i<$lng;$i++)
    40. $rand.= $buchstaben{mt_rand(0, $str_lng)};
    41. return $rand;
    42. }
    43. ?>
    44. <form method="post" action="<?php echo htmlspecialchars($_SERVER['PHP_SELF'])?>">
    45. <table>
    46. <tr>
    47. <td>
    48. *Mitteilung an:
    49. </td>
    50. <td>
    51. <select name="adressat" size="1">
    52. <option>Schulleitung</option>
    53. <option>Lehrerschaft</option>
    54. <option>Hauswart</option>
    55. <option>Webmaster</option>
    56. </select>
    57. </td>
    58. </tr>
    59. <tr>
    60. <td>
    61. *Vorname:
    62. </td>
    63. <td>
    64. <input name="vorname" type="text" size="25" value="<?php echo htmlentities($_POST['vorname']);?>"
    65. <?php if(isset($errorFelder['vorname'])) echo 'class="error"'; ?>>
    66. </td>
    67. </tr>
    68. <tr>
    69. <td>
    70. *Nachname:
    71. </td>
    72. <td>
    73. <input name="nachname" type="text" size="25" value="<?php echo htmlentities($_POST['nachname']);?>"
    74. <?php if(isset($errorFelder['nachname'])) echo 'class="error"'; ?>>
    75. </td>
    76. </tr>
    77. <tr>
    78. <td>
    79. Adresse:
    80. </td>
    81. <td>
    82. <input name="adresse" type="text" size="25" value="<?php echo htmlentities($_POST['adresse']);?>"
    83. <?php if(isset($errorFelder['adresse'])) echo 'class="error"'; ?>>
    84. </td>
    85. </tr>
    86. <tr>
    87. <td>
    88. PLZ / Ort:
    89. </td>
    90. <td>
    91. <input name="plz" type="text" size="4" value="<?php echo htmlentities($_POST['plz']);?>"
    92. <?php if(isset($errorFelder['plz'])) echo 'class="error"'; ?>>
    93. <input name="ort" type="text" size="16" value="<?php echo htmlentities($_POST['ort']);?>"
    94. <?php if(isset($errorFelder['ort'])) echo 'class="error"'; ?>>
    95. </td>
    96. </tr>
    97. <tr>
    98. <td>
    99. Telefon:
    100. </td>
    101. <td>
    102. <input name="telefon" type="text" size="25" value="<?php echo htmlentities($_POST['telefon']);?>"
    103. <?php if(isset($errorFelder['telefon'])) echo 'class="error"'; ?>>
    104. </td>
    105. </tr>
    106. <tr>
    107. <td>
    108. *E-Mail:
    109. </td>
    110. <td>
    111. <input name="email" type="text" size="25" value="<?php echo htmlentities($_POST['email']);?>"
    112. <?php if(isset($errorFelder['email'])) echo 'class="error"'; ?>>
    113. </td>
    114. </tr>
    115. <tr>
    116. <td>
    117. *Betreff:
    118. </td>
    119. <td>
    120. <input name="betreff" type="text" size="25" value="<?php echo htmlentities($_POST['betreff']);?>"
    121. <?php if(isset($errorFelder['betreff'])) echo 'class="error"'; ?>>
    122. </td>
    123. </tr>
    124. <tr>
    125. <td>
    126. *Mitteilung:
    127. </td>
    128. <td>
    129. <textarea name="mitteilung" rows="7" cols="38" tabindex="9" wrap="physical" value="<?php echo htmlentities($_POST['mitteilung']);?>"
    130. <?php if(isset($errorFelder['mitteilung'])) echo 'class="error"'; ?>></textarea>
    131. </td>
    132. </tr>
    133. <tr>
    134. <td>
    135. <input type="hidden" name="ueberpruefung" value="1">
    136. <input type="submit" name="Tutorial" value="Absenden">
    137. </td>
    138. </tr>
    139. </table>
    140. </form>
    141. <?php
    142. }
    143. ?>
    Alles anzeigen


    Hier noch online:
    Kontaktformular
    (am unteren Ende der Seite)


    Ich hätte gerne Generell eine Beurteilung da dies mein erstes php skript ist. Ich raff das system gar noch nicht so richtig^^ muss ich z.B. die php Funktionen in ein anderes Dokument auslagern wie eine css oder so?
    Danke schon im Voraus

    Vielen Dank schon im Voraus!

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von Cu Chullain ()

  • Man kann auch mit Kanonen Spatzen jagen...ist völlig in Ordnung dein Skriptlein, es könnte jedoch Opfer von XSS-Attacken werden. Detaillerte Infos zu dem Thema findest Du z.B. in einigen der Bücher in der Bücherliste zu PHP (siehe das entsprechende Thema in diesem Forum), oder kurz und völlig unvollständig auf Seiten wie webmasterpro.de/coding/article…cross-site-scripting.html. Sobald Du etwas tiefer in die PHP-Programmierung einsteigen willst, solltest Du Dich aber i.d.T. in die von BennyBunny angesprochene Trennung von Logik und Optik - wie eben bei CSS und HTML - einlesen. Wenn das aber Dein erstes Script ist und Du schon von selbst auf die Idee kommst mit solchen Dingen wie htmlspecialchars (wenn auch nicht an all den wichtigen Stellen) zu arbeiten zu arbeiten: Hut ab!

    Spezifisch zum Code:

    - $_POST["vnachname"] soll wohl nachname ohne v sein.
    - Alle Post-Felder kannst Du auch noch spezifisch filtern. Eine PLZ kann in Dtdl. z.B. nur Zahlen enthalten > intval()
    - Alle Post-Felder außerdem mit strip_tags filtern, um eventuellen HTML- oder JS-Code zu entfernen (die dämlichen Outlook-Benutzer, die tatsächlich noch HTML zugelassen haben, werden es Dir danken).
    - Per mail() nur wirklich sichere Daten verschicken.
    - Die E-Mail-Adresse des Absenders validieren, google dafür mal.
    - ... vince? :)
  • philippgerard schrieb:

    - ... vince? :)

    Was möchte der Autor mir mitteilen :rolleyes: :P

    Natürlich eine Templateengine.
    Aber das ist kein Vorgang den man mal eben so anwendet. Also ist das so auch vollkommen in Ordnung.


    Was mir allgemein auffällt ist, dass du Parameter vor dem Versand nur überprüfst ob diese leer sind.

    Eine Syntax und Hostprüfung der Mailadresse ist nie verkehrt.
    Postleitzahlen sind in DE immer 5 stellig.
    Eine Telefonnummer hat eine Vorwahl welche immer mit einer 0 beginnt.
    ...

    Du hast zwar mit htmlentities und specialchars gearbeitet, aber nur bei der value.

    Du solltest bei dem Versand nochmal alles checken.
    Darf die Mitteilung html enthalten? Wenn nein, dann hau alles raus.
    Wenn ja, dann musst du auch den richtigen header bei der mail-Funktion mit reinnehmen.

    In andere Felder gehört soetwas eh nicht rein.

    Zur Mitteilung sagt php.net
    Jede Zeile muss durch ein LF-Zeichen (\n) getrennt werden. Außerdem sollten die Zeilen nicht mehr als 70 Zeichen enthalten.



    Und was genau macht diese Funktion?

    Quellcode

    1. function rand_string($lng)
    2. {
    3. mt_srand(crc32(microtime()));
    4. //Welche Buchstaben benutzt werden sollen (Charset)
    5. $buchstaben = "abcdefghijklmnpqrstuvwxyz";
    6. $str_lng = strlen($buchstaben)-1;
    7. $rand= "";
    8. for($i=0;$i<$lng;$i++)
    9. $rand.= $buchstaben{mt_rand(0, $str_lng)};
    10. return $rand;
    11. }
    Alles anzeigen


    $_SERVER['PHP_SELF'] solltest du auch nicht benutzen, da diese vom Client manipulierbar ist.
    Dann nutze $_SERVER['REQUEST_URI'].


    Ansonsten siehts schon gut aus, was das Formular angeht.