BlackBoard (http://www.black-board.net/index.php)
- Design, Programmierung & Entwicklung (http://www.black-board.net/board.php?boardid=55)
-- Programmieren (http://www.black-board.net/board.php?boardid=4)
--- PHP UNIQUE feld! (http://www.black-board.net/thread.php?threadid=21634)


Geschrieben von ColdFire am 15.12.2005 um 22:12:

geschockt UNIQUE feld!

Hy ! nochmals muss ich die php coder nerfen...

ich habe ein problem und zwar sollte man ja keinen user 2 mal in der datenbank haben ... da hab ich doch gelesen das wenn man sein (userfeld) UNIQUE macht das das nicht vorkommen kann ?

ist das von vorteil oder sollte ich mit php zuerst mein db auslesen ob user vorhanden und dann reagieren ?

code:
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
.....
$selectuser = mysql_query("select * from $tabelle where user='$user'");
....
else if($user == $selectuser)
            {
             echo "<div align=\"center\"><br><br>Username bereits vorhanden!<br>";
             echo "<a href=\"javascript:history.back()\">Zurück</a></div>";
            }


kann ich das so lösen ? nicht oder großes Grinsen



Geschrieben von LX am 15.12.2005 um 22:35:

Achtung

Das UNIQUE stellt sicher, dass Einträge in dieser Spalte einzigartig sind, allerdings eben nur auf der Datenbankebene. Wenn du versuchst, mittels PHP einen weiteren Datensatz einzufügen, bei dem ein mit einem UNIQUE-Index versehenes Feld einen Wert bekommt, der in der Tabelle schon vorhanden ist, wird dir mySQL einen Fehler zurückgeben. Den musst du mit PHP dann aber wieder verarbeiten, du hast also keine Ersparnis im Vergleich zu einem vorherigen Check, ob ein Wert bereits auftaucht.

Prüfen kannst du das z.B. wie folgt:

php:
1:
2:
3:
4:
5:
6:
7:
// ... mySQL-Zugangszeug

$blubb mysql_query 'SELECT id FROM tabelle WHERE name="' $whatever '"' );
if ( mysql_num_rows $blubb ) > )
  // Wert vorhanden
else
  // Wert nicht vorhanden



Geschrieben von Misel am 16.12.2005 um 10:47:

 

Das Problem ist aber, wenn Du vorher prüfst, ob die Daten drin sind, hast Du im Durchschnitt mehr Datenbank abfragen. Das mag einigen am Hintern vorbeilaufen, aber manche brauchen nun mal Performance und versuchen die Datenbankzugriffe zu minimieren.

Im schlimmsten Fall des von LX beschriebenen Weges hast Du zwei Datenbankzugriffe (Prüfung der Daten und Insert der Daten).

Wenn Du einen Insert machst, kannst Du Die Fehlerbehandlung auch gleich darum basteln. Damit hast Du dann immer einen Datenbankzugriff.



Geschrieben von ColdFire am 16.12.2005 um 16:46:

 

@ Misel
Du meinst wenn ich den result den ich bekomme ( SQL seitig) umwandle


z.b. if Fehlermeldung= 10010 then
echo ("User schon vorhanden !");

lg CF



Geschrieben von Misel am 16.12.2005 um 19:31:

 

welche Fehlermeldung die Datenbank genau zurückliefert kann ich nicht sagen, aber ja, auf sowas wollte ich hinaus.


Forensoftware: Burning Board 2.3.6, entwickelt von WoltLab GmbH