webForumDet fria alternativet

email upptagen

ASP

19 svar · 359 visningar · startad av Gimbo

Medlem sedan dec. 20001 626 inlägg
Frågan#1

Hejsan hur gör man med denna kod för att se om email adressen i databasen finns redan, dvs så att man inte kan posta två inlägg med samma email??

<%
	Set Connect = Server.CreateObject("ADODB.Connection")
	Connect.Open "DRIVER={Microsoft Access Driver (*.mdb)}; DBQ=" & Server.MapPath("databsen.mdb")
%>
<%

	Set RecSet = Server.CreateObject("ADODB.Recordset")
   	Addera = "SELECT * FROM bekrafta"

   	RecSet.Open Addera, Connect, adOpenStatic, adLockOptimistic
	RecSet.AddNew

	RecSet("eNamn") = Request.Form("enamn")
	RecSet("fNamn") = Request.Form("fnamn")
	RecSet("stad") = Request.Form("stad")
	RecSet("mail") = Request.Form("mail")	
	RecSet("info") = Replace(Server.HTMLEncode(Request.Form("info")), chr(13), 		"<BR>", 1)
	RecSet("datum") = Request.Form("datum")
	RecSet("ip") = Request.Form("ip")	

	RecSet.Update
	RecSet.Close
	Connect.Close
	Set Connect = Nothing

Response.Write "du är inlagd i databasen"

%>
Medlem sedan mars 2000542 inlägg
#2

Du kan ju sätta "properties" i Access so att det blir "No duplicates" ligger under "indexed" i design läge.

Men det finns nog något bättre, kan inte asp.

Medlem sedan mars 2000542 inlägg
Medlem sedan mars 20015 287 inlägg
#4

Detta kanske kan fungera:

<%
	Set Connect = Server.CreateObject("ADODB.Connection")
	Connect.Open "DRIVER={Microsoft Access Driver (*.mdb)}; DBQ=" & Server.MapPath("databsen.mdb")
	Set RecSet = Server.CreateObject("ADODB.Recordset")

   	Addera = "SELECT * FROM bekrafta where mail ='" & Request.Form("mail") & "'"

   	RecSet.Open Addera, Connect, adOpenStatic, adLockOptimistic

If RecSet.EOF then

	RecSet.AddNew
	RecSet("eNamn") = Request.Form("enamn")
	RecSet("fNamn") = Request.Form("fnamn")
	RecSet("stad") = Request.Form("stad")
	RecSet("mail") = Request.Form("mail")	
	RecSet("info") = Replace(Server.HTMLEncode(Request.Form("info")), chr(13), 		"<BR>", 1)
	RecSet("datum") = Request.Form("datum")
	RecSet("ip") = Request.Form("ip")	
	RecSet.Update

Response.Write "Du är inlagd i databasen"

Else

Response.Write "Du fanns redan i databasen"

End If

	RecSet.Close
	Connect.Close
	Set Connect = Nothing

%>
Medlem sedan dec. 20001 626 inlägg
#5

Det fungerade den la till en ny post i databsen med samma email ändå, knepigt nu va??

Medlem sedan mars 20015 287 inlägg
#6

Hm, testa flytta ut:

RecSet.Update

utanför If-satsen, eller kanske tom ta bort den.

Medlem sedan dec. 20001 626 inlägg
#7

det fungerar inte att ta bort den eller flytta ut den, om jag tar bort den så får jag fel meddelandet:

ADODB.Recordset fel '800a0c93' 

Åtgärden som programmet begärt är inte tillåten i det här sammanhanget.

om jag flyttar ut den får jag felmeddelandet:

ADODB.Recordset fel '800a0bcd' 

Antingen är BOF eller EOF satt till True, eller så har aktuell post raderats; åtgärden som programmet begärt kräver en aktuell post.

SNälla ngn som kan hjälpa??!!

Medlem sedan mars 20007 896 inlägg
#8

Jag skulle göra så här istället:

set objC = Server.CreateObject ( "ADODB.Connection" )
set objRS = objC.Execute ( "SELECT mail FROM bekrafta WHERE mail = '" & Request.Form ( "mail" ) & "'" )

If objRS.EOF Then
     objC.Execute ( "INSERT INTO bekrafta (eNamn, fNamn, stad, mail, info, datum, ip) VALUES('" & Request.Form ( "enamn" ) & "', '" & Request.Form ( "fnamn" ) & "', '" & Request.Form ( "stad" ) & "', '" & Request.Form ( "mail" ) & "', '" & Request.Form ( "info" ) & "', '" & Request.Form ( "datum" ) & "', '" & Request.Form ( "ip" ) & "'" )
     Response.Write "Du är tillagd"
Else
     Response.Write "Email upptagen"
End If

objRS.Close
set objRS = Nothing
objC.Close
set objC = Nothing

Mindre och snyggare kod, plus att det är ett snabbare alternativ. :)

Medlem sedan dec. 20001 626 inlägg
#9

men går det inte att göra på något sätt så att jag lägger till posterna i databasen på det sättet jag gör, dvs med recset??

Medlem sedan mars 20015 287 inlägg
#10

SPiNs variant är helt klart att föredra.

Medlem sedan dec. 20001 626 inlägg
#11

det fungerar inte, så här ser min kod för att lägga in posten i databasen:

<%
	Set Connect = Server.CreateObject("ADODB.Connection")
	Connect.Open "DRIVER={Microsoft Access Driver (*.mdb)}; DBQ=" & Server.MapPath("databasen.mdb")
%>
<%
set objC = Server.CreateObject ( "ADODB.Connection" )
set objRS = objC.Execute ( "SELECT mail FROM bekrafta WHERE mail = '" & Request.Form ( "mail" ) & "'" )

If objRS.EOF Then
     objC.Execute ( "INSERT INTO bekrafta (eNamn, fNamn, stad, mail, info, datum, ip) VALUES('" & Request.Form ( "enamn" ) & "', '" & Request.Form ( "fnamn" ) & "', '" & Request.Form ( "stad" ) & "', '" & Request.Form ( "mail" ) & "', '" & Request.Form ( "info" ) & "', '" & Request.Form ( "datum" ) & "', '" & Request.Form ( "ip" ) & "'" )
     Response.Write "Du är tillagd"
Else
     Response.Write "Email upptagen"
End If

objRS.Close
set objRS = Nothing
objC.Close
set objC = Nothing
%>

jag får felmeddelandet:

ADODB.Connection fel '800a0e78' 

Åtgärden som programmet begärt är inte tillåten om objektet är stängt.
Medlem sedan dec. 200012 464 inlägg
#12
<%
	Set Connect = Server.CreateObject("ADODB.Connection")
	Connect.Open "DRIVER={Microsoft Access Driver (*.mdb)}; DBQ=" & Server.MapPath("databasen.mdb")
%>
<%
set objRS = connect.Execute ( "SELECT mail FROM bekrafta WHERE mail = '" & Request.Form ( "mail" ) & "'" )

If objRS.EOF Then
     objC.Execute ( "INSERT INTO bekrafta (eNamn, fNamn, stad, mail, info, datum, ip) VALUES('" & Request.Form ( "enamn" ) & "', '" & Request.Form ( "fnamn" ) & "', '" & Request.Form ( "stad" ) & "', '" & Request.Form ( "mail" ) & "', '" & Request.Form ( "info" ) & "', '" & Request.Form ( "datum" ) & "', '" & Request.Form ( "ip" ) & "'" )
     Response.Write "Du är tillagd"
Else
     Response.Write "Email upptagen"
End If

objRS.Close
set objRS = Nothing
connect.Close
set connect = Nothing
%>

Du har blandat ihop dina variabelnamn

Medlem sedan dec. 20001 626 inlägg
#13

LarsG, det fungerar fortfarande inte, lr nu fungerar en del utav koden, dvs när jag knappar in samma mail så skriver den ut att email adressen är upptagen men när jag skriver in en email som inte finns i databasen så får jag detta felmeddelande:

Körningsfel i Microsoft VBScript fel '800a01a8' 

Objekt krävs.: 'objC'
Medlem sedan dec. 19996 721 inlägg
#14

En liten felskrivning bara...

Byt objC i koden mot connect, eller alla connect mot objC

Medlem sedan dec. 20001 626 inlägg
#15

men det finns ju ingen objC i koden som larsG gav mig??

Medlem sedan juni 200032 967 inlägg
#16

Jo, det gör det.

Byt den mot Connect så ska det ordna sig.

Medlem sedan dec. 20001 626 inlägg
#17

okej jag va blind som inte såg det där, måste fixa glasögon för mycket dator sittande verkar det som, men det fungerar fortfarande INTE, jag får följande felmeddelande nu:

Microsoft OLE DB Provider for ODBC Drivers fel '80040e14' 

[Microsoft][Drivrutin för ODBC Microsoft Access] Syntaxfel i INSERT INTO-uttryck.

tabellarna i databasen och allt stämmer överens med det som står i satsen, I dont get it??

Medlem sedan dec. 200012 464 inlägg
#18
connect.Execute "INSERT INTO bekrafta (eNamn, fNamn, stad, mail, info, [datum], ip) " & _
" VALUES('" & Request.Form ( "enamn" ) & "', '" & Request.Form ( "fnamn" ) & "', '" & _
Request.Form ( "stad" ) & "', '" & Request.Form ( "mail" ) & "', '" & Request.Form ( "info" ) & _
"', #" & Request.Form ( "datum" ) & "#, '" & Request.Form ( "ip" ) & "')"
Medlem sedan dec. 20001 626 inlägg
#19

tack lars och alla andra det fungerade, men en fråga lars, vad var felet med insert grejen?? förrutom att ett datum skall innehålla detta tecken #??

Medlem sedan dec. 200012 464 inlägg
#20

Det räcker att # saknas ;)

Sen så var det en avslutande parentes som saknades.

Ordet DATUM kan ställa till problem om man har en svensk access, har jag hört, och därför satte jag det inom []

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