Avatar billede salle Nybegynder
17. marts 2004 - 08:47 Der er 7 kommentarer og
2 løsninger

mysql opret bruger

Jeg har en "opret bruger side" hvor man indtaster
div. oplysninger navn brugernavn adgangskode o.s.v.
som gemmes i en database

kan man lave en kode der checker om brugernavnet og navn er taget
i brug af en anden og returnere en fejlmeddelse

gerne så simpelt som muligt...
Avatar billede salle Nybegynder
17. marts 2004 - 08:48 #1
siderne er lavet i PHP
Avatar billede muddi Praktikant
17. marts 2004 - 09:26 #2
Ja, men vidst ikke så simpelt igen. Lav to forespørgsler. Den første søger efter brugernavnet i databasen og den næste gemmer det indtastede, hvis det ikke blev fundet første gang.
Systemet er ikke skudsikkert, da der i pricippet kunne komme en bruger mellem de to forespørgsler og tage navnet :p
Risikoen er dog ufatteligt minimal!

Hvis du ikke kan leve med den risiko, så kan du bruge transaktioner, men det er lidt meget at gøre ud af det.

Her er et eksempel på hvordan dit script kunne se ud:

-- gembruger.php
if(!(SELECT brugernavn FROM brugere WHERE brugernavn = '$nybrugers_navn'))
  INSERT INTO brugernavn ...

Det er IKKE en ready-to-go kode, men blot et billede af hvordan du kan gøre det!
Avatar billede arne_v Ekspert
17. marts 2004 - 09:45 #3
Hvis brugernavn enten er primær nøgle eller har et unikt index, så får
du en fejl ved insert af nummer 2 og den kan bruges til at informere
brugeren.

Du kan godt lave en SELECT men da du alligevel skal teste for fejl, så
sparer du ikke ret meget.

Transaktioner vil kræve InnoDB tabeller fremfor MyISAM tabeller og
passende transaction isolation level og den rigtige kode.
Avatar billede salle Nybegynder
17. marts 2004 - 11:44 #4
begge værdier er sat til unique, så man kan ikke oprette med den samme brugernavn
eller adgangskode... Men hvordan fortæller jeg brugeren at det ikke lykkedes at oprette da brugernavnet er taget?

Min fil ser således ud: reg.php

<?
$db = mysql_connect("localhost", "***********", "**********");
mysql_select_db("test", $db);


if ($reg)
{
mysql_query("INSERT INTO medlemmer (brugernavn, adgangskode)
VALUES('$brugernavn', '$adgangskode')");
}
?>


<FORM METHOD=POST ACTION=reg.php>
<INPUT TYPE=hidden NAME=reg VALUE=1>
<INPUT TYPE=text NAME=brugernavn><br>
<INPUT TYPE=password NAME=adgangskode><br>
<INPUT TYPE=submit VALUE=send>
</FORM>

<? $medlemsliste = mysql_query("SELECT brugernavn, adgangskode
FROM medlemmer ORDER BY brugernavn DESC");
while($data = mysql_fetch_row($medlemsliste))
{
ECHO "$data[0]<br>";
ECHO "$data[1]<br><hr>";
}
?>
Avatar billede muddi Praktikant
17. marts 2004 - 11:49 #5
Betyder følgende,
"begge værdier er sat til unique, så man kan ikke oprette med den samme brugernavn eller adgangskode",
at det brugeren "palle" og brugeren "ole" ikke have samme adganskode?

Dit problem kan løses således:

if(mysql_query("INSERT INTO medlemmer (brugernavn, adgangskode)
VALUES('$brugernavn', '$adgangskode')"))
    print "Du er nu oprettet";
else
    print "Dit brugernavn er optaget! Vælg et nyt.";
Avatar billede salle Nybegynder
17. marts 2004 - 12:30 #6
hvis jeg tilføjer den kode
for jeg:
Dit brugernavn er optaget! Vælg et nyt.
inden jeg har tastet noget ind
Avatar billede muddi Praktikant
17. marts 2004 - 14:23 #7
Den her kode er afprøvet og den virker:



<?
$db = mysql_connect("localhost", "xxxxxx", "xxxxxx");
mysql_select_db("test", $db);


if ($_POST['reg'])
{
    $brugernavn = $_POST['brugernavn'];
    $adgangskode = $_POST['adgangskode'];
    if(mysql_query("INSERT INTO medlemmer (brugernavn, adgangskode)
                VALUES('$brugernavn', '$adgangskode')"))
        print "Alt gik fint!";
    else
        print "Det navn er optaget, vælg et andet!";
}
?>


<form method="post" action="reg.php">
    <input type="hidden" name="reg" value="1">
    <input type="text" name="brugernavn"><br>
    <input type="password" name="adgangskode"><br>
    <input type="submit" value="send">
</form>

<? $medlemsliste = mysql_query("SELECT brugernavn, adgangskode  FROM medlemmer ORDER BY brugernavn DESC");
while($data = mysql_fetch_row($medlemsliste))
{
    echo "$data[0]<br>";
    echo "$data[1]<br><hr>";
}
?>
Avatar billede muddi Praktikant
17. marts 2004 - 14:35 #8
Jeg vil faktisk anbefale dig at bruge

INSERT INTO medlemmer (brugernavn, adgangskode)
VALUES('$brugernavn', MD5('$adgangskode'))

Så passwords er beskyttet. Bare som en ekstra sikkerhed. Du skal så blot huske at bruge MD5 igen når du henter passwords.
F.eks.:

SELECT brugernavn
FROM medlemmer
WHERE (brugernavn = '$brugernavn') &&
      (adgangskode = MD5('$adgangskode'))

Passwords er jo tit også hemmelige for dig som admin(!)
Avatar billede muddi Praktikant
17. marts 2004 - 14:44 #9
Her er min endelige løsning. Har også lige tilføjet addslashes til de inputs der er til databasen.

<?
$db = mysql_connect("localhost", "root", "tmp33dce");
mysql_select_db("test", $db);


if ($_POST['reg'])
{
    $brugernavn = addslashes($_POST['brugernavn']);
    $adgangskode = addslashes($_POST['adgangskode']);
    if(mysql_query("INSERT INTO medlemmer (brugernavn, adgangskode)
                VALUES('$brugernavn', MD5('$adgangskode'))"))
        print "Alt gik fint!";
    else
        print "Det navn er optaget, vælg et andet!";
}
?>


<form method="post" action="reg.php">
    <input type="hidden" name="reg" value="1">
    <input type="text" name="brugernavn"><br>
    <input type="password" name="adgangskode"><br>
    <input type="submit" value="send">
</form>

<? $medlemsliste = mysql_query("SELECT brugernavn, adgangskode  FROM medlemmer ORDER BY brugernavn DESC");
while($data = mysql_fetch_row($medlemsliste))
{
    echo "$data[0]<br>";
    echo "$data[1]<br><hr>";
}
?>
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
Computerworld tilbyder specialiserede kurser i database-management

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