Tom: Registration MySQL und PHP

Beitrag lesen

Hello,

  1. Statte Deine Spalte Nickname mit einem eindeutigen Index aus.
       Wie das geht, steht im MySQL-Handbuch.

  2. Bei einer Neuregistrierung versuche einfach den Datensatz einzutragen,
       _ohne_ vorher nachzuschauen, ob er bereits vorhanden war.

  3. Wenn es geklappt hat, prima.
       Wenn es nicht geklappt hat - und zwar wegen einer Schlüsselverletzung,
       dann teile dem Neubenutzer mit, dass der Nickname bereits vergeben ist.

Vielleicht sollte man 'was klarstellen dazu. Ich hatte es eben unterschwellig ja schon gesagt:

Einen MySQL-Status-Wert > 0 zu erzeugen, ist KEIN FEHLER, sondern wird oft gezielt dazu genutzt, um eine sogenannte "Race Condition" http://de.wikipedia.org/wiki/Race_condition zu vermeiden.

Die von marv hier versuchte Methode ist daher schlichtweg FALSCH.
Zwischen der Abfrage, ob ein Nickname bereits eingetragen worden ist, und dem tatsächlichen Eintrag ist soviel Zeit, dass andere Prozesse diese Lücke für sich nutzen könnten. Vermeiden kann man das nur durch die Bindung der beiden Statements zu einem einzigen "atomaren Prozess". Während des Ablaufes eines solchen gebundenen Prozesses lässt das beauftragte System keinen zweiten Prozess an die betroffenen Daten heran.

Man kann diese Sperre als Programmierer künstlich herbeiführen (Semaphore, Locking) oder aber es dem beauftragten System direkt übertragen. Da die künstliche Variante, die sich leider nicht immer vermeiden lässt, i.d.R. ein Performance-Killer ist, sollte man also immer mit der "eingebauten Lösung" arbeiten und Statuswerte und Fehlermeldungen als seine Freunde ansehen und nicht als lästige Dinge, die man möglichset unterdrücken sollte.

Aber auch die nicht beabsichtigten oder vorhergesehen Fehlermeldungen sollte man in PHP immer alle zulassen, also während der Entwicklung zur Anzeige kommen lassen. PHP bitete die Möglichkeit, durch Umstellen/Einstellen weniger Konfigurationsvariablen die Fehlermeldungen später im laufenden Betrieb  zu filtern un d die wichtigen in eine Datei umzulenken. Das geht auch ganz außerhalb der Scripte, wenn der Provider nicht verblödet ist, in einer .htaccess-Datei oder einer eigenen php.ini.

http://de3.php.net/manual/en/ref.errorfunc.php

Man muss nur zu unterscheiden lernen, wann ein "Fehler" zum normalen vorhersehbaren Programmablauf gehört, der im Programm automatisch behandelt wird, oder wann er eine unvorhergesehene oder zumindesrt unerwünschte Störung des Programmablaufes darstellt, die im Logbuch auflaufen sollte, um dann durch Änderungen am Programm oder der Konfiguration die Fehlerquelle beseitigen zu können.

Soweit ich mich erinnere, hatte sich Dedlfix schon mal das <I> angezogen?
Mit einer einfachen Strategie, wie man bei PHP Fehlermeldungen gezielt in ein File umleitet, sollte man vielleicht mal beginnen...

Harzliche Grüße vom Berg
http://bergpost.annerschbarrich.de

Tom

--
Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
Nur selber lernen macht schlau
Ein Jammer ist auch, dass die Dummen so selbstsicher und die Klugen voller Zweifel sind. Das sollte uns häufiger zweifeln lassen :-)