Avatar billede heavybreezer Nybegynder
07. september 2003 - 18:37 Der er 6 kommentarer og
3 løsninger

Undlade at vælge samme brugernavn

Jeg er ved at lave et community.
Men når brugerne opretter sig, kan de godt oprette sig med ens brugernavne.
F.eks. Hvis en bruger opretter sig med navnet testuser, kan en anden også oprette sig med dette navn, og det er et ret stort problem. Hvis jeg prøver at logge ind med burgernavnet testuser, logger jeg ind på den sidste nye oprettede bruger med dette navn.

Hvordan kan jeg lave et script, som tjekker om navnet eksisterer i forvejen, og advarer hvis det gør?
Avatar billede spunk13 Nybegynder
07. september 2003 - 18:43 #1
$brugernavn = $_POST['brugernavn'];
$users = mysql_query("select brugernavn from `database`");
while ($usernames = mysql_fetch_array($users)) {
$userarray[] = $usernames['brugernavn'];
}
if (in_array($brugernavn, $userarray)) {
echo "<center>Brugernavnet er optaget.<br>Vælg venligst et andet";
return false;
}
Avatar billede arne_v Ekspert
07. september 2003 - 18:45 #2
Det gør du ikke fordi det virker ikke.

Bruger 1 tester om testuser eksisterer - det gør det ikke.
Bruger 2 tester om testuser eksisterer - det gør det ikke.
Bruger 1 opretter testuser.
Bruger 2 opretter testuser.

Problem.

Du skal løse det database mæssigt.

Enten gør du bugernavn til primær-nøgle i din tabel eller så opretter
du et unikt index på feltet.

Så fejler anden INSERT med en fejl og dit PHP script kan bede
brugeren vælge et andet brugernavn.
Avatar billede ahv Nybegynder
07. september 2003 - 18:47 #3
Spunk13 dit forslag er da helt hen i vejret, en nemmere og hurtigere metode er ->

$username = $_POST['username];
if (mysql_result(mysql_query("SELECT COUNT(*) FROM `dintable` WHERE `username`='".$username."'"),0) > 0) {
    echo "Det valgte brugernavn er optaget.";
} else {
    // her skal oprettelse så foregå.
}
Avatar billede ahv Nybegynder
07. september 2003 - 18:47 #4
$username = $_POST['username'];
if (mysql_result(mysql_query("SELECT COUNT(*) FROM `dintable` WHERE `username`='".$username."'"),0) > 0) {
    echo "Det valgte brugernavn er optaget.";
} else {
    // her skal oprettelse så foregå.
}
Avatar billede spunk13 Nybegynder
07. september 2003 - 18:49 #5
Virker det da ikke?
Avatar billede ahv Nybegynder
07. september 2003 - 18:51 #6
Den vil så vidt jeg kan se virke, men det er en alt for besværlig proces, du lægger ALLE brugernavne ind i et array for herefter at tjekke om det valgte er i ARRAYET. Tænk dig hvis du blot har 1.000 brugernavne!

Den nemmeste (min metode) er at tjekke direkte i tabellen og se om der er nogle ens, den hiver ikke noget ud af tabellen, den tæller blot de antal poster hvor det indskrevne brugernavn forekommer.
Avatar billede arne_v Ekspert
07. september 2003 - 18:51 #7
Hverken dit eller ahv's forslag er 100% sikre i tilfælde af mere
end en samtidig bruger.
Avatar billede heavybreezer Nybegynder
07. september 2003 - 18:51 #8
Jamen jeg har har kolonne "id", hvor der står auto_increment. Er det primær nøgle? Du siger hvis jeg sætter den til navnet, kommer der en fejl for brugeren...? Kan du komme med noget kode jeg kan indsætte?
Avatar billede arne_v Ekspert
07. september 2003 - 18:54 #9
id er uden tvivl primær-nøgle.

Lav et unique index på feltet brugernavn og lad PHP koden der
INSERT'er håndtere fejl ved duplicate.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester