Einfügen eines Datensatzes in eine Datenbank
Christian Tolk
- php
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
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
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
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";
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