NA: Formular

Wo ist hier der Fehler?

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"
       "http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
<title>FS09 Studierendenliste</title>
</head>
<body>

<h1>Formular zur Namenseingabe</h1>

<form action="frm_fs09.php" name="frm" method="post">
  <p>Vorname:<br><input name="vorname" type="text" size="30" maxlength="30"></p>
  <p>Nachname:<br><input name="nachname" type="text" size="30" maxlength="40"></p>

<input type="submit" value="absenden" >
</form>

</body>
</html>

<?php

//Verbindungsdaten
$servername = 'localhost';
$db_user = 'root';
$db_password = '';

//Variablen initialisieren
$vorname = $_POST['vorname'];
$nachname = $_POST['nachname'];

//Schritt 1: Verbindung zum Datenbankserver (MySQL-Server) herstellen
$con = mysql_connect($servername,$db_user,$db_password) or die('Verbindung fehlgeschlagen!');

$datenbankname = 'fs09';

//Schritt 2: Datenbank auswählen
$db = mysql_select_db($datenbankname) or die('Die Datenbank existiert nicht!');

//Schritt 3: Datenbankanfragen
//Daten in Datenbank speichern
//Anfrage erstellen
$einfuegen = "INSERT INTO tbl_fs09_namen VALUES ('$vorname', '$nachname')";

//Anfrage senden
mysql_query($einfuegen);

//Schritt 4: Datenbankanfragen: Ausgabe der Daten in tabell. Form
// Auswahl aller Datensätze
$sql_befehl = "SELECT * FROM tbl_fs09_namen";

//Anfrage senden
$ergebnis = mysql_query($sql_befehl);

echo "<table border='1'> <tr><td colspan='2' class='ueberschrift'>Datenbank $datenbankname</td></tr>";

echo "<tr><td>Vorname</td><td>Nachname</td></tr>";

//Datensätze werden übergeben
while ($row = mysql_fetch_object($ergebnis))
{
echo "<tr><td>$row->vorname</td><td>$row->nachname</td></tr>";
}
echo "</table>";

//Schritt 5: Verbindung zum Datenbankserver beenden
mysql_close($con);

?>

  1. Wo ist hier der Fehler?

    Ein Fehler war es die Charta des Forums nicht zu lesen.

  2. Hallo,

    Wo ist hier der Fehler?

    soll das ein Ratespiel sein?
    Es kann nicht sein, dass du einfach nur ein paar Zeilen Code hinschmeißt und fragst, was da falsch ist. Das Mindeste ist, dass du den Fehler _beschreibst_. Wie äußert er sich, was sollte passieren, was passiert tatsächlich?

    Nichtsdestotrotz enthält dein Code eine Reihe von kleinen Fehlern - teils nur "sinnlos, aber unschädlich", teils aber gravierende Sicherheitslücken.

    //Variablen initialisieren
    $vorname = $_POST['vorname'];
    $nachname = $_POST['nachname'];

    Das Umkopieren ist so ein Beispiel von "sinnlos, aber unschädlich". Wozu soll das gut sein? Und was machst du, wenn gar keine POST-Daten vorliegen - beispielsweise dann, wenn erstmal das leere Formular abgerufen wird?

    //Anfrage erstellen
    $einfuegen = "INSERT INTO tbl_fs09_namen VALUES ('$vorname', '$nachname')";

    //Anfrage senden
    mysql_query($einfuegen);

    Autsch. Spätestens hier ist deine DB potentiell gefährdet. Denn du übergibst Eingaben an die DB, ohne sie auf Plausibilität oder Gültigkeit zu überprüfen, und ohne sie kontextgerecht zu codieren.

    //Datensätze werden übergeben
    while ($row = mysql_fetch_object($ergebnis))
    {
    echo "<tr><td>$row->vorname</td><td>$row->nachname</td></tr>";
    }
    echo "</table>";

    Auch hier fehlt die kontextspezifische Behandlung.

    Ciao,
     Martin

    --
    Um mit einem Mann glücklich zu werden, muss eine Frau ihn sehr gut verstehen und ein bisschen lieben.
    Um mit einer Frau glücklich zu werden, muss ein Mann sie sehr lieben und darf gar nicht erst versuchen, sie zu verstehen.
    Selfcode: fo:) ch:{ rl:| br:< n4:( ie:| mo:| va:) de:] zu:) fl:{ ss:) ls:µ js:(
    1. Hallo,

      Wo ist hier der Fehler?

      soll das ein Ratespiel sein?
      Es kann nicht sein, dass du einfach nur ein paar Zeilen Code hinschmeißt und fragst, was da falsch ist. Das Mindeste ist, dass du den Fehler _beschreibst_. Wie äußert er sich, was sollte passieren, was passiert tatsächlich?

      Nichtsdestotrotz enthält dein Code eine Reihe von kleinen Fehlern - teils nur "sinnlos, aber unschädlich", teils aber gravierende Sicherheitslücken.

      //Variablen initialisieren
      $vorname = $_POST['vorname'];
      $nachname = $_POST['nachname'];

      Das Umkopieren ist so ein Beispiel von "sinnlos, aber unschädlich". Wozu soll das gut sein? Und was machst du, wenn gar keine POST-Daten vorliegen - beispielsweise dann, wenn erstmal das leere Formular abgerufen wird?

      //Anfrage erstellen
      $einfuegen = "INSERT INTO tbl_fs09_namen VALUES ('$vorname', '$nachname')";

      //Anfrage senden
      mysql_query($einfuegen);

      Autsch. Spätestens hier ist deine DB potentiell gefährdet. Denn du übergibst Eingaben an die DB, ohne sie auf Plausibilität oder Gültigkeit zu überprüfen, und ohne sie kontextgerecht zu codieren.

      //Datensätze werden übergeben
      while ($row = mysql_fetch_object($ergebnis))
      {
      echo "<tr><td>$row->vorname</td><td>$row->nachname</td></tr>";
      }
      echo "</table>";

      Auch hier fehlt die kontextspezifische Behandlung.

      Ciao,
      Martin

      Hallo Martin,

      vielen Dank für die Antwort! Hilft mir etwas, nur wirklich schlau werde ich da nicht ganz raus. Mein Problem ist, dass ich leider gar keine Ahnung von dem Thema habe :( ich kann nur sagen, dass wir ein Formular erstellen sollen und die eingetragenen Daten sollen dann in eine MySQL-Datenbank übertragen werden. Ich kann aber nicht einmal da Formular sehen :( geschweige davon, dass ich Fehlermeldungen erhalte :(
      Ich brauche es für eine Klausur und wollte es einfach auswendig lernen, um wenigstens Teilpunkte zu bekommen und eine 6 zu vermeiden!
      Und habe gehofft, dass mir jemand das richtig "formulieren" kann, damit ich zumindest das Richtige auswendig lerne :)
      Ich weiß, dass es bescheuert ist, aber ich weiß mir nicht anders zu helfen.
      Vielen Dank trotzdem!!!
      Und einen schönen Abend!!
      NA

  3. Wo ist hier der Fehler?

    Bitte schreibe hier die konkrete Fehlermeldung die du bekommst.

    Verwende für PHP mysqli : http://php.net/manual/de/book.mysqli.php sonst hast du sql Injections, sowas sollte heute mit PreparedStatements programmiert werden.

  4. Wo ist hier der Fehler?

    //Verbindungsdaten
    $servername = 'localhost';
    $db_user = 'root';
    $db_password = '';

    Da ist EINER. Was (t.f.) hat der root als Benutzer einer Datenbank zu suchen, die ausgerechnet auch noch von einem Webserver abgefragt wird.

    Fred