Prüfen ob Username vergeben ist...
Malte
- php
0 Daniel0 Felix Riesterer0 MudGuard0 globe1 Fabian St.0 Marian
Hi,
ich habe flogendes vor, wenn sich ein User registrieren will, wir überprüft ob es diesen Usernamen schon gibt.
Dazu habe ich eine Auslese aus der DB:
<?
$sql = "SELECT username FROM user";
$result = mysql_query($sql) or die(mysql_error().'<br />Query: '.$sql);
while ($usernames = mysql_fetch_array($result)) {
$user[] = $usernames["user"];
}
?>
Ok nach der Auslese wollte ich es so überprüfen:
<?
if($username == $user[]) $fehler[] ="Der Username ist bereits vergeben.Bitte wählen Sie einen anderen";
?>
Bekomme einen Fatal Error wieder
Könnt ihr mir sagen, wie ich es machen kann?
Hi,
Bekomme einen Fatal Error wieder
und wie sieht der aus?
MfG
Lieber Malte,
was soll denn
if($username == $user[])
sein?
Die Schreibweise $user[] enthält keinen Index, über den ein Element aus Deinem Array $user eindeutig bestimmt wäre! Damit kann PHP nicht sagen, ob die if-Bedingung nun erfüllt wird, oder nicht.
$fehler[] = ...
Hier weist Du dem Array $fehler an der nächsthöheren freien Indexposition ein neues Element zu. Das ist in PHP eine gültige Schreibweise beim "Erweitern" eines Arrays, die aber wegen ihrer "Faulheit" zu Komplikationen führen kann, wenn es im Array nicht-numerische Indizes gibt.
Liebe Grüße aus Ellwangen,
Felix Riesterer.
Hi,
ich habe flogendes vor, wenn sich ein User registrieren will, wir überprüft ob es diesen Usernamen schon gibt.
Dazu habe ich eine Auslese aus der DB:
$sql = "SELECT username FROM user";
Du liest also alle Usernamen aus der DB aus?
Warum hängst Du nicht einfach die Abfrage nach dem Usernamen an (" WHERE username = '".mysql_real_escape_string($der_neue_username)."'" oder ähnliches)
und prüfst dann nur noch, ob die Anzahl der gefundenen Datensätze (mysql_num_rows) Null ist oder was anderes?
cu,
Andreas
n'abend,
damit ich deinen code richtig verstehe....
<?
$sql = "SELECT username FROM user";
du liest erst mal alle usernamen aus der tabelle user
$result = mysql_query($sql) or die(mysql_error().'<br />Query: '.$sql);
while ($usernames = mysql_fetch_array($result)) {
$user[] = $usernames["user"];
dann schiebst du alle usernamen in ein array
}
?>
>
>
> Ok nach der Auslese wollte ich es so überprüfen:
>
> ~~~php
> <?
> if($username == $user[]) $fehler[] ="Der Username ist bereits vergeben.Bitte wählen Sie einen anderen";
und dann prüfst du irgendwas, was irgendwie... wie... häh?
> ?>
>
Bekomme einen Fatal Error wieder
Könnt ihr mir sagen, wie ich es machen kann?
dass sich der PHP-Parser nicht gleich erhängt hat ist ein wunder...
würde es mal mit
$res = mysql_fetch_row(mysql_query('SELECT COUNT(`username`) FROM `user` WHERE `username` = \''.$username.'\''));
// nicht vergessen $username zu escapen, etc.
if($res[0] > 0) $fehler = 'User existiert bereits';
versuchen
weiterhin schönen abend...
Hi!
ich habe flogendes vor, wenn sich ein User registrieren will, wir überprüft ob es diesen Usernamen schon gibt.
Dazu habe ich eine Auslese aus der DB:
<?
$sql = "SELECT username FROM user";$result = mysql_query($sql) or die(mysql_error().'<br />Query: '.$sql);
while ($usernames = mysql_fetch_array($result)) {
$user[] = $usernames["user"];
}
?>
Mache das ganze am besten so:
~~~php
$sql = "SELECT
COUNT(*) as hits
FROM
user
WHERE
username = '".mysql_real_escape_string($username)."'";
$resource = mysql_query($sql);
$result = mysql_fetch_assoc($resource);
if($result['hits'] == 0) {
echo 'Name existiert noch nicht';
} else {
echo 'Name existiert!';
}
Dass das, was du bisher gepostet hast, wirklich Unsinn ist, erwähne ich hier nur am Rande. Du solltest dir dringend im PHP-Manual anschauen, was eine Konstruktion wie $array[] bewirkt: http://de.php.net/manual/de/language.types.array.php.
Die noch benötigte Fehlerbehandlung für das obige Beispiel solltest du dir noch selber bauen.
Grüße,
Fabian St.
$sql = "SELECT username FROM user";
if($username == $user[]) $fehler[] ="Der Username ist bereits vergeben.Bitte wählen Sie einen anderen";
?>
Bekomme einen Fatal Error wieder
1. Der fatal error kommt wegen dem $user[]
du kannst nur
for($i=0; $i < count($user); $i++)
{
if($username == $user[$i]) $fehler[] ="Der Username...";
}
schreiben
2. Du kannst es viel einfacher machen:
$query = mysql_query("SELECT username FROM user WHERE username='$gewuenschtername'", $db)
if(mysql_num_rows($query) > 0) $fehler = "vergeben blabla";
mysql_num_rows() liefert die anzahl der datensätze zurück, wenn es den username schon gibt, gibt es einen datensatz (nämlich den, in dem username='gewünschtername'), ansonsten gibt es keinen.
(falls du dich mit mysql nicht gut auskennst: mit WHERE gibt mysql nur die datensätze zurück, in denen die nachfolgenden bedingungen erfüllt sind)
Hallo Marian!
du kannst nur
for($i=0; $i < count($user); $i++)
{
if($username == $user[$i]) $fehler[] ="Der Username...";
}
> schreiben
Warum eine Schleife bemühen?
`if(in_array($username, $user)) echo "Benutzername existiert bereits";`{:.language-php}
℆, ℒacℎgas
--
Bei der intendierten Realisierung der linguistischen Simplifizierung
des regionalen Idioms resultiert die Evidenz der Opportunität extrem
apparent, den elaborierten und quantitativ opulenten Usus nicht assi-
milierter Xenologien konsequent zu eliminieren!
Warum eine Schleife bemühen?
if(in_array($username, $user)) echo "Benutzername existiert bereits";
Mit array-funktionen kenn ich mich nicht so aus, von in_array hab ich schon gehört, aber trotzdem danke für den tipp, aber das mit WHERE ist trotzdem einfacher!
Was heißt eigentlich das mit der intendenten realisierung?
Hi
WHERE ist trotzdem einfacher!
vorallem einfacher für sql-inserts
MfG