Avatar billede overisen Novice
13. januar 2005 - 21:09 Der er 18 kommentarer og
1 løsning

Sletning af post

Jeg har en mailliste liggende i accessdatabasen "testdatabase", med tabellen "personoplysninger" og feltet "email"
Tilmeldingen virker fint med følgende kodning:

<%
Set database = Server.CreateObject("ADODB.Connection")
database.Open "DRIVER={Microsoft Access Driver (*.mdb)}; DBQ=" & server.MapPath("db/testdatabase.mdb")
%>
<html>
<body>
<%
set personer = Server.CreateObject("ADODB.Recordset")
personer.Open "SELECT * FROM personoplysninger", database,2,2
%>
<%
personer.AddNew
personer("email")=Request.QueryString("nyemail")
personer.Update
Response.Redirect("takmail.htm")
%>
</body>
</html>

"nyemail" kommer fra indtastningsbilledet og "takmail.htm" er et kvitteringsbillede.

Nu skal man jo helst kunne afmelde sig igen, uden min indblanding. Jeg har forsøgt mig med følgende:

<%
Set database = Server.CreateObject("ADODB.Connection")
database.Open "DRIVER={Microsoft Access Driver (*.mdb)}; DBQ=" & server.MapPath("db/testdatabase.mdb")
%>
<html>
<body>
<%
set personer = Server.CreateObject("ADODB.Recordset")
personer.Open "SELECT * FROM personoplysninger WHERE email = " & Request.QueryString("stopmail"), database,2,2
personer.Delete

Response.Redirect("takafmeldmail.htm")
%>
</body>
</html>

"stopmail" kommer fra indtastningsbilledet
"takafmeldmail.htm" er et kvitteringsbillede.

Jeg kan ikke få afmeldingen til at virke. Hvad skyldes det?

mvh
Søren
Avatar billede kalp Novice
13. januar 2005 - 21:21 #1
Mit slette script


<%option explicit%>

   
<%
    dim connection,id,SQLstringK

    Set Connection = Server.CreateObject("ADODB.Connection")
    Connection.Open "DRIVER={Microsoft Access Driver (*.mdb)}; DBQ="&Server.MapPath("db/testdatabase.mdb")
   

   

id    =        Trim(Request.QueryString("id"))
           
    SQLstringK="DELETE FROM personoplysninger WHERE id="&id
    Connection.Execute(SQLstringK)




   
    connection.close
    set connection= nothing

    response.buffer=true
    response.clear
    response.redirect "takafmeldmail.htm"
    response.end
%>
Avatar billede kalp Novice
13. januar 2005 - 21:21 #2
du skal lige rette det til .. sql sætningen
Avatar billede kalp Novice
13. januar 2005 - 21:21 #3
request er så email i dit tilfælde
Avatar billede thesurfer Nybegynder
13. januar 2005 - 21:32 #4
Når man arbejder med databaser, skal man *altid* teste, om posten findes! :-)

Hvad nu, hvis brugeren indtaster en mail adresse, der ikke findes.. :-)

Der for:

set rs = conn.execute(strSQL)
if not (rs.bof or rs.eof)
' posten er fundet så vi kan godt slette den
else
' posten findes ikke.. skriv en besked til brugeren
end if

' husk at frigør hukommelsen og lukke forbindelsen
Avatar billede kalp Novice
13. januar 2005 - 21:37 #5
thesurfer>> sandt nok hehe men det kan jeg heldigvis ikke komme ud for eftersom jeg bruger det i et "internet" system.. hvor den finder elementer frem fra databasen med id og derfor er jeg sikker på de er der;)

men det selvfølgelig lidt anderledes når folk skal taste noget ind som skal slettes..
Avatar billede overisen Novice
14. januar 2005 - 19:14 #6
Tak for kommentarene. Jeg får en fejl, som jeg tror knytter sig til
id    =        Trim(Request.QueryString("id"))
hvad er det der sker her?. Hvor bliver oplysningen fra indtastningsbilledet gemt?
Avatar billede kalp Novice
14. januar 2005 - 19:19 #7
prøv at ændre

dim connection,id,SQLstringK

til

dim connection,email,SQLstringK


og

id    =        Trim(Request.QueryString("stop"))

til

email    =        Trim(Request.QueryString("stop"))
Avatar billede kalp Novice
14. januar 2005 - 19:20 #8
jeg mener til

email    =        Trim(Request.QueryString("stopmail"))
Avatar billede thesurfer Nybegynder
14. januar 2005 - 20:03 #9
overisen> "jeg får en fejl" kan vi ikke bruge til en hat..
Hvad er fejlen? Hvilken linie? kopier og indsæt fejlmeddelelsen.. heller for meget end for lidt..

Fejlen opstår muligvis fordi Querystring er af typen "tekst", og id er af typen tal.

Derfor skal værdien konverteres til "integer" (helttal): id = CInt(din-kode-her)
Avatar billede overisen Novice
15. januar 2005 - 20:12 #10
Jeg har nu ændret min kodning til følgende:
<%
option explicit
%>
<%
dim Connection,email,SQLstringK
Set Connection = Server.CreateObject("ADODB.Connection")
Connection.Open "DRIVER={Microsoft Access Driver (*.mdb)}; DBQ=" & server.MapPath("db/testdatabase.mdb")
email=Trim(Request.querystring("stopmail"))
SQLstringK="DELETE FROM personoplysninger WHERE email= " & stopmail)   
Connection.Execute(SQLstringK)   
connection.close
set connection= nothing   
response.buffer=true
response.clear
response.redirect("takafmeldmail.htm")
response.end
%>
Jeg får fortsat fejlen: HTTP 500 - Intern serverfejl
Internet Explorer
Fejlen opstår tilsyneladende fra og med linien:
SQLstringK="DELETE FROM personoplysninger WHERE email= " & stopmail)
Jeg har undersøgt om emailadressen i "stopmail" kommer over fra indtastningsbilledet. Det er ok.
Avatar billede kalp Novice
15. januar 2005 - 20:15 #11
overisen>>

Gør lige følgende i IE

Tryk på Funktioner - InternetIndstillinger - Avanceret
og fjern hak i "Vis meddelselse om uskadelig HTTP-fejl"

kør scriptet igen og sig hvad fejlen er
Avatar billede thesurfer Nybegynder
15. januar 2005 - 20:53 #12
Er "email" af typen tekst? Hvis ja: WHERE email= '" & stopmail & "'")
Avatar billede overisen Novice
15. januar 2005 - 23:06 #13
email er af typen tekst
nu kommer fejlen:
An error occurred on the server when processing the URL. Please contact the system administrator.
Avatar billede overisen Novice
16. januar 2005 - 13:30 #14
Hvis jeg skriver
SQLstringK="DELETE FROM personoplysninger WHERE id=32"
slettes linie 32
hvis jeg derimod skiver:
SQLstringK="DELETE FROM personoplysninger WHERE email= 'xx@mail.dk'"
(xx@mail.dk findes naturligvis i feltet email)
kommer fejlen:
An error occurred on the server when processing the URL. Please contact the system administrator.
hvorfor mon det?
Avatar billede kalp Novice
16. januar 2005 - 13:35 #15
det ved thesurfer nok:)
Måske man ellers kunne den til at finde email'en i databasen først.. returnere ID'et og slette.
Avatar billede thesurfer Nybegynder
16. januar 2005 - 17:42 #16
Det er ikke en fejl jeg har set før..

Prøv: WHERE [email]= 'xx@mail.dk'"
Avatar billede overisen Novice
17. januar 2005 - 10:30 #17
Ja, se hjalp noget på det
hvis du bruger
SQLstringK="DELETE FROM personoplysninger WHERE [email]= 'xx@mail.dk'
slettes linien fra databasen som ønsket

hvis jeg så bruger
SQLstringK="DELETE FROM personoplysninger WHERE [email]= '" & stopmail & "'"
kommer der ingen fejl, men linien slettes desværre heller ikke.
Avatar billede thesurfer Nybegynder
18. januar 2005 - 12:39 #18
Det er farligt at bruge Request.Querystring, uden at checke værdien.. brugeren kan nemlig manipulere urlen.. det samme med Request.Form.

Test lige engang:

response.write "*" & stopmail & "*"
response.end

Hvis den bare skriver "**", indeholder stopmail ingenting.. så vil sql sætningen være:

where [email] = ''
Avatar billede overisen Novice
01. marts 2012 - 06:12 #19
ok
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