Avatar billede dakar2004 Nybegynder
09. december 2008 - 21:57 Der er 7 kommentarer og
1 løsning

multisletning med checkboxe 2

Jeg har fået den her stump kode af mitbrugernavn herinde på side, dog vil det ikke som jeg helt vil

<form name="form1" method="post" action="">
<input type="checkbox" name="id" value="1"><br>
<input type="checkbox" name="id" value="2"><br>
<input type="checkbox" name="id" value="3"><br>
<input type="checkbox" name="id" value="4"><br>
<input type="checkbox" name="id" value="5"><br>
<input type="submit" name="Submit" value="Submit">

</form>
<%
value_checkbox = request("id")
if value_checkbox <> "" then
arr = split(value_checkbox,",")
for a = 0 to ubound(arr)
response.write "slet id " & arr(a) & "<br>" 'dette bare en udskrivning
slet_id = arr(a)
'her sætter du så din slet ind (alle 7 linier selvfølgelig)
sletdet.CommandText = "DELETE FROM emailblock  WHERE mailblockid = " + slet_id + ""

next
end if
%>

altså i mine checkboxe står der som værdi:
<%=(Recordset1.Fields.Item("testid").Value)%>

og min form action er sat til: test2.asp

og test2.asp indeholder følgende:

<%
value_checkbox = request("testid")
if value_checkbox <> "" then
arr = split(value_checkbox,",")
for a = 0 to ubound(arr)
response.write "slet id " & arr(a) & "<br>" 'dette bare en udskrivning
slet_id = arr(a)
'her sætter du så din slet ind (alle 7 linier selvfølgelig)
set slet = Server.CreateObject("ADODB.Command")
slet.ActiveConnection = MM_eventz_STRING
sletdet.CommandText = "DELETE FROM test  WHERE testid = " & slet_id
slet.CommandType = 1
slet.CommandTimeout = 0
slet.Prepared = true
slet.Execute()

next
end if
%>

er jeg helt gal på den eller hvad, eller skal koden hvor den sletter være på sammen siden som formen eller hvad?
Avatar billede softspot Forsker
09. december 2008 - 22:06 #1
Du kan skyde genvej mht. sletningen ved at benytte dig af at værdier fra en form, som oprinder fra kontroller med ens navn er kommasepareret, hvilket også er formatet for IN-operatoren i SQL. Det vil sige at du kan bruge dette format til at slette valg i en liste af checkbokse:

sql = "DELETE FROM emailblock WHERE id IN (" & value_checkbox & ")"

Forudsat naturligvis at mindst en checkbox er valgt (men det kan man jo validere sig ud af inden man kalder databasen) :-)
Avatar billede softspot Forsker
09. december 2008 - 22:08 #2
og nej, koden til at slette kan sagtens ligge i en anden asp-fil end den hvor formularen ligger, sålænge formularens action-atribut peger på den fil som indeholder koden :-)
Avatar billede dakar2004 Nybegynder
09. december 2008 - 22:18 #3
okay lyder smart softspot, men det vil sige at jeg bare kan sætte det op således:

test.asp indeholder:
      <form name="form1" method="post" action="test2.asp">
        <%
While ((Repeat1__numRows <> 0) AND (NOT Recordset1.EOF))
%>
        <table width="100%" border="0" cellspacing="0" cellpadding="0">
          <tr>
            <td width="50%"><%=(Recordset1.Fields.Item("test").Value)%></td>
            <td width="50%" align="center">
              <input type="checkbox" name="checkbox" value="<%=(Recordset1.Fields.Item("testid").Value)%>">
            </td>
          </tr>
        </table>
        <%
  Repeat1__index=Repeat1__index+1
  Repeat1__numRows=Repeat1__numRows-1
  Recordset1.MoveNext()
Wend
%>
        <table width="100%" border="0" cellspacing="0" cellpadding="0">
          <tr>
            <td align="center">
              <input type="submit" name="Submit" value="Slet">
            </td>
          </tr>
        </table>
      </form>

test2.asp indeholder:

<%@LANGUAGE="VBSCRIPT"%>
<!--#include file="Connections/eventz.asp" -->
<%

if((" & value_checkbox & ") <> "") then slet__MMColParam = (" & value_checkbox & ")

%>
<%

set slet = Server.CreateObject("ADODB.Command")
slet.ActiveConnection = MM_eventz_STRING
slet.CommandText = "DELETE FROM test  WHERE testid IN '" + Replace(slet__MMColParam, "'", "''") + "'"
slet.CommandType = 1
slet.CommandTimeout = 0
slet.Prepared = true
slet.Execute()

%>
Avatar billede dakar2004 Nybegynder
09. december 2008 - 22:24 #4
okay når jeg køre min test.asp får jeg fejl på test2.asp

Fejltype:
Microsoft OLE DB Provider for ODBC Drivers (0x80040E14)
[Microsoft][ODBC Microsoft Access-driver] Der er en syntaksfejl, fordi der mangler en operator. i forespørgselsudtrykket "testid IN ()".
/eventz/test2.asp, line 11
Avatar billede dakar2004 Nybegynder
09. december 2008 - 22:25 #5
test2.asp ser således ud nu:

<%@LANGUAGE="VBSCRIPT"%>
<!--#include file="Connections/eventz.asp" -->
<%

set slet = Server.CreateObject("ADODB.Command")
slet.ActiveConnection = MM_eventz_STRING
slet.CommandText = "DELETE FROM test  WHERE testid IN (" & value_checkbox & ")"
slet.CommandType = 1
slet.CommandTimeout = 0
slet.Prepared = true
slet.Execute()

%>
Avatar billede dakar2004 Nybegynder
09. december 2008 - 22:46 #6
hehe fandt fejlen:

value_checkbox = Request.Form("checkbox")

manglede i toppen af scriptet

smid et svar så får du point...
Avatar billede softspot Forsker
09. december 2008 - 22:56 #7
Velbekomme :-)

Dog vil jeg gerne knytte en kommentar til din brug af Command-objektet. I dette tilfælde, hvor du alligevel strengsammensætter din SQL, er der ikke nogen grund til at benytte command-objektet og alt den opsætning der følger med. Du kan ligeså godt nøjes med at oprette et connection objekt og bare køre din SQL-sætning via conn.execute. Eksempel:

set conn = Server.CreateObject("ADODB.Connection")
conn.Open MM_eventz_STRING
conn.Execute sql

Hvis du vil udnytte command-objektets features og sikkerhed ifht. injections, skal du over i noget af det som mitbrugernavn er inde på - dog bør du anvende genbrug af command-objektet og parametre i stedet. Se evt. på min artikel vedr. parameterisering for command-objektets grunlæggende brug: http://www.eksperten.dk/artikler/1250. Du kan se et eksempel på hvordan man genbruger command-objektet med parametre imod slutningen af artikelen...
Avatar billede softspot Forsker
10. december 2008 - 00:45 #8
Tak for point :)
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