MySql-Datenbank über php mit Daten füllen

vom 22.08.2009, 13:43 Uhr

Ich habe ein riesiges Problem! Und zwar wird nichts in meine Datenbank geschrieben: Ich habe letztens eine Datenbank erstellt und wollte sie nun über ein Formular mit Daten füllen. Das Formular ist super, aber irgendwie funktioniert bei mir der befehl mysql_query() nicht. Hier ist der code (ohne Formular):

Code: Alles auswählen
<?php
$connect = mysql_connect("localhost:57120","forum-8a_user","•••••••") or die ("Keine Verbindung möglich");
$select = mysql_select_db("forum-8a_user") or die ("Die Datenbank existiert nicht");

*/Angaben werden per POST aus Formular in Variablen gespeichert*/
$vorname = $_POST["vorname"];
$nachname = $_POST["nachname"];
$username = $_POST["username"];
$passwort = $_POST["passwort"];
   
$eintrag = "INSERT INTO 'userinformationen' (vorname, nachname, user-name, passwort) VALUES ('$vorname', '$nachname', '$username', '$passwort')";

$eintragen = mysql_query($eintrag);
?>
Wäre schön, wenn ihr mir den Fehler sagen könntet. P.S.: Es kommt keine Fehlermeldung oder so. Es erscheint eine leere Seite. Also sollten die Daten in die DB gespeichert sein. Sind sie aber nicht.

Benutzeravatar

» julian.schoeme » Beiträge: 8 » Talkpoints: 0,04 »



Vorweg gesagt: ohne Fehlermeldung kann man auch nicht die Natur des Problems wissen. Da hier zudem noch externe Einflüsse (in diesem Fall mySQL) einen Fehler verursachen können, gibt es keine Pauschallösung, die ich dir nun anbieten könnte.

Du solltest beim Entwickeln eines Scriptes immer darauf achten, dass die Fehlerberichterstattung aktiviert ist. Dies kannst du im Script selbst machen, indem du am Start die Funktion error_reporting() aufrufst, so zum Beispiel um alle PHP-Fehlermeldungen anzeigen zu lassen:

Code: Alles auswählen
<?php
error_reporting(E_ALL);

//ab hier dein Script
...
?>
Natürlich kannst du auch die mySQL-Fehlermeldung direkt abfragen, so es bei der letzten Aktion der bestehenden Datenbankverbindung denn einen Fehler gab:
Code: Alles auswählen
...
$eintragen = mysql_query($eintrag);

if (mysql_errno()) {
    $error = "MySQL Fehler ".mysql_errno().": ".mysql_error()."\n<br>Bei folgendem Query:<br>\n$query\n<br>";

    // für produktiv eingesetzte Scripte wirkt es professioneller, den Entwickler
    // bzw Seitenbetreiber darüber zu informieren und eine eigens gestaltete
    // Fehlermeldung anzuzeigen.
    echo $error;
 }
?>
Abschließend kann ich dir noch empfehlen, die Eingabe von Formulardaten unbedingt zu überprüfen. So wie du die Formulardaten derzeit zwischenspeicherst ($vorname = $_POST["vorname"]) und dann ungeprüft in eine Datenbank schreibst, sollte man es nie - aber auch wirklich NIEMALS - tun! Du solltest dir auf der PHP-Referenz zur Funktion addslashes() unbedingt die Kommentare durchlesen, denn dort findest du ein paar gut funktionierende Ansätze zu diesem Problem.

Dies kann man gar nicht oft genug erwähnen, weil schlecht gescriptete Webseiten enorme Sicherheitslücken bieten können. Nicht nur kann man damit Fehlercode in die Webseite bzw Datenbank einschleichen, man kann im schlimmsten Fall sogar bestehende Adressdaten klauen oder gar den gesamten Internetauftritt löschen.

Benutzeravatar

» Reaper » Beiträge: 576 » Talkpoints: 1,11 » Auszeichnung für 500 Beiträge


Wie gesagt "musst" du die Daten vorher sichern, bevor du diese in eine Datenbank einträgst. Der Grund: Wenn du deine Daten nicht vorher absicherst, besteht die Gefahr eines Hack-Angriffs. In diesem Fall einer MySQL-Injection. Dadurch kann sich jeder Möchtegernhacker Zugang zu deiner Datenbank verschaffen, Daten auslesen oder die Datenbank sogar komplett löschen.

Auch bei der Ausgabe musst du aufpassen, denn da besteht die Gefahr vor weiteren Angriffen, wie unter anderem Cross-Site-Scripting (XSS), wodurch bösartiger Code in deine Seite eingeschleust werden kann.

Außerdem sollte man "nie" das Passwort ohne Verschlüsselung eintragen, da sonst der Angreifen es einfach sehen kann, wenn er Zugriff zu deiner Datenbank erlangt hat. Daher verwendet man hierfür normalerweise einen Hash, z.B. den md5-Hash.

Ich habe hier einmal eine leicht überarbeitete Version deines Programms, die funktionieren sollte:

Code: Alles auswählen
<?php
$connect = mysql_connect("localhost:57120","forum-8a_user","•••••••") or die ("Keine Verbindung möglich");
$select = mysql_select_db("forum-8a_user") or die ("Die Datenbank existiert nicht");

*/Angaben werden per POST aus Formular in Variablen gespeichert*/
$vorname = mysql_real_escape_string($_POST["vorname"]);
$nachname = mysql_real_escape_string($_POST["nachname"]);
$username = mysql_real_escape_string($_POST["username"]);
$passwort = mysql_real_escape_string(md5($_POST["passwort"]));
   
$eintrag = "INSERT INTO 'userinformationen' (vorname, nachname, user-name, passwort) VALUES ('$vorname', '$nachname', '$username', '$passwort')";

$eintragen = mysql_query($eintrag) or die(mysql_error());

if ($eintragen == true){
echo "Eintragen erfolgreich";
}
else {
echo "Eintragen fehlgeschlagen";
}
?>

Ich muss noch hinzu sagen, dass du error_reporting() und alle anderen Möglichkeiten, die du zum Anzeigen der Fehler verwendest, auf jeden Fall aus dem Code nehmen musst, bevor du deine Seite aktiv betreibst. Denn solche Fehlermeldungen erhält dann auch der Client, was für Hacker eine wichtige Information sein kann (z.B. der Spaltenname).[/code]

Benutzeravatar

» Big-D. » Beiträge: 1234 » Talkpoints: -10,32 » Auszeichnung für 1000 Beiträge



Ähnliche Themen

Weitere interessante Themen

^