Christian Tolk: Einfügen eines Datensatzes in eine Datenbank

Hallo,

ich habe ein PHP-Skript mit dem Daten aus einem Formular übernommen werden und in eine Datenbank eingefügt werden sollen.

Ich habe bereits folgendes Skript:
----------------------------------------------------------------
<?
//Ueernahme der Formulardaten
$_GET["name"];
$_GET["inhalt"];

//mysql-zugangsdaten
$server = "XXXXXXXXX";
$user = "XXXXXXXX";
$server_passwort = "XXXXXXXX";

//verbindung zu mysql + passwortabfrage
$verbindung = mysql_connect("$server","$user","$server_passwort")or die ("Es konnte keine Verbindung zur Datenbank hergestellt werden.");;
mysql_select_db("XXXXXX", $verbindung);
$sql = "INSERT INTO gaestebuch
(id, zeit, name, inhalt) VALUES ('', NULL, NULL, $inhalt);;
mysql_query($sql, $verbindung);
mysql_close($verbindung);
?>
-----------------------------------------------------------------

Die Daten werden auch aus dem Formular übernommen und die Verbindung zur Datenbank wird auch aufgebaut. Allerdings werden die Daten leider  nicht in die Datenbank eingefügt und ich weis leider nicht warum. Ich hoffe ihr könnt mir helfen.

Danke
Christian Tolk

  1. Hallo.

    Allerdings werden die Daten leider  nicht in die Datenbank eingefügt und ich weis leider nicht warum.

    Dann bekommst du sicher eine Fehlermeldung.
    Wie lautet die?

    Viele Grüße,
    Thomas

  2. Hallo,

    $sql = "INSERT INTO gaestebuch
    (id, zeit, name, inhalt) VALUES ('', NULL, NULL, $inhalt);;

    So auf den ersten Blick würde ich behaupten, da stimmt was nicht. Am Ende muss doch noch nen " hin statt eines ; oder? Eigentlich sollte da ja schon PHP rummeckern.

    Gruß,
    Kerstin

    --
    "Als es noch keine Computer gab, war das Programmieren noch relativ einfach." - Edsger W. Dijkstra
  3. echo $begrüßung;

    Die Daten werden auch aus dem Formular übernommen und die Verbindung zur Datenbank wird auch aufgebaut. Allerdings werden die Daten leider  nicht in die Datenbank eingefügt und ich weis leider nicht warum. Ich hoffe ihr könnt mir helfen.

    Deinem Script mangelt es an Fehlerbehandlung. Die mysql_*-Funktionen geben als Rückgabewert im Fehlerfall false zurück. Das solltest du auswerten und den jeweiligen Fehlertext mit mysql_error() abfragen.

    Ebenso ist keine Behandlung der Eingabedaten zu erkennen. Wenn sich darin Sonderzeichen wie ' oder Zeilenumbrücke befinden, müssen diese besonders gekennzeichner werden, damit diese in einen SQL-String eingebaut werden können. Dafür ist unter PHP die Funktion mysql_real_escape_string() vorgesehen.
    Weiterhin ist zu beachten, dass es ein PHP-Feature namens Magic Quotes gibt, welches diese Aufgabe erfüllen soll, dies aber nicht alle für MySQL relevanten Zeichen berücksichtigt. Ist es aktiviert muss es ausgeschaltet werden, oder deren Auswirkungen rückgängig gemacht werden, bevor man selbst die Maskierung der Sonderzeichen (mit mysql_real_escape_string()) vornimmt. Siehe Disabling Magic Quotes.

    Und noch eine Kleinigkeit: Variablennamen müssen nicht mit "" eingerahmt werden.
      mysql_connect("$server","$user","$server_passwort");
    notiert man sinnvoller so:
      mysql_connect($server, $user, $server_passwort);

    echo "$verabschiedung $name";

  4. Hi Christian,

    abgesehen von den Tipps der anderen Poster (insbesondere die Hinweise von dedlfix zum Thema Sicherheit beachten!), wage ich mal einen Blick in die Glaskugel:

    In der Regel werden Tabellen ja so aufgebaut, dass es ein
     Feld id gibt, das primary key ist, keine doppelten Werte
     haben, nicht leer sein darf und deshalb mit
    AUTO_INCREMENT definiert wurde. Falls das bei Dir der
    Fall ist, darfst Du im INSERT-Statement natürlich dieses
     Feld nicht mit einem leeren Wert angeben, wenn überhaupt
     nur mit einer ID, die noch nicht vergeben ist. Sowas macht man allerdings nur in Ausnahmefällen, normalerweise
    lässt man es einfach weg, weil dafür ist AUTO_INCREMENT
    ja da.

    Grüße,
    Karin