Avatar billede morten_soegaard Nybegynder
07. oktober 2004 - 21:49 Der er 38 kommentarer og
1 løsning

Slette fra database

Hej
Jeg er ved at lave en funktion så jeg kan slette nogle ting fra min database. Jeg kan ikke helt se hvad der er galt med dette script.

<--tilfoj.asp---> Filen hvor man skal vælge hvad der skal slettes

<form action"slet.asp">
<%


Set my_conn = Server.CreateObject("ADODB.Connection")
my_conn.Open "Driver={MySQL ODBC 3.51 Driver}; Server=localhost; Database=miniklub_mv_dk; UID=miniklub_mv_dk; PWD=midtvest;"

strSQL = "SELECT * FROM kalender"

Set rs = my_conn.Execute(strSQL)

if rs.eof then
response.write "Der er ikke noget i databasen"
end if

Do while not rs.eof
%>
<table border="1" class="kalender" cellspacing="1" cellpadding="0" bordercolorlight="#000000" bordercolordark="#FFFFFF">
<tr>
<td width="80px">
<%Response.Write " " & rs("dato") & "<br>"%>
<%Response.Write " " & rs("id")%>
<input name="slet" type="checkbox" value="<% rs("id") %>">
</td>
<td width="250px">
<% Response.Write " "& rs("tekst") & "<br>" %>
</td>
</tr>


<% rs.MoveNext
loop %>

</table>

<%
my_conn.close ' Close database connection
Set my_conn = nothing 'obj variable released
%>
<input name="submit" type="submit" value="Slet">
</form>


<---slet.asp---->

<body>
<%
Set my_conn = Server.CreateObject("ADODB.Connection")
my_conn.Open "Driver={MySQL ODBC 3.51 Driver}; Server=localhost; Database=miniklub_mv_dk; UID=miniklub_mv_dk; PWD=midtvest;"

SQLstmt = "DELETE * FROM kalender WHERE ID=" & Request.Form("id")

Conn.Execute (SQLstmt)



conn.Close
Set conn = nothing
Set SQLstmt = nothing

response.redirect ("kalender.asp")
%>

</body>


Problemet er når jeg har valgt hvilken en jeg vil slette, loop'er den bare til den samme side som man er på.
Du kan se det på www.miniklub-mv.dk/kalender/tilfoj.asp

Håber i kan hjælpe

Mvh Morten
Avatar billede erikjacobsen Ekspert
07. oktober 2004 - 21:53 #1
Ihvert fald ret
SQLstmt = "DELETE * FROM kalender WHERE ID=" & Request.Form("id")
til
SQLstmt = "DELETE FROM kalender WHERE ID=" & Request.Form("id")
Avatar billede eagleeye Praktikant
07. oktober 2004 - 21:53 #2
Prøv at rette denne linje:
<form action"slet.asp">

til denne så den bruger method="post":
<form action"slet.asp" method="post">


Samt rette denne linje:
SQLstmt = "DELETE * FROM kalender WHERE ID=" & Request.Form("id")

til dette så den bruger in metoden og ikke = dda man sikkert kan vælge mere end en at slette ad gangen:

SQLstmt = "DELETE FROM kalender WHERE ID in (" & Request.Form("id") & ")"
Avatar billede erikjacobsen Ekspert
07. oktober 2004 - 21:54 #3
Og ret
<form action"slet.asp">
til
<form action="slet.asp" method="post">
Avatar billede erikjacobsen Ekspert
07. oktober 2004 - 21:55 #4
Og du har ikke et "id" men et "slet" i din form.
Avatar billede morten_soegaard Nybegynder
07. oktober 2004 - 21:58 #5
Det har jeg prøvet at rette nu og det hjælper ik rigtig...
Avatar billede eagleeye Praktikant
07. oktober 2004 - 22:01 #6
Har du rette de to sidste ting erikjacobsen skrev?
Avatar billede morten_soegaard Nybegynder
07. oktober 2004 - 22:02 #7
Det han skrevet med "Og du har ikke et "id" men et "slet" i din form" ? For det forstod jeg egentlig ik helt.
Avatar billede morten_soegaard Nybegynder
07. oktober 2004 - 22:04 #8
Arh nu kan jeg se hvad der er galt.
Har rettet det nu og så giver den fejlen:

Microsoft VBScript runtime error '800a01a8'

Object required: 'Conn'

/kalender/slet.asp, line 16

I linje 16 står der Conn.Execute (SQLstmt)
Avatar billede erikjacobsen Ekspert
07. oktober 2004 - 22:04 #9
Ret
<input name="slet" type="checkbox" value="<% rs("id") %>">
til
<input name="id" type="checkbox" value="<% rs("id") %>">
Avatar billede eagleeye Praktikant
07. oktober 2004 - 22:05 #10
din connection hedder ikke Conn men my_conn så prøv at skrive det som:

my_conn.Execute (SQLstmt)
Avatar billede erikjacobsen Ekspert
07. oktober 2004 - 22:05 #11
my_conn.Execute (SQLstmt)
Avatar billede eagleeye Praktikant
07. oktober 2004 - 22:05 #12
det samme gælder for de to næste linjer:
conn.Close
Set conn = nothing

der skal også et my_ ind
Avatar billede erikjacobsen Ekspert
07. oktober 2004 - 22:07 #13
4 øjne ser bedre end 2 ... ;)
Avatar billede morten_soegaard Nybegynder
07. oktober 2004 - 22:07 #14
Jeg prøver...
Avatar billede morten_soegaard Nybegynder
07. oktober 2004 - 22:10 #15
Så kommer fejlen:

ADODB.Connection.1 error '80004005'

SQLState: 42000
Native Error Code: 1064
[TCX][MyODBC]You have an error in your SQL syntax near ')' at line 1


/kalender/slet.asp, line 17
Avatar billede erikjacobsen Ekspert
07. oktober 2004 - 22:14 #16
Din value er tom
<input name="id" type="checkbox" value="">
Hvorfor mon?
Avatar billede erikjacobsen Ekspert
07. oktober 2004 - 22:14 #17
Prøv
<input name="slet" type="checkbox" value="<%= rs("id") %>">
Avatar billede erikjacobsen Ekspert
07. oktober 2004 - 22:15 #18
Altså
<input name="id" type="checkbox" value="<%= rs("id") %>">
Avatar billede eagleeye Praktikant
07. oktober 2004 - 22:17 #19
arh ja, godt set :)
Avatar billede morten_soegaard Nybegynder
07. oktober 2004 - 22:19 #20
Det hjalp ik... Hmm.... Det virker lidt mystisk
Avatar billede erikjacobsen Ekspert
07. oktober 2004 - 22:21 #21
Joh, der slettes da.
Men du får
Header Error

/kalender/slet.asp, line 24

The HTTP headers are already written to the client browser. Any HTTP header modifications must be made before writing page content.
Avatar billede erikjacobsen Ekspert
07. oktober 2004 - 22:22 #22
Din slet.asp skal kun indeholde fra
<%
tli
%>
og ingen linier før (eller efter)
Avatar billede morten_soegaard Nybegynder
07. oktober 2004 - 22:22 #23
Det er da rigtigt... Arh det er vel bare en <% Response.buffer=true %> der skal indsættes er det ik?
Avatar billede eagleeye Praktikant
07. oktober 2004 - 22:22 #24
Det fordi du har skrevet <html> tags til browseren før du redirecter.

Prøv at fjerne de HTML tags eller tilføje denne linje i toppen af filen

<% response.buffer=true %>
Avatar billede morten_soegaard Nybegynder
07. oktober 2004 - 22:23 #25
Det virker nu når jeg har indsat det... Så det var da fint.
Avatar billede morten_soegaard Nybegynder
07. oktober 2004 - 22:24 #26
Vil i ik være så venlige at sende en tilbage så jeg kan give jer nogle points?
Avatar billede eagleeye Praktikant
07. oktober 2004 - 22:24 #27
Jo da her er mit svar :)
Avatar billede erikjacobsen Ekspert
07. oktober 2004 - 22:24 #28
Og den rigtige løsning er at fjerne alt HTML. Det er jo netop ikke en
HTML-side i og med den kun laver beregninger og redirecter. Det er spild
af kræfter at lave den HTML, som ingen alligevel ser.
Avatar billede erikjacobsen Ekspert
07. oktober 2004 - 22:25 #29
Jeg samler ikke på point, tak.
Avatar billede morten_soegaard Nybegynder
07. oktober 2004 - 22:27 #30
Fair nok... Så får du dem bare eagleeye...

Har i et forslag til hvordan jeg kan lave sådan at jeg vælger hvor de skal stå i forhold til hinaden, altså den hvor dato der er kortest tid til står øverst. ?
Avatar billede eagleeye Praktikant
07. oktober 2004 - 22:30 #31
Du kan sortere posterne når du henter dem, med en order by så denne:
strSQL = "SELECT * FROM kalender"

Bliver til, denne når der står desc kommer den nyeste først:

strSQL = "SELECT * FROM kalender order by dato desc"
Avatar billede erikjacobsen Ekspert
07. oktober 2004 - 22:31 #32
Den "order by" virker nu ikke når du har datoen på den form. Kun hvis
det er 2004-10-07, og så bør du bruge et DATE felt i tabellen.
Avatar billede morten_soegaard Nybegynder
07. oktober 2004 - 22:33 #33
Ja okay. Men det er ikke helt sådan systemet med datoerne er. Det er lidt tilfældigt hvornår jeg ligger dem ind.. Det skal jeg lige ha fundet ud af hvordan jeg kan gøre det.
Avatar billede morten_soegaard Nybegynder
07. oktober 2004 - 22:36 #34
erikjacobsen:
Det ku jeg jo godt lave om nu ku jeg ik?

Ku man ik lave formatet på en anden måde eller vil det blive for besværligt?
Avatar billede erikjacobsen Ekspert
07. oktober 2004 - 22:41 #35
Da kan kun sortere i MySql (i hvert fald effektivt...) hvis formatet er 2004-10-07,
så det synes jeg da du skal have som format. Det giver dig også mulighed for
udtræk baseret fx på dags dato direkte i din sql-sætning.

Du skal så sikkert vise den anderledes til brugeren, og der kan du bruge PHP
til at skrive den anderledes.
Avatar billede morten_soegaard Nybegynder
07. oktober 2004 - 22:43 #36
Okay, jeg programmere så i ASP. Dvs. jeg laver den om i databasen til date og lader den sortere by date. Hvordan siger du så jeg skriver den anderledes til brugeren?
Avatar billede erikjacobsen Ekspert
07. oktober 2004 - 22:44 #37
Nå ja, ASP. Jeg er nok ikke den rette til at fortælle dig hvordan man gør det pænt og smart i ASP.
Avatar billede morten_soegaard Nybegynder
07. oktober 2004 - 22:47 #38
Okay... Men nu virker det hvertfald os med sortering bare med den forkert datoformat...

Du for mange tak for hjælpen endnu engang.
Avatar billede eagleeye Praktikant
07. oktober 2004 - 22:51 #39
du kan også sortere på ID det højste id er den nyeste.

Hvis du ændre kolonne typen til DATE så skal du gemme datoen som yyyy-mm-dd via SQL sætningen. Når du udksirver fra recordsetet skulle det gerne tilpasse sig det format serveren køre. Eller er det hurtigt klaret med FormatDateTime funktionen.
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