webForumDet fria alternativet

Användare existerar

ASP

15 svar · 464 visningar · startad av scoxi

Medlem sedan jan. 200460 inlägg
Frågan#1

Jag gör en registreringssida och jag undrar hur man ska skriva för att kolla om användaren redan finns i databasen. Alltså om den finns så går det inte om det går så ska den läggas till. Har fixxat allt annat så det läggs till men man kan ha multiple av t.ex. "scoxi"..
tack på förhand

Medlem sedan nov. 20017 144 inlägg
#2

Du måste skapa en sql-sats för att först räkna förekomsten av användarnamnet innan du skickar in det i databasen.

sql = "select count(kolumnen_usernames) where kolumnen_usernames = '" & Request.form("användarnamn") & "'"
Set rs = conn.execute(sql)
if not cLng(rs(0)) = 0 then
'användarnamnet finns, skicka tebax
else
'användarnamnet finns inte
'lägg till mannen
end if
Medlem sedan aug. 20003 575 inlägg
#3

Ersätt helst eventuella '-tecken också för säkerhets skull.

Medlem sedan maj 200010 687 inlägg
#4

Varför inte bara..?

sql = "select count(kolumnen_usernames) where kolumnen_usernames = '" & Request.form("användarnamn") & "'"
Set rs = conn.execute(sql)
if rs(0) then
'användarnamnet finns, skicka tebax
else
'användarnamnet finns inte
'lägg till mannen
end if

CLng är onödigt eftersom att du får ett tall tillbaka. Sen känns det lite onödigt att använda Not vid jämförning av tal och strängar.

Medlem sedan juni 200032 967 inlägg
#5

Eller bara:

sql = "select 1 [b]from tabellen[/b] where kolumnen_usernames = '" & Request.form("användarnamn") & "'"
Set rs = conn.execute(sql)
if not rs.eof then
    'användarnamnet finns, skicka tebax
else
    'användarnamnet finns inte
    'lägg till mannen
end if

Varför använda count?

mvh

Medlem sedan maj 200010 687 inlägg
#6

Spelar väl ingen roll prestandamässigt i alla fall. I alla fall inte enligt mina tester. :)

Inte för att jag säger att mina ändringar gör någon skillnad så, men det här är mer whatever...
Men jag hade gjort som @nders skrev. :)

Medlem sedan juni 200032 967 inlägg
#7

Nej, jag håller med, det är nog ingen större skillnad.

Det finns ju ett alternativ till:

*) Se till att fältet inte får lagra dubletter
*) Gör insert
*) Fånga eventuellt fel

Mvh

Medlem sedan maj 200010 687 inlägg
#8

Blä, känns som en sak man använder när man gör en enkel lokal applikation eller liknande där saker inte behöver vara helt hundra.

För att sitta och tolka felkoder känns inte bra...

Men att ha en constraint på fältet som hindrar dubletter är vettigt!

Medlem sedan jan. 200460 inlägg
#9

tack så mkt
vart kan jag läsa mer om sql kommandon som: eof, rs(?), clng o allt vad det är?

Medlem sedan juni 200032 967 inlägg
#10

De är inga SQL-kommandon, men du kan läsa en massa fina grejer på http://www.devguru.com/ .

mvh

Medlem sedan juni 200032 967 inlägg
#11

Blä, känns som en sak man använder när man gör en enkel lokal applikation eller liknande där saker inte behöver vara helt hundra.

För att sitta och tolka felkoder känns inte bra...

Helt riktigt. inte av den här anledningen i alla fall!

Men att ha en constraint på fältet som hindrar dubletter är vettigt!

Jepp!

mvh

Medlem sedan maj 200010 687 inlägg
#12

Felkoder och liknande ska spottas in i loggar!
Bara i undantagsfall jag använder dem för någonting annat. :)

Medlem sedan dec. 200012 464 inlägg
#13
För att sitta och tolka felkoder känns inte bra...

Det måste man göra i alla fall så.

Medlem sedan maj 200010 687 inlägg
#14

Umm hur menar du? Jag sitter ju själv och läser fel i loggar och så, men jag känner mig inte bekväm med att programmatiskt tolka felkoder/felbeskrivningar.
Jag gör det bara i undantagsfall.

Medlem sedan jan. 200460 inlägg
#15

Alltså det blir knas när jag ska få in det i resten av koden..

<%

username = Request.Form("username")
password1 = Request.Form("password1")
password2 = Request.Form("password2")

If username = "" OR password1 = "" OR password2 = "" Then

%>
<font color="red" face="verdana" size="1"><b>Du måste fylla i alla fält</b></font>

<%
else

'Öppnar databasen
Set Conn = Server.CreateObject("ADODB.Connection")
Conn.Open "driver={Microsoft Access Driver (*.mdb)};dbq=c:\inetpub\wwwroot\test\anvandare.mdb"

sql = "select count(username) where username = '" & username & "'"
Set rs = conn.execute(sql)
if rs(0) then response.write "upptaget"
'användarnamnet finns, skicka tebax
conn.close
else

Set Conn = Server.CreateObject("ADODB.Connection")
Conn.Open "driver={Microsoft Access Driver (*.mdb)};dbq=c:\inetpub\wwwroot\test\anvandare.mdb"

Add = "INSERT INTO anvandare (username, password) VALUES ( '" & username & "', '" & password1 & "' )"

Conn.Execute(Add)

Conn.Close

Response.Redirect("login.asp")

%> 

<font color="green" face="verdana" size="1"><b>Du är nu medlem. Klicka <a href="login.asp">här</a> för att logga in</b></font>

<%

End if
end if

%>

Felmeddelande:

Feltyp:
Kompileringsfel i Microsoft VBScript (0x800A03F6)
'End' förväntas.
/test/regcheck.asp, line 38
else
Medlem sedan apr. 20031 660 inlägg
#16

HEJ!

Felet står i klartext, du har missat ett end if någonstans.

Gör din kod med klara indrag, så ser du väldigt enkelt var det är fel. Dessutom underlättar det för oss andra wF-ianer om du inte skulle lösa ett problem.

285 ms totalt · 4 externa anrop · v20260731065814-full.a51de22e
126 ms — deklarationer (db)
0 ms — hämta statistik (cache)
141 ms — hämta tråd, inlägg och bilagor (db)
141 ms — ändringar (db)