Avatar billede 12tri Nybegynder
27. december 2001 - 17:25 Der er 22 kommentarer og
1 løsning

undersøg om værdi findes i database

Hej eksperter. Jeg har et forum, som virker ved hjælp af en access database. Jeg har lavet en tabel som hedder forummail, hvor jeg gemmer oplysninger om hvilke email adresser som skal modtage en mail når der svares på et givent indlæg, ligesom på eksperten. Jeg bruger følgende kode til at indsætte oplysninger i tabellen:

if Request.form(\"email\") <> \"\" then
strSQL = \"Insert into forummail (\"
strSQL = strSQL & \"mail, \"
strSQL = strSQL & \"indlaegid) \"
strSQL = strSQL & \"values( \"
strSQL = strSQL & \"\'\" & strCorrect(Request.form(\"email\")) & \"\', \"
strSQL = strSQL & \"\'\" & strCorrect(Request.form(\"indlaegid\")) & \"\')\"
objConn.Execute(strSQL)
objconn.close
set objconn = nothing
end if

Og det virker fint, men der dog et problem med overstående, nemlig hvis den samme person svarer flere gange på et indlæg, så tilføjes denne person til mail tabellen igen, og modtager nu to mails når nogen svarer efter ham.

Det må kunne undgås hvis man undersøgte om en given emailadresse er tilføjet til tabellen med et givent indlaegid. Men hvordan man kan gøre dette, ved jeg ikke.

Det jeg ønsker der derfor en metode til, at undersøge om en emailadresse allerede er tilføjet, og derfor modtager mails fra, et bestemt indlaegid. 

Det er lidt svært at forklare, så hvis i har spørgsmål, så stil dem roligt

Morten // morten@12tri.dk
Avatar billede mrbarnes Nybegynder
27. december 2001 - 17:53 #1
\' først con til database eksempelvis nedenstående
Set Conn = Server.CreateObject(\"ADODB.Connection\")
DSN = \"DRIVER={Microsoft Access Driver (*.mdb)}; \"
DSN = DSN & \"DBQ=\" & Server.MapPath(\"/cgi-bin/database.mdb\")
Conn.Open DSN

\' herefter undersøger du i SQL om den er tom eller ej...
\' også indsætter du din egen kode hvis den ikke er tom

SQL = \"Select * FROM forummail WHERE mail = \'\" & Request.form(\"email\") & \"\'\"
Set RS = Conn.Execute(strSQL)
IF RS(\"email\") <> \"\" THEN
if Request.form(\"email\") <> \"\" then
strSQL = \"Insert into forummail (\"
strSQL = strSQL & \"mail, \"
strSQL = strSQL & \"indlaegid) \"
strSQL = strSQL & \"values( \"
strSQL = strSQL & \"\'\" & strCorrect(Request.form (\"email\")) & \"\', \"
strSQL = strSQL & \"\'\" & strCorrect(Request.form(\"indlaegid\")) & \"\')\"
objConn.Execute(strSQL)
objconn.close
set objconn = nothing
end if
else
if Request.form(\"email\") <> \"\" then
strSQL = \"Insert into forummail (\"
strSQL = strSQL & \"mail, \"
strSQL = strSQL & \"indlaegid) \"
strSQL = strSQL & \"values( \"
strSQL = strSQL & \"\'\',\"
strSQL = strSQL & \"\'\" & strCorrect(Request.form(\"indlaegid\")) & \"\')\"
objConn.Execute(strSQL)
objconn.close
set objconn = nothing
end if

END IF
conn.close
SET conn = nothing

Avatar billede azezazez Nybegynder
27. december 2001 - 17:56 #2
hmm. har lavet dette...

noget med at du chekke om den findes ved at lave et udtræk med noget i stil select ... where mail (den adresse som står i db) = mail (den som personen har indtastet og som du nu har gemt i en variabel)...

hvis du så bruger en if løkke..
if mail <> mail then...

håber du kan bruge dette...
Avatar billede 12tri Nybegynder
27. december 2001 - 18:00 #3
Kigger lige poå det , vender tilbage senere
Avatar billede mrbarnes Nybegynder
27. december 2001 - 18:31 #4
ellers spørg du bare hvis du skal havde noget uddybet...
Avatar billede 12tri Nybegynder
27. december 2001 - 18:45 #5
i den kode du viser, undersøger du ikke kun om emailadressen findes i tabellen i forvejen ???

Hvis dette er tilfældet er det ikke nok. Fordi den enkelte bruger kan jo godt have ønsket at modtage mails fra flere id\'s.

Morten
Avatar billede mrbarnes Nybegynder
27. december 2001 - 18:51 #6
Så tjek på ID-nummeret istedet f.eks.

IF RS(\"ID\") = ID THEM

Lav en løkke omkring IF-sætning som løber alle Records igennem...
Avatar billede 12tri Nybegynder
27. december 2001 - 19:08 #7
Jamen andre brugere kan jo have ønsket at modtage en mail med det samme id.

Jeg er nødt til at undersøge om der er et rs med både den mail og det id som det jeg skal til at indsætte.
Avatar billede mrbarnes Nybegynder
27. december 2001 - 19:08 #8
Morten skal jeg lave koden for dig, så giv mig lige 1-2 times tid så er jeg tilbage...
Avatar billede 12tri Nybegynder
27. december 2001 - 19:16 #9
Kan man evt lave en sql ala dette

SQL = \"Select * FROM forummail WHERE mail = \'\" & Request.form(\"email\") & \"\'\" AND indlaegid = \'\" & Request.form(\"indlaegid\") & \"\'\"

og hvis denne sql ikke giver noget udfald så kan men vel antage at det er forsvarligt at tilføje brugeren til at modtage enmail. 

Men hvor dan programerer jeg det ? - Jeg er elendig til database behandling
Avatar billede 12tri Nybegynder
27. december 2001 - 19:17 #10
mrbarnes --> du må meget gerne prøve at lave et udkast. Det vil bår vær dæjlig
Avatar billede 12tri Nybegynder
27. december 2001 - 19:18 #11
Jeg kigger ind igen senere
Avatar billede 12tri Nybegynder
27. december 2001 - 19:31 #12
Okay, jeg er først ved at forstå den kode nu. Og jeg tror faktisk den virker, men jeg kan ikke selv få den til det. Jeg tror der er bedst at finde alle de rs som har indlaegid = det id som vi har Eks:

SQL = \"Select * FROM forummail WHERE indlaeg = \'\" & Request.form(\"indlaeg\") & \"\'\"
Set RS = Conn.Execute(strSQL)

Og hvis man så undersøget om der findes et rs som indeholder den emailadresse som vi vil tilføje, måske noget ala:

Do
If rs(&#8220;mail&#8221;) <> Request.form(\"mail\") then
Mail_ok = 1
End if
Loop

Og hvis mail_ok = 1 tilføjes personen til db&#8217;en:

If Mail_ok = 1 then

Kode til indsættelse I database&#8230;

Kan man ikke gøre det sådan, eller måske lettere???
Avatar billede mrbarnes Nybegynder
27. december 2001 - 19:52 #13
Hvad mener du med rs(&#8220;mail&#8221;) og database&#8230;


skulle jeg kigge eller har du løst det?
jeg er lidt i tvivl med din kodesætning - men ja det var noget i den stil jeg ville løse det...
Avatar billede 12tri Nybegynder
27. december 2001 - 20:14 #14
&#8220; det var fordi jeg skrev det i word, det betyder bare \' eller \"

Jeg har selv lavet følgende kode, men det virker ikke, så hvis du gidder at kigge på det vil jeg blive meget glad:

if Request.form(\"email\") <> \"\" then

strSQL = \"Select * FROM forummail WHERE indlaegid = \" & Request.form(\"indlaegid\") & \"\"
Set rs = objConn.Execute(strSQL)
if rs(\"id\") <> \"\" then
response.write \"\" & rs(\"id\")
else
mail_ok = 1
end if

Do While Not rs.EOF or rs.BOF
If rs(\"mail\") <> Request.form(\"mail\") then
Mail_ok = 1
End if
rs.MoveNext
Loop

If Mail_ok = 1 then
strSQL = \"Insert into forummail (\"
strSQL = strSQL & \"mail, \"
strSQL = strSQL & \"indlaegid) \"
strSQL = strSQL & \"values( \"
strSQL = strSQL & \"\'\" & strCorrect(Request.form(\"email\")) & \"\', \"
strSQL = strSQL & \"\'\" & strCorrect(Request.form(\"indlaegid\")) & \"\')\"
objConn.Execute(strSQL)
objconn.close
set objconn = nothing
end if
end if
Response.Redirect \"show.asp?id=\" & Request.form(\"indlaegid\")
%>
Avatar billede mrbarnes Nybegynder
27. december 2001 - 21:14 #15
<%

  FUNCTION strCorrect(strVariable)
    strCorrect = strVariable
  END FUNCTION

  \' Placering af databasen
  strStien = Server.MapPath(\"database.mdb\")
 
  \' Henter fra formularen af
  Request.form(\"email\")
  Request.form(\"indlaegid\")
 
  \' Foerst Connectes til databasen
  Set Connnection = Server.CreateObject(\"ADODB.Connection\")
  DSN = \"DRIVER={Microsoft Access Driver (*.mdb)}; DBQ=\" & strStien
  Connnection.Open DSN 

  SQL = \"Select * FROM Forummail WHERE mail = \'\" & strEmail & \"\' and indlaegid = \'\" & strIndlaegId & \"\'\"
  Set RS = Connnection.Execute(SQL)
 
  IF RS.EOF AND strEmail <> \"\" THEN
    strSQL = \"Insert into forummail (\"
    strSQL = strSQL & \"mail, \"
    strSQL = strSQL & \"indlaegid) \"
    strSQL = strSQL & \"values( \"
    strSQL = strSQL & \"\'\" & strCorrect(strEmail) & \"\', \"
    strSQL = strSQL & \"\'\" & strCorrect(strIndlaegId) & \"\')\"
    Connnection.Execute(strSQL)
  END IF
  Connnection.close
  SET Connnection = nothing
%>
Avatar billede mrbarnes Nybegynder
27. december 2001 - 21:18 #16
Ovenstående skulle løse det...

Function er kun fordi du bruger den til et eller andet udskift den med din egen...

Det samme med connection til  databasen...

håber det virker...
Avatar billede 12tri Nybegynder
27. december 2001 - 22:23 #17
strSQL = \"Select * FROM forummail where mail = \" & Request.form(\"email\") & \" AND indlaegid = \" & Request.form(\"indlaegid\") & \"\"

Set rs = objConn.Execute(strSQL) \' linie 31 er her

Giver fejlen:

Microsoft JET Database Engine fejl \'80040e14\'

Der er en syntaksfejl, fordi der mangler en operator. i forespørgselsudtrykket \"mail = morten@mail.dk AND indlaegid = 271\".

/forum/response.asp, linje 31


Avatar billede 12tri Nybegynder
27. december 2001 - 22:35 #18
Tak det virker fint nu
Avatar billede 12tri Nybegynder
27. december 2001 - 22:36 #19
Pis nu laven den fejl igen - satans !!!
Avatar billede 12tri Nybegynder
27. december 2001 - 22:38 #20
Se venligst http://www.eksperten.dk/spm/151340

Hvis du kan løse den så er du en skat
Avatar billede mrbarnes Nybegynder
28. december 2001 - 07:29 #21
Virker det ikke 12tri eller hvordan med det og hvad er fejlen helt nøjagtigt nu?
Avatar billede mrbarnes Nybegynder
28. december 2001 - 07:38 #22
Har du en email adresse så kan jeg mail dig mine testfiler som virker...
Avatar billede 12tri Nybegynder
28. december 2001 - 13:18 #23
mrbarnes --> nerderst på : http://www.eksperten.dk/spm/151340 har jeg skrevet noget til dig. Tak for hjælpen
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