Seite 1 von 1
Fehler bei Übertragung zur Datenbank
Verfasst: 07.09.2007 10:21
von Tobi
Hi,
Habe ein Problem mit einem Code eines Mitgliederprofils.
Immer wenn man auf Speichern klickt, wird der Datensatz des jeweiligen Users komplett in der DB geleert. Nur noch der Username bleibt erhalten. Wenn man was per Hand in die DB (Per phpmyadmin) schreibt, bleibt es logischerweise erhalten und wird auch in diesem Formular angezeigt. Wenn man es aber über das Formular ändern will, werden die Einträge in der DB gelöscht. Und ich habe keine Ahnung warum.
Wäre schön, wenn mir jemand helfen könnte =)
Hier der Link zur Datei im TXT-Format:
http://www.hosting42.de/test/profil.txt
Danke für eure Hilfe!!!
Gruß
Tobi
Verfasst: 07.09.2007 11:10
von Seimon
Was mir mal auffält:
Code: Alles auswählen
<input type="text" value="<?PHP echo $user[name];?>" redonly disabled name="formtext1">
Da sollte re
adonly stehen, denk ich...
Verfasst: 07.09.2007 11:50
von Tobi
Hi, habs geändert, aber es hat glaub ich nix damit zu tun. Geht auch immer noch nicht. Aber danke =)
Verfasst: 07.09.2007 12:01
von Seimon
Wenn du in der db was einträgst und dann die Seite aufrufst, steht es da. Wenn du dann auf speichern klickst ist es wieder weg. Richtig?
Verfasst: 07.09.2007 12:07
von Tobi
Genau so ist es
Verfasst: 07.09.2007 12:15
von gn#36
Eine Sache zum Programmierstil:
$db[anrede]
hast du diese ganzen Konstanten (anrede, vorname, email ...) die du verwendest alle in einer anderen Datei definiert? ansonsten ist das ziemlich unsauberer Stil, einfach nicht definierte Konstanten zu verwenden. Eigentlich sollten das ja nur Strings mit diesem Wert sein, also 'anrede', 'vorname', 'email' ...
Außerdem gehst du davon aus dass register_globals aktiviert ist. Das ist nicht zwingend auf allen Servern der Fall, wenn es nicht so ist (und aus Sicherheitsgründen ist es sehr gut wenn das nicht so ist) enthalten sämtliche Variablen $email, $anrede, $vorname... nichts, da sie nicht initialisiert wurden. Dem entsprechend wird auch das "nichts" in die Datenbank geschrieben, der Datensatz wird geleert (zumindest wenn du die Daten in $user vorher richtig gesetzt hast).
Über die Sicherheit deines Skriptes solltest du dir auch noch mal erhebliche Gedanken machen. Du verwendest - wenn register_globals aktiviert ist - nicht nur direkt vom User kommende Daten ungeprüft in einem Query, sondern gibst sie überdies auch offenbar ungeprüft aus, für XSS ist das ein gefundenes Fressen. Man darf sich als Faustregel auf nichts verlassen, das vom User kommt, grundsätzlich sind alle Daten erst einmal als böswillig zu betrachten, daher sollte man sämtliche Daten vor der Ausgabe oder der Verwendung in einem Query prüfen, z.b. ob Zahlenwerte auch tatsächlich Zahlen sind (kann man per intval() erzwingen, oder per casting für andere Datentypen), man kann per htmlspecialchars oder htmlentities dafür sorgen, dass der ausgegebene Text auch tatsächlich nur Text ist und nicht HTML Code, ...
Vor allem bei so sensiblen Daten wie denen die du hier offenbar bearbeiten willst sollte man was die Sicherheit angeht sehr vorsichtig sein.
Verfasst: 07.09.2007 12:20
von Seimon
Hehe zur Sicherheit wollt ich auch grad was sagen
Aber zum Problem:
Kann sein, dass ich grad auf der Seife steh, aber was bedeutet das name="profil" hier?
Code: Alles auswählen
<form action="home.php?page=profil&step=1" Method="post"name="profil">
Verfasst: 07.09.2007 12:40
von Tobi
Hi, also zunächst ist es nicht mein Script. Dass Register_Globals aktiviert ist, stimmt, sonst würde ja gar nichts da funktionieren. Das mit der Sicherheit ist schon richtig, aber so ist nunmal das Leben
Das "name="profil", scheint sich wohl auf das Formular zu beziehen, da es ja eben das "Profil-Formular" ist.
Danke für die Antworten
Verfasst: 07.09.2007 14:17
von Tobi
Ich habe nochmal die anderen Formulare angeguckt, über die das Mitglied was ändern kann. Und jedes mal werden die Datensätze gelöscht.
Verfasst: 13.09.2007 00:58
von Ron_Berlin
An welcher Stelle werden die ganzen Variablen denn aus
dem POST-Array herausgeholt? Passiert das in einer der
Copy-Strecken?
Mir stellt sich auch die Frage, ob das Script überhaupt
jemals funktioniert hat.
Gruß Ron