Op deze website gebruiken we cookies om content en advertenties te personaliseren, om functies voor social media te bieden en om ons websiteverkeer te analyseren. Ook delen we informatie over uw gebruik van onze site met onze partners voor social media, adverteren en analyse. Deze partners kunnen deze gegevens combineren met andere informatie die u aan ze heeft verstrekt of die ze hebben verzameld op basis van uw gebruik van hun services. Meer informatie.

Akkoord

Vraag & Antwoord

Webprogrammeren & scripting

ASP - Hoe verwijder ik meerdere records uit een tabel?

Johant
7 antwoorden
  • 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?
  • 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]
  • 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?
  • 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.
  • [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 [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.

    <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]request.form("CB").value[/color:9147ba6c1f][/b:9147ba6c1f] de waarde [b: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:

    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:

    DELETE FROM table WHERE id IN ()[/color:9147ba6c1f]

    En daarom is het wel belangrijk dat je controleert op een geldige waarde (bijvoorbeeld [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 ;)
  • [quote:412f622f4e="Johant"]Het probleem is opgelost.
    [/quote:412f622f4e]
    aaarrrggghh, en daar kom je nu mee ;)
  • Toch bedankt Annie, ik heb ook weer wat geleerd.
    Je uitleg komt me zeer goed van pas.

Beantwoord deze vraag

Dit is een gearchiveerde pagina. Antwoorden is niet meer mogelijk.