Ga naar inhoud

ASP - Hoe verwijder ik meerdere records uit een tabel?


anoniem

Aanbevolen berichten

Ik heb op een webpagina een tabel met x (aantal weet ik dus niet) records. Ik heb een verwijderpagina gemaakt met achter iedere record een checkbox. Onderaan de tabel heb ik een verwijderbutton staan. Ik wil nu een willekeurig aantal records aanvinken en dan in één keer verwijderen door op de verwijderbutton te klikken. Ik maak een array verwijderen() die 2 mogelijke waardes krijgen: "" of "checkbox" Nu wil ik dat in de database de records worden verwijdert met de waardes "checkbox". Hoe doe ik dit?
Link naar reactie
Als je alle checkboxes dezelfde naam geeft dan krijg je bij een submit de waarden komma-gescheiden terug. En deze kan je dan (na controle op geldigheid natuurlijk) gebruiken in een WHERE .. IN constructie. voorbeeld (zonder controle): [code:1:503a779419] sDeleteThis = request.form("checkbox") sQuery = "DELETE FROM table WHERE id IN (" & sDeleteThis & ")" [/code:1:503a779419]
Link naar reactie
Ik snap die "where in" statement niet hemaal. Ik heb het tot nu als volgt gedaan: ----- [b:4f57f57c47]Tabel_records_verwijderen.asp[/b:4f57f57c47] Het aantal records is variabel. Om te bepalen hoeveel records er staan laat ik een teller meelopen bij het ophalen van alle records uit de database. Dan ken ik deze variabele [b:4f57f57c47]a[/b:4f57f57c47] toe aan een [b:4f57f57c47]sessievariabele("aantalRecords")[/b:4f57f57c47] Iedere checkbox krijgt ook een andere naam, namelijk [b:4f57f57c47]"checkbox" & a[/b:4f57f57c47]. Dit wordt dan dus: checkbox1 checkbox2 ... ... checkboxa ----- [b:4f57f57c47]tabel_recors_verwijderen_verwerken.asp[/b:4f57f57c47] Ik haal alle waardes op van de checkboxen, dmv van een loop (dmv de [b:4f57f57c47]sessievariable("aantalRecords").[/b:4f57f57c47] Deze waardes ken ik toe aan een array [b:4f57f57c47]verwijderen(a).[/b:4f57f57c47] Stel ik heb de volgende array: verwijderen(1) = "" verwijderen(2) = "checkbox" verwijderen(3) = "" verwijderen(4) = "checkbox" verwijderen(5) = "" verwijderen(6) = "" De 2e en 4e record moeten dus verwijderd worden. En hier zit hem het probleem. 2e en 4e hoeven niet gelijk te zijn aan Id = 2 en Id = 4 Hoe los ik dit op?
Link naar reactie
Het probleem is opgelost. Ik heb de unieke primary key waarde meegegeven als value voor de checkboxen. Ik krijg dan in de verwerkenpagina bijv. de volgende array: verwijderen(1) = "" verwijderen(2) = "" verwijderen(3) = "9" verwijderen(4) = "" verwijderen(5) = "231" verwijderen(6) = "" Records 9 en 231 kunnen dus verwijderd worden. Dan nog even een loop waarin alleen de verwijderen() met een waarde doorgaan naar de SQL-verwijderen statement. E voila. Thanx voor de hulp.
Link naar reactie
[quote:9147ba6c1f="Johant"]Ik snap die "where in" statement niet hemaal. [/quote:9147ba6c1f]Dan proberen we het even te verduidelijken. [quote:9147ba6c1f="Johant"]Iedere checkbox krijgt ook een andere naam, namelijk [b:9147ba6c1f]"checkbox" & a[/b:9147ba6c1f]. [/quote:9147ba6c1f]Tja, dat kan ook maar dan zal je een andere methode moeten volgen. Die ik overigens persoonlijk minder makkelijk vind (zie ook de p.s.). Mijn idee gaat uit van het feit dat als je de checkboxes dezelfde naam geeft, bijv. CB, je alle aangevinkte waarden terugkrijgt als 1 komma-gescheiden string. De value van de checkbox moet dan de primary key uit je tabel zijn (in mijn voorbeeld is dat [color=darkblue:9147ba6c1f][b:9147ba6c1f]id[/b:9147ba6c1f][/color:9147ba6c1f]). Een eigenschap van een checkbox is dat deze alleen voorkomt (met zijn value) in de request als deze is aangevinkt en daarmee maakt het voor het verwerkende script dus helemaal niet uit hoeveel er wel of niet aanwezig zijn op de pagina. [color=darkred:9147ba6c1f]<input type="checkbox" name="CB" value="1" /> <input type="checkbox" name="CB" value="5" /> <input type="checkbox" name="CB" value="13" />[/color:9147ba6c1f] Als alleen de eerste en de derde checkbox aangevinkt worden zal [b:9147ba6c1f][color=darkblue:9147ba6c1f]request.form("CB").value[/color:9147ba6c1f][/b:9147ba6c1f] de waarde [b:9147ba6c1f][color=darkblue:9147ba6c1f]"1, 13"[/color:9147ba6c1f][/b:9147ba6c1f] geven. En deze kan je dan weer perfect gebruiken in je WHERE IN constructie zodat de uiteindelijke query wordt: [color=darkred:9147ba6c1f]DELETE FROM table WHERE id IN (1, 13)[/color:9147ba6c1f] Hiermee zie je ook meteen de problemen die kunnen ontstaan met deze methode. Als er namelijk niets is aangevinkt krijg je deze query na samenvoegen van de losse delen: [color=darkred:9147ba6c1f]DELETE FROM table WHERE id IN ()[/color:9147ba6c1f] En daarom is het wel belangrijk dat je controleert op een geldige waarde (bijvoorbeeld [color=darkblue:9147ba6c1f][b:9147ba6c1f]Len(request.form("CB").value > 0[/b:9147ba6c1f][/color:9147ba6c1f]). Maar ik raad bovendien aan om te controleren of de losse waarden uit alleen numerieke waarden bestaan. Dit kan je natuurlijk makkelijk in een functie stoppen en iets als onderstaande doen: [code:1:9147ba6c1f] <% function ValidateCheckBoxValues(sInput) ' controle uitvoeren en true of false retourneren end function dim CB, sQuery CB = request.form("CB").value if ValidateCheckBoxValues(CB) then sQuery = "DELETE FROM table WHERE id IN (" & CB & ")" ' en query uitvoeren end if %> [/code:1:9147ba6c1f] p.s. als je het overigens op je eigen manier wil doen dan raad ik aan om het session verhaal even te vergeten en gewoon het request.form object af te lopen. Even snel een stukje halve code om het te verduidelijken, de rest mag je een keer (als je daar behoefte in hebt) zelf uitwerken. [code:1:9147ba6c1f] dim item for each item in request.form if Instr(item, "checkbox") > 0 then ' de naam van de input is dus "checkbox..." ' er kan dus iets uitgevoerd worden met deze waarde ' bijv. naar het scherm schrijven response.write item & "=" & request.form(item) & "<br />" end if next [/code:1:9147ba6c1f] p.p.s. succes p.p.p.s. Type en zetfouten voorbehouden ;)
Link naar reactie

Om een reactie te plaatsen, moet je eerst inloggen

Gast
Reageer op dit topic

×   Geplakt als verrijkte tekst.   Herstel opmaak

  Er zijn maximaal 75 emoji toegestaan.

×   Je link werd automatisch ingevoegd.   Tonen als normale link

×   Je vorige inhoud werd hersteld.   Leeg de tekstverwerker

×   Je kunt afbeeldingen niet direct plakken. Upload of voeg afbeeldingen vanaf een URL in

  • Populaire leden

    Er is nog niemand die deze week reputatie heeft ontvangen.

  • Leden

    Geen leden om te tonen

×
×
  • Nieuwe aanmaken...