Frage zu einen Formular

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

  • Frage zu einen Formular

    Ich versuche z.Z. ein Formular zu erstellen, mit dem ich was in eine Datenbank eintragen kann. Ich habe diesen Code aus einem Tutorial, da ich sowas bisher noch nicht gemacht habe. Es funktioniert auch alles soweit, nur habe ich das Problem, das man auch "Absenden" kann, wenn das Formular leer ist. Selbst wenn man die Seite nur neu lädt, wird das Script ausgeführt und es werden leere Felder in die Datenbank geschrieben. Könnte mir jemand sagen, wie ich das verhindern kann.


    Quellcode

    1. <?php
    2. $db_host = "localhost";
    3. $db_user = "";
    4. $db_pass = "";
    5. $db_name = "";
    6. if (isset( $_POST['eintragen'] ))
    7. {
    8. // Maskierende Slashes aus POST entfernen
    9. $_POST = get_magic_quotes_gpc() ? array_map( 'stripslashes', $_POST ) : $_POST;
    10. // Inhalte der Felder aus POST holen
    11. $vorname = $_POST['vorname'];
    12. $geschlecht = $_POST['geschlecht'];
    13. $alter = (int) $_POST['alter'];
    14. $fuehrerschein = isset( $_POST['fuehrerschein'] ) ? 1 : 0;
    15. /* ************************************************************************************************ */
    16. /* *** Hier sollten und MUESSEN die Benutzereingaben geprueft werden um Schadcode abzufangen!!! *** */
    17. /* ************************************************************************************************ */
    18. // Sind alle Eingaben durch die Validierung gekommen werden sie in die DB geschrieben
    19. // Verbindung oeffnen und Datenbank ausweahlen
    20. $conID = mysql_connect( $db_host, $db_user, $db_pass ) or die( "Die Datenbank konnte nicht erreicht werden!" );
    21. if ($conID)
    22. {
    23. mysql_select_db( $db_name, $conID );
    24. }
    25. // Anfrage zusammenstellen der an die DB geschickt werden soll
    26. $sql = "INSERT INTO `traumprojekt`
    27. (`vorname`, `geschlecht`, `alter`, `fuehrerschein`)
    28. VALUES(
    29. '" .mysql_real_escape_string( $vorname ). "',
    30. '" .mysql_real_escape_string( $geschlecht ). "',
    31. " .$alter. ",
    32. " .$fuehrerschein. "
    33. )";
    34. // Schickt die Anfrage an die DB und schreibt die Daten in die Tabelle
    35. mysql_query( $sql );
    36. // Pruefen ob der neue Datensatz tatsaechlich eingefuegt wurde
    37. if (mysql_affected_rows() == 1)
    38. {
    39. echo "<h3>Der Datensatz wurde hinzugefügt!</h3>";
    40. // Hier kann weiterer Code stehen der ausgefuehrt werden soll
    41. // wenn ein Eintrag erfolgreich war. z.B. Email an den Admin schicken
    42. // der ueber den neuen Eintrag informiert
    43. }
    44. else
    45. {
    46. echo "<h3>Der Datensatz konnte <span class="hinweis">nicht</span> hinzugefügt werden!</h3>";
    47. // Hier koennen Massnahmen ergriffen werden die ueber den Misserfolg informieren
    48. // wie z.B. den Benutzer darueber zu informieren, dem Admin eine Mail schicken
    49. // damit er sich um den Fehler kuemmern kann, etc pp
    50. }
    51. }
    52. ?>
    53. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    54. <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="de" lang="de">
    55. <head>
    56. <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
    57. <title>Formularinhalt in eine Datenbank schreiben</title>
    58. </head>
    59. <body>
    60. <form action="<?php echo $_SERVER['PHP_SELF']; ?>" method="post" name="formular" id="formular">
    61. Vorname: <input type="text" name="vorname" id="vorname" />
    62. Geschlecht: <input type="radio" name="geschlecht" id="geschlecht_1" value="männlich" checked="checked" />Männchen <input type="radio" name="geschlecht" id="geschlecht_2" value="weiblich" />Weibchen
    63. Alter: <select name="alter" id="alter"><?php for ($i=1; $i<121; $i++) { echo "<option>{$i}</option>"; } ?></select>
    64. Führerschein: <input type="checkbox" name="fuehrerschein" id="fuehrerschein" />
    65. <input type="submit" name="eintragen" id="eintragen" value="Abschicken" />
    66. </body>
    67. </html>
    Alles anzeigen
  • Du könntest mittels JavaScript prüfen, ob etwas in die Textfelder eingetragen wurde. Dann definierst du ein onlick-Event auf den Submit-Button. Sicherheitshalber solltest du alles noch einmal serverseitig mit PHP überprüfen, denn man könnte (aus welchen Gründen auch immer) die JS-Prüfung einfach umgehen. Oder was auch der Fall sein könnte, ist, dass im Browser JS ausgeschaltet ist.
    Open Source --> Programmieren aus Leidenschaft :!:

    Ich stehe weder für privaten Support per PM noch über einen IM zur Verfügung. Danke.
  • PHP-seitig kannst du lediglich prüfen ob die POST-Daten leer sind und entsprechend reagieren. - Das solltest du auch in jedem Fall tun, egal was du sonst noch unternimmst. Der Client ist immer böse.

    Um den durch das Absenden des Formulars ausgelösten HTTP-Request (also den Seitenaufruf) zu verhindern, musst du dich clientseitiger Mittel bedienen.
    Dort stehen dir HTML und JavaScript zur Verfügung und mir wäre keine HTML-Funktionalität bekannt, die deine Anforderungen erfüllt. Da musst du den Weg gehen, den Deadman44 bereits vorgeschlagen hat. Zu dem Thema findest du aber sehr schnell viele Beispiele; falls du dich momentan nicht (kurz) in JavaScript einarbeiten möchtest.
  • PHP kann ich dir zeigen :)

    Quellcode

    1. // Hier werden die Fehlermeldungen reingespeichert
    2. $error = "";
    3. // Auf Fehler prüfen
    4. if(!isset($_POST['input1']) OR $_POST['input1'] != "" OR $_POST['input1'] != "Standarttext") $error .= "Fülle bitte alle Felder aus";
    5. // Wenn ein Fehler vorhanden ist, diesen ausgeben
    6. if($error != "") {
    7. echo $error;
    8. // Ansonsten deinen Code ausführen, zb den gesendeten Eintrag in der DB speichern
    9. }else{
    10. echo "Danke für deinen Eintrag!";
    11. $add = new mysqlv("INSERT ....");
    12. }
    Alles anzeigen
  • @venum-lk: Ich würde noch trim() anwenden und dann gucken ob der String dann "" um zu verhindern, dass ein Scherzkeks lauter blanks wegschickt. Das geht aber dann schon ein wenig in Richtung Konsistenzprüfung, man kann dann ja noch prüfen ob Datum in einem gewissen Format vorliegt und Führerschein nur bestimmte Buchstaben enthält.
    ~ mfg SeBa

    Ich beantworte keine PMs zu Computer-/Programmierproblemen. Bitte wendet euch an das entsprechende Forum.

    [Blockierte Grafik: http://i.creativecommons.org/l/by-sa/3.0/80x15.png]