13. januar 2005 - 21:09Der 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
I lang tid har samarbejdsbranchen fokuseret på at forbedre enhedsfunktioner – bedre kameraer, klarere lyd og smartere software. Men den virkelige forvandling handler ikke om funktioner.
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
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..
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?
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)
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.
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?
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.
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.