Avatar billede kimborg Nybegynder
06. maj 2006 - 16:03 Der er 31 kommentarer og
1 løsning

Tjek om brugernavn OG/ELLER email er taget ved tilmelding.

Jeg vil gerne tjekke om brugernavn OG/ELLER email er taget når en bruger tilmelder sig.

Det virker fint nu med brugernavn, har prøvet med følgende men email bliver ikke tjekket:

strSQL = "Select brugernavn From brugere Where brugernavn = '" & Replace(Request.Form("brugernavn"),"'","''") & "'"
Set rs = Conn.Execute(strSQL)

If not rs.eof Then
    Response.Write("<script>java script:alert('Det valgte brugernavn er allerede taget, vælg venligst et andet.')</script>")
    Response.Write "<script>java script:history.back();</script>"
  rs.close
  rs.open "Select Email From brugere Where Email = '" & Replace(Request.Form("Email"),"'","''") & "'"
Elseif not rs.eof Then
    Response.Write("<script>java script:alert('Den valgte mailadresse er allerede brugt af anden bruger, vælg venligst en andet.')</script>")
    Response.Write "<script>java script:history.back();</script>"
Else

strSQL = "Insert into brugere ("

osv................
Avatar billede cyberkox Nybegynder
06. maj 2006 - 16:15 #1
strSQL = "Select brugernavn From brugere Where brugernavn = '" & Replace(Request.Form("brugernavn"),"'","''") & "'"
Set rs = Conn.Execute(strSQL)

If not rs.eof Then
    Response.Write("<script>java script:alert('Det valgte brugernavn er allerede taget, vælg venligst et andet.')</script>")
    Response.Write "<script>java script:history.back();</script>"
  rs.close

else

  strSQL2 = "Select Email From brugere Where Email = '" & Replace(Request.Form("Email"),"'","''") & "'"
  Set rs2 = Conn.Execute(strSQL2)

if not rs2.eof Then
    Response.Write("<script>java script:alert('Den valgte mailadresse er allerede brugt af anden bruger, vælg venligst en andet.')</script>")
    Response.Write "<script>java script:history.back();</script>"
Else

strSQL = "Insert into brugere ("


end if

end if
Avatar billede kimborg Nybegynder
06. maj 2006 - 17:52 #2
Det virker jo perfekt, tak for det.

Smider du lige et svar...
Avatar billede cyberkox Nybegynder
06. maj 2006 - 17:53 #3
Det var skam så lidt ;-)

Og et svar :)
Avatar billede thesurfer Nybegynder
06. maj 2006 - 19:47 #4
Hmm.. hvad med?:

dim brugernavn, email
brugernavn = Replace(Request.Form("brugernavn"),"'","''")
email = Replace(Request.Form("Email"),"'","''")

' opret forbindelse

strSQL = "Select * From brugere Where brugernavn = '" & brugernavn & "' OR Email = '" & email & "'"
Set rs = Conn.Execute(strSQL)

if not rs.eof then
' brugernavn eller email eksisterer

else
' opret ny bruger
end if

' luk forbindelsen


Man kunne jo også vende den om:

Det modsatte af "if not rs.eof then" er "if rs.bof or rs.eof then"

Hvis den er BOF, så er den også EOF.. men man plejer at kontrollere om den er "BOF eller EOF"..


Ang replace af email:
I "email" er vel ingen grund til at erstatte ' med '', da ' ikke er tilladt i email.. :-)

/theSurfer
Avatar billede thesurfer Nybegynder
06. maj 2006 - 19:47 #5
Ang replace af email:
I "email" er vel ingen grund til at erstatte ' med '', da ' ikke er tilladt i email.. :-)
Derfor:
email = Replace(Request.Form("Email"),"'","")

:-)

/theSurfer
Avatar billede cyberkox Nybegynder
06. maj 2006 - 19:56 #6
hmm, thesurfer..

Jeg forstår ikke helt hvorfor du poster et svar der er mere primitivt end det jeg foreslog, når han har sagt at mit var brugbart

:-)
Avatar billede thesurfer Nybegynder
06. maj 2006 - 20:42 #7
Primitivt? Der er da mere effektiv, og bruger garanteret færre ressourcer.

Du laver 2 opslag. Jeg laver kun 1.

Din metode:
- Spørgsmål: eksisterer brugernavnet?
-- Hvis svar er "nej":
--- Spørgsmål: eksisterer emailadressen?
---- Hvis svar er "nej":
----- Opret bruger

Min metode:
- Spørgsmål: eksisterer brugernavnet ELLER email adresse?
-- Hvis svar er "nej" (dvs, hverken brugernavn eller emailadresse eksisterer):
--- Opret bruger

/theSurfer
Avatar billede cyberkox Nybegynder
06. maj 2006 - 21:06 #8
Ja, det er jeg ikk i tvivl om. Men se hans egen struktur. Han vil gerne at man først ser om brugernavnet findes. Gør den ikke det, jamen så ska man tjekke om emailen findes. Dit forslag gir ikke et præcist svar på hvilket objekt der findes i forvejen :-). Så effektivt, tjae ;).

Din metode tager nok ikke så lang tid, men der snakker vi vist om 1/100 sek :)
Avatar billede thesurfer Nybegynder
06. maj 2006 - 21:20 #9
Det synes jeg ikke er logisk.. Så kan man jo registrere flere/uendelige antal bruger til samme email adresse..??

Normalt er det: 1 bruger per email adresse

Hvis der er noget spørgeren ikke er klar over, eller der er en fejl / noget der kan forbedres, så bør man fortælle det.

Jeg svarer ud fra min konklusion, af hvad det er der skal ske ("person vil oprette ny bruger") / spørgeren højst sandsynligt..

Normalt scenarie:

- Personen ønsker at oprette en bruger
- Den ønskede bruger må ikke allerede være oprettet
- Den ønskede email må ikke allerede være benyttet (kan give "problemer" ved "glemt password"-script)
- Hvis begge kriterier er opfyldt (hverken brugernavn eller email er taget), kan brugeren oprettes


Det man kan være lidt i tvivl om, er spørgerens brug af "OG/ELLER"..
Så vi skal egentlig have at vide, hvad præcist hvad det er spørgeren ønsker:

1) 1 bruger per email adresse
2) mange bruger per email adresse

/theSurfer
Avatar billede thesurfer Nybegynder
06. maj 2006 - 21:24 #10
Stavefejl og dårlig grammatik kan forekomme.. :-)

/theSurfer
Avatar billede cyberkox Nybegynder
06. maj 2006 - 21:35 #11
Puha, jeg er træt efter en lang arbejdsdag, så jeg forstår ikke helt hvad du mener med det :) ?

Altså, mit script gir da heller ikke muligheden for at bruge samme email adr. flere gange (altså dit punkt 2). For hvis email findes i forvejen, blir man smidt tilbage.

Prøv at se hvordan kimborg selv har stillet det op. Først tjekker den brugernavn findes, hvis det ikke findes tjekkes der for om emailen findes? Netop som mit script gør :-)
Avatar billede thesurfer Nybegynder
06. maj 2006 - 21:43 #12
Ang "Prøv at se hvordan kimborg selv har stillet det op. Først tjekker den brugernavn findes, hvis det ikke findes tjekkes der for om emailen findes? Netop som mit script gør :-)":

Hvis det er "1 bruger per email adresse", og kimborg ikke kender til "OR" i SQL'en, ville han helt sikkert lave det i 2 trin, som både I begge har gjort.. hvilken så ikke er nødvendigt, og spild af tid/ressourcer på serveren.

Hvis man kan optimere noget, er der ikke nogen grund til at ikke at gøre det, med mindre at det har en negativ effekt.

/theSurfer
Avatar billede thesurfer Nybegynder
06. maj 2006 - 21:44 #13
indlæg = replace(indlæg, "både", "")

/theSurfer
Avatar billede morhan Novice
06. maj 2006 - 22:41 #14
Jeg ville gøre som surfer, og kun lave et opkald til databasen. Hvis man vil kontrollere om det er brugernavnet eller emailen der blev fundet et match på, så er det jo blot at lave en sammenligning:

If rs("username") = username Then
  'brugernavnet findes
Else
  'email findes
End If
Avatar billede kimborg Nybegynder
06. maj 2006 - 23:26 #15
Tak for debatten ;O)
Avatar billede cyberkox Nybegynder
07. maj 2006 - 15:47 #16
Jeg takker for points ;-)

Og ja, så morhan siger, kan man jo gøre som thesurfers skrev og så teste om brugernavet findes som morhan skrev :)
Avatar billede thesurfer Nybegynder
07. maj 2006 - 20:03 #17
..bare for sjov skyld, kunne jeg godt tænke mig at vide, om det var tilladt at have flere brugere på samme email adresse.. :-)

/theSurfer
Avatar billede cyberkox Nybegynder
07. maj 2006 - 20:17 #18
Jeg ved altså ikke hvor du har den idé fra, at der må være flere bruger om en email adr?

Det kan man ingen steder i de scripts der står her på siden.
Avatar billede thesurfer Nybegynder
07. maj 2006 - 20:19 #19
Nej, nemlig.. :-)

Så er det også overflødigt at lave 2 forespørgsler.. man kan derfor nøjes med en SQL der ser sådan ud:

strSQL = "Select * From brugere Where brugernavn = '" & brugernavn & "' OR Email = '" & email & "'"

Hvis der så er mindst 1 post (dvs hverken rs.BOF

/theSurfer
Avatar billede thesurfer Nybegynder
07. maj 2006 - 20:20 #20
Jeg var vist lidt for hurtig på aftrækkeren.. prøver igen:


Nej, nemlig.. :-)

Så er det også overflødigt at lave 2 forespørgsler.. man kan derfor nøjes med en SQL der ser sådan ud:

strSQL = "Select * From brugere Where brugernavn = '" & brugernavn & "' OR Email = '" & email & "'"

Hvis der så er mindst 1 post (dvs hverken rs.BOF eller rs.EOF), er det fordi der er allerede en med det navn/email..

Følgende skal være opfyldt:
- brugernavn må IKKE være brugt før
- emailadresse må IKKE være brugt før

De to ting opfyldes af denne SQL sætning.

/theSurfer
Avatar billede cyberkox Nybegynder
07. maj 2006 - 20:21 #21
Tjae, ikke hvis man gerne vil finde ud af om det er emailen der er optaget jo eller om det er brugernavnet der er det?
Avatar billede thesurfer Nybegynder
07. maj 2006 - 20:26 #22
Jo:

strSQL = "Select * From brugere Where brugernavn = '" & brugernavn & "' OR Email = '" & email & "'"
set rs = Conn.Execute(strSQL)

if not (rs.bof or rs.eof) then

  ' der er en post = brugerenavn eller emailadresse eksisterer allerede

  if rs("brugernavn") = brugernavn then
    ' brugernavn eksisterer allerede
  else
    ' emailadressen eksisterer allerede
  end if

else

  ' hverken brugernavn eller emailadresse eksisterer allerede = opret ny bruger

end if

/theSurfer
Avatar billede thesurfer Nybegynder
07. maj 2006 - 20:28 #23
Man kan også vende den om, hvis man heller vil det:

if rs.bof or rs.eof then
' opret ny bruger

else

  ' eksisterer allerede

  if rs("brugernavn") = brugernavn then
    ' brugernavn eksisterer allerede
  else
    ' emailadressen eksisterer allerede
  end if

end if

/theSurfer
Avatar billede cyberkox Nybegynder
07. maj 2006 - 20:33 #24
Jeg forstår altså slet ikk noget at det her ?
Avatar billede thesurfer Nybegynder
07. maj 2006 - 20:42 #25
Forklaring:


Hent alle poster hvor:
-- brugernavn (i databasen) = brugernavn (det brugeren har indtastet)
eller
-- emailadresse (i databasen) = emailadresse (det brugeren har indtastet)

Hvis en af de indtastede værdier eksisterer i database, returneres hele rækken, der jo indeholder navn og email adresse.
- brugernavn: Kolonnen i databasen hedder "brugernavn", og aflæses med rs("brugernavn")
- emailadresse: Kolonnen i databasen hedder "email", og aflæses med rs("email")

strSQL = "Select * From brugere Where brugernavn = '" & brugernavn & "' OR Email =

set rs = Conn.Execute(strSQL)


Hvis brugernavn ELLER emailadresse eksisterer, vil der jo være mindste 1 post!
Hvis der er mindst 1 post, er vi hverken ved "Before Of File" eller "End Of File",
da vi så står ved posten (den som eksisterer i databasen)
if not (rs.bof or rs.eof) then

  ' der er en post = brugerenavn eller emailadresse eksisterer allerede

    Da der er mindst 1 post i databasen, fanger vi brugernavnet her.
    Vi sammenligner navnet i databasen, med det ønskede brugernavn (det brugeren indtastede)
  if rs("brugernavn") = brugernavn then
      Brugernavnene er ens = det brugernavn brugeren øsnker at bruge, eksisterer allerede i databasen
    ' brugernavn eksisterer allerede
  else
        Hvis brugernavnen IKKE er ens, er det fordi brugernavnene er forskellige, MEN emailadresserne er de samme!
    ' emailadressen eksisterer allerede
  end if

else

    Da betingelsen "not (rs.bof or rs.eof)" ikke blev opfyldet, betyder det at de indtastede oplysninger IKKE blev fundet,
    hvilket betyder at det er et nyt brugernavn og en ny emailadresse
  ' hverken brugernavn eller emailadresse eksisterer allerede = opret ny bruger

end if



/theSurfer
Avatar billede thesurfer Nybegynder
07. maj 2006 - 20:44 #26
strSQL-sætningen blev lige klippet lidt.. men det er den samme fra min andre indlæg.

/theSurfer
Avatar billede cyberkox Nybegynder
07. maj 2006 - 21:05 #27
Altså, jeg forstår godt hvordan det virker :-)

Men det jeg IKKE forstår, er hvad du blir ved med at køre i :-D

Jeg tror vi snakker ret meget forbi hinanden lige nu ?
Avatar billede thesurfer Nybegynder
07. maj 2006 - 21:21 #28
Hehehe..

06/05-2006 19:56:42 - Du kalder mit script for "primitivt" i..
06/05-2006 20:42:40 - Så forklarede jeg scriptet, og kalder det "effektivt"
06/05-2006 21:06:20 - Du misforstår/forstår ikke ideen med min kode.. sikkert pga manglende kode
06/05-2006 21:20:18 - Jeg forklarer logikken bag meningen med opslag i databasen = "validering"
06/05-2006 21:35:36 - Du forstår stadigvæk ikke ideen med min kode
06/05-2006 21:43:02 - Jeg prøver igen på at forklare logikken
06/05-2006 22:41:45 - morhan bekræfter min ide og skriver den manglende kode
07/05-2006 15:47:46 - Nu forstår du koden
07/05-2006 20:03:09 - Jeg var/er interesseret om det er tilladt at have flere brugernavn på emailadressen -- ja det er overflødigt, men hvis svaret er "nej", kan man nøjes med min kode
07/05-2006 20:17:06 - Du bekræfter forrige statement
07/05-2006 20:20:58 - Jeg skriver at man derfor lige så godt kunne bruge min kode i stedet..
07/05-2006 20:21:50 - Nu har du glemt ideen med min kode, som du havde forstået i 07/05-2006 15:47:46
07/05-2006 20:26:10 - Jeg skriver endnu et eksempel, som er mere funktionnelt end tidligere
07/05-2006 20:33:39 - Du skriver en uforståelig kommentar/spørgsmål
07/05-2006 20:42:03 - Jeg skriver en forklaring på hvordan scriptet virker
07/05-2006 21:05:26 - Du spørger mig om hvad det er jeg "blir ved med at køre i"
07/05-2006 21:XX:XX - Nu: Det jeg lige har skrevet :-)

/theSurfer
Avatar billede cyberkox Nybegynder
07. maj 2006 - 21:31 #29
Hahaha, det er godt nok langt ude det her :D

Du har misforstået mig hele vejen igennem. Jeg har godt forstået meningen med dit script, men det jeg ikk forstår, er din kommentar kl. 07/05-2006 20:03:09 ?
Avatar billede thesurfer Nybegynder
07. maj 2006 - 21:33 #30
hehe.. som jeg skrev "ja det er overflødigt".. den var bare en henvisning til 06/05-2006 21:20:18..

Min kode var logisk og at foretrække.. :-)

/theSurfer
Avatar billede cyberkox Nybegynder
07. maj 2006 - 21:43 #31
Jamen det med validering forstår jeg da godt ?

Ej, altså, jeg er slet ikke med.. Jeg har arbejdet AALT for lang tid nu her og sovet AAALT for lidt i nat, så jeg melder mig ud nu, inden det går helt galt det her :D
Avatar billede thesurfer Nybegynder
07. maj 2006 - 21:51 #32
Godnat og sov godt :-)
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
Kurser inden for grundlæggende programmering

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