Leere Felder werden in DB eingetragen

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

  • Leere Felder werden in DB eingetragen

    Hallo liebe Forumsmitglieder,

    ich setze mich nun beim PHP lernen mit MySQL und Datenbanken auseinander und habe dazu ein Skript geschrieben. Das Skript erfüllt zwar einerseits die gewünschte Aufgabe aber andererseits macht es etwas zu viel.

    Ich habe eine Datenbank erstellt (PHP myAdmin) "Sportclub" mit den Feldern ID(auto increment) Vorname, Nachname und Wohnort . Über ein Formular sollen Vorname, Nachname und Wohnort eingegeben werden und nach dem aktivieren des senden Buttons in die Datenbank gespeichert werden. Dies funktioniert auch bestens.

    Dann habe ich eine if/Else Anweisung geschrieben damit bei Fehleingaben die Daten nicht in die DB eingetragen werden und eine Fehlermeldung erscheint

    Nun zum Fehler den ich einfach im Skript nicht erkenne; wenn ich das Formular ohne Eingabe mit senden Button abschicke kommt statt der Fehlermeldung, die Erfolgsmeldung "ein Datensatz wurde erfolgreich hinzugefügt" und wenn ich in der Datenbank nachschaue ist tatsächlich ein Eintrag vorhanden mit leeren Feldern .

    Nun weiss ich nicht ob der Fehler im Skript liegt oder eventuell an der Datenbank die ich erstellt habe. Habe auch schon eine zweite Datenbank erstellt und dort genau das gleiche Problem.

    Hier mal mein PHP Skript:
    PHP-Code:
    [LEFT]<html>
    <head>

    <?php

    //Einen Datensatz hinzufügen
    if (isset($_POST["gesendet"]))
    {
    mysql_connect("","root");
    mysql_select_db("sportclub");

    $nn $_POST["na"];
    $vn $_POST["vn"];
    $wo $_POST["wo"];


    $sqlab "INSERT INTO mitglieder (Name, Vorname, Wohnort) 
    values ('
    $nn', '$vn', '$wo')";


    mysql_query($sqlab);

    $num mysql_affected_rows();
    if (
    $num>0)
    {
    echo 
    "<p><font color='#00aa00'>";
    echo 
    "Es wurde 1 Datensatz hinzugefügt";
    echo 
    "</font></p>";
    }
    else
    {
    echo 
    "<p><font color='#ff0000'>";
    echo 
    "Es ist ein Fehler aufgetreten, ";
    echo 
    "es wurde kein Datensatz hinzugefügt";
    echo 
    "</font></p>";
    }
    }
    ?>
    </head>
    <body>
    <p>Geben Sie bitte einen vollständigen Datensatz ein<br />
    und senden Sie das Formular ab:</p>

    <form action = "Sportclub.php" method = "post">
    <p><input name="na" /> Name</p>
    <p><input name="vn" /> Vorname</p>
    <p><input name="wo" /> Wohnort</p>
    <p><input type="submit" name="gesendet" />
    <input type="reset" /></p>
    </form>

    <p>Alle Datensätze <a href="sportclub_tabelle.php">anzeigen</a></p>
    </body>[/LEFT]
    </html>
    ich weiss nicht ob ihr auch noch das Dump-File der Datenbank benötigt. Mir würde es schon weiterhelfen wenn ich weiss ob dieses Skript fehlerfrei ist, dann weiss ich das ich auf der Datenbankseite nach diesem Fehler suchen muss.

    Herzlichen Dank
    Angi

  • #2
    Erstmal solltest Du Dein Script gegen SQL Injection schützen. So wie es jetzt ist, beinhaltet es auf jeden Fall eine potentielle Sicherheitslücke.

    Du überprüfst die Eingaben auch gar nicht. Du übernimmst alles so, wie es aus dem Formular kommt. Selbst wenn die Inhalte der Variablen leer sind, wird ein Eintrag in der Datenbank vorgenommen. Überprüfe, ob die Inhalte der $_POST Variablen gefüllt sind und schon ist Dein Problem gelöst.
    MM Newmedia | MeinBlog

    Kommentar


    • #3
      Auch ein Formular mit leeren Feldern kann versendet werden.
      Prüfe die anderen Felder und nicht den AbsendeButton.

      Tipp:
      Vermutlich suchst du !empty() und &&
      Wir werden alle sterben

      Kommentar


      • #4
        Hallo ezkimo und combie

        Danke für die Wegweiser.
        Das Thema "SQL Injection" muss ich mir gleich im nächsten Schritt zur Gemüte führen.


        Angi

        Kommentar


        • #5
          Hallo Teatchers
          Ich konnte das Skript nun erfolgreich fertig stellen und werde es nachfolgend einfügen. Ich hoffe es ist o.k. dass ich die fertigen Scripts hier einstelle den leider bin ich noch nicht in der Situation anderen helfen zu können, aber ich denke diese Lösungen helfen vielleicht auch dem einen oder anderen Anfänger.

          SQL Injection scheint doch ein recht grosses und natürlich auch wichtiges Thema zu sein. Habe nun ein zwölfseitiges PDF Dokument heruntergeladen und werde mich auch hier im Forum mal darüber informieren.
          Momentan erstelle ich die Scripts alle nur lokal als Übungszweck.

          Hier nun das Skript:
          PHP-Code:
          [LEFT]<html>
          <head>

          <?php

          //Einen Datensatz hinzufügen
          if (isset($_POST["gesendet"]))

          {
          mysql_connect("","root");
          mysql_select_db("sportclub");

          $nn $_POST["na"];
          $vn $_POST["vn"];
          $wo $_POST["wo"];


          $sqlab "INSERT INTO mitglieder (Name, Vorname, Wohnort) 
          values ('
          $nn', '$vn', '$wo')";



          if ((!empty(
          $nn)) && (!empty($vn)) && (!empty($wo)) )
          {
          mysql_query($sqlab);
          $num mysql_affected_rows();
          if (
          $num>0

          echo 
          "<p><font color='#00aa00'>";
          echo 
          "Es wurde 1 Datensatz hinzugefügt";
          echo 
          "</font></p>";
          }
          else
          {
          echo 
          "<p><font color='#ff0000'>";
          echo 
          "Es ist ein Fehler aufgetreten, ";
          echo 
          "es wurde kein Datensatz hinzugefügt";
          echo 
          "</font></p>";
          }
          }

          ?>
          </head>
          <body>
          <p>Geben Sie bitte einen vollständigen Datensatz ein<br />
          und senden Sie das Formular ab:</p>

          <form action = "Sportclub.php" method = "post">
          <p><input name="na" /> Name</p>
          <p><input name="vn" /> Vorname</p>
          <p><input name="wo" /> Wohnort</p>
          <p><input type="submit" name="gesendet" />
          <input type="reset" /></p>
          </form>

          <p>Alle Datensätze <a href="sportclub_tabelle.php">anzeigen</a></p>
          </body>[/LEFT]
          </html>
          Danke
          Angi

          Kommentar


          • #6
            Zum Thema SQL Injection empfehle ich dir, dich mit Prepared Statements auseinanderzusetzen. Außerdem solltest du, wenn vom Server angeboten, die MySQLi-Schnittstelle benutzen.

            Kommentar


            • #7
              Zitat von Malachite Beitrag anzeigen
              Außerdem solltest du, wenn vom Server angeboten, die MySQLi-Schnittstelle benutzen.
              Warum nicht PDO?
              [COLOR="DarkSlateGray"]Hast du die [COLOR="DarkSlateGray"]Grundlagen zur Fehlersuche[/color] gelesen? Hast du Code-Tags benutzt?
              Hast du als URL oder Domain-Beispiele example.com, example.net oder example.org benutzt?
              Super, danke!
              [/COLOR]

              Kommentar


              • #8
                OK, über MySQLi-Schnittstelle habe ich schon gelesen, aber noch nicht näher befasst.

                Für was steht PDO?

                Kommentar


                • #9
                  PDO = PHP Data Objects

                  Kommentar


                  • #10
                    PHP: PDO - Manual
                    [COLOR="DarkSlateGray"]Hast du die [COLOR="DarkSlateGray"]Grundlagen zur Fehlersuche[/color] gelesen? Hast du Code-Tags benutzt?
                    Hast du als URL oder Domain-Beispiele example.com, example.net oder example.org benutzt?
                    Super, danke!
                    [/COLOR]

                    Kommentar


                    • #11
                      Danke

                      Kommentar

                      Lädt...
                      X