SQL Datenbankabfrage Formular

K

Kosta_91

Gast
Guten Tag,

ich habe folgendes Prblem:
Ich habe ein Formular zum Registrieren und zum LogIn geschrieben.
Die Daten werden in einer SQL Datenbank gespeichert.
Wenn jemand z.B. bei der Registrierung einen Benutzernamen eingibt,soll geprüft
werden, ob dieser schon in der Datenbank vorhanden ist.
Jedoch überprüft er bei mir nur den Ersten Eintrag und nicht die darauffolgenden.
Hier der Code:

$sql2 = "SELECT benutzername FROM benutzername";
$abfrage2 = mysql_query($sql2);
if (!$abfrage2){
die('Ungültige Abfrage:'.mysql_error());
exit;
}
$row2 = mysql_fetch_array($abfrage2);
if($row2['benutzername'] == $bna){
echo "Der Benutzername ist schon vorhanden!";
echo "<br>";
echo 'Bitte geben Sie einen neuen Benutzernamen ein!<a href="Reg2.php">zurück</a>';
exit;}
else{
echo "";}
 
Als erstes muss ich mal anmerken, dass dein Datenbankschema merkwürdig aussieht auf dem ersten Blick. Lies dir mal diesen Artikel durch: http://de.wikipedia.org/wiki/Normalisierung_(Datenbank)
Des weiteren kannst du doch einfach ein unique-constraint auf die Benutzernamenspalte legen. Dann schlägt ein insert-statement fehl wenn der Benutzername bereits existiert, was du abfangen kamnst und dementsprechend reagieren. Ist aller Wahrscheinlichkeit sogar performanter als den check in PHP durchzuführen.
 
Du fragst auch nur den ersten Eintrag ab. Wenn du alle prüfen möchtest, dann brauchst du eine Schleife.

Aber grundsätzlich musst du eine WHERE im SQL einbauen und nur prüfen, ob du Ergebnisse bekommst.

Ich glaube, du solltest vorerst mal einen SQL Kurs machen.
 
so ähnlich ;)

$sql2 = "SELECT benutzername FROM benutzername";
$abfrage2 = mysql_query($sql2);
if (!$abfrage2){
die('Ungültige Abfrage:'.mysql_error());
exit;
}
while($row2 = mysql_fetch_array($abfrage2)){
if($row2['benutzername'] == $bna){
echo "Der Benutzername ist schon vorhanden!";
echo "<br>";
echo 'Bitte geben Sie einen neuen Benutzernamen ein!<a href="Reg2.php">zurück</a>';
exit;}
else{
echo "";}}
 
Du wirst doch das nicht wirklich so einsetzen, oder?
Ineffizienter geht es kaum noch!
Du holst dir ALLE Datensätze raus!!! Das brauchst du nicht. Das kostet Zeit und verbraucht viel Speicher.

Entweder Vorschlag von @blackst0rm verwenden (finde ich nicht so gut, weil es auch andere Gründe für ein insert failed geben kann).

Baue in deinem SQL ein WHERE ein:
$sql2 = "SELECT benutzername FROM benutzername WHERE benutzername = '" . $bna . "'";

Noch schneller und sicherer wäre die Verwendung von prepared statement:
Link

Und verwende aussagekräftige Variablennamen! Das hilft dir, später auch mal wieder deinen Code zu verstehen. Oder auch anderen :-)
 
lass ihm doch bischen freiraum zum selber lernen ;)
groß- kleinschreibung musste zb. auch noch checken.

die where klausel würde die komplette whileschleife ersetzen ;)
 
Der Code sieht dann wie unten aus, jedoch zeigt er mir keinen Fehler an wie vorher, auch wenn ich einen Benutzername eingebe, der schon vorhanden ist.

$sql2 = "SELECT benutzername FROM benutzername WHERE benutzername = '" . $bna . "'";
$abfrage2 = mysql_query($sql2);
if (!$abfrage2){
die('Ungültige Abfrage:'.mysql_error());
exit;
}
 
du bekommst dann den benutzernamen zurück, wenn er schon vorhanden ist.
ansonsten n leeres ergebnis.
theoretisch könntest noch n count in das query basteln, damit du auf > 0 prüfen kannst.

also das müsste dir was ausgeben:
if (mysql_fetch_array($abfrage2)){
echo "Der Benutzername ist schon vorhanden!";
echo "<br>";
echo 'Bitte geben Sie einen neuen Benutzernamen ein!<a href="Reg2.php">zurück</a>';
exit;}
 
Zuletzt bearbeitet:
Das mit dem WHERE drin ist schon richtig so.
Wenn da nämlich mehr als 0 Zeilen rauskommen (bzw. genau 1) existiert der Name bereits.
Mit mysql_num_rows zählst du die Zeilen die du mit der Abfrage zurückbekommst. Wenn das 1 ist, ist der Name vorhanden.

$sql2 = "SELECT benutzername FROM benutzername WHERE benutzername = '" . $bna . "'";
$abfrage2 = mysql_query($sql2);

if (mysql_num_rows($abfrage2) == 1)
echo "benutzername existiert schon";
 
Ok jetzt funktioniert es wieder!
Wenns so besser, vielen Dank für den Hinweis!
 
Entweder Vorschlag von @blackst0rm verwenden (finde ich nicht so gut, weil es auch andere Gründe für ein insert failed geben kann).

gibt doch mysql_errno(). Damit kann genau ermittelt werden aus welchem Grund das statement fehlgeschlagen ist. Der hier interessante error code ist 1062.

Ich kann leider nicht mit Codebeispielen dienen, da ich mit PHP so gut wie keine Erfahrung habe und so nicht für Fehlerfreiheit garantieren könnte.
 
Zurück
Oben