processing mutiple checkbox selections in vbscript

Discussion in 'ASP General' started by .Net Sports, Sep 24, 2009.

  1. .Net Sports

    .Net Sports Guest

    I have a form that on the front end Is dynamically generated by
    drawing records from a database, then each record is displayed with a
    checkbox next to it, where you can click multiple checkboxes, hit the
    submit button in the form, and goes to a next page where it will
    display the ID # of the record(s) you selected from the form page:
    <form name="form1" action="postpage.asp" method="post"><input
    type="checkbox" id="ID" name="ID" value="<%=RS("meID")%>">
    ''then the associated records are displayed inline, followed by submit
    <input type="submit" name="go" id="go" value="GO" class="inputBox"/>


    works fine when selecting one record from the display; below is the
    block of code that i am using to output all the ID#s from the form
    data i selected:
    dim qid
    qid = Request.Form("ID")

    For each CheckedItem in Request.Form("ID")

    response.write qid
    if I select more than one record and hit submit, i will get the ID#s
    of each, but i will also receive an extra figure displayed, which is
    all the ID#s selected appended to each other. Ex:
    ...and the first number will hav a comma appended to the output.
    Womdering how to manage the "for each " loop in the code, or how am I
    handling the event incorrectly?
    .Net Sports, Sep 24, 2009
    1. Advertisements

  2. That is the nature of the beast. The input type checkbox, because it
    accepts multiple values, sends name/array pair instead of the usual
    name/value pair. So what you want to do is treat what is coming back
    from the checkbox request.form("id") as an array, eg:

    dim idarr, i
    idarr = split(request.form("id"),",")

    for i = 0 to ubound(idarr)
    response.write i & ": " & idarr & "<br>"
    Adrienne Boswell, Sep 25, 2009
    1. Advertisements

  3. .Net Sports

    Dan Guest

    I'd advise against this - as splitting on the comma is not always reliable,
    for instance if any of those fields allow a comma to be entered as text then
    you'll be splitting that text into separate array keys, and losing the comma
    itself. ASP already has a mechanism built in for handling the Request.Form
    collection without having to resort to using Split and risking a mess.

    For Each key In Request.Form
    Response.Write key & ": " & Request.Form(key) & "<br>"
    Dan, Sep 29, 2009
  4. .Net Sports

    Dan Guest

    Sorry, I misread your reply, I thought you were encouraging use of Split on
    the entire Request.Form collection, not just the ID.

    Anyway, my point still stands - don't use it for this either. It only works
    if you don't have a comma possible in the value of the checkboxes (which
    granted will be most of the time, but not necessarily 100% of the time).
    Here's a method that works all the time:

    For i = 1 To Request.Form("id").Count
    Response.Write i & ": " & Request.Form("id")(i) & "<br>"

    Again, no need to Split into an array, the collection has already handled
    all of this for you.

    To demonstrate, given the following form:

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

    If you were to tick all the boxes, the output of your suggestion gives:

    0 : 1
    1 : 2
    2 : 2
    3 : 3
    4 : 3
    5 : 4
    6 : 4
    7 : 5

    which is obviously incorrect. Whereas my solution results in:

    1 : 1,2
    2 : 2,3
    3 : 3,4
    4 : 4,5

    which is the expected result.
    Dan, Sep 29, 2009
  5. You are right. I forgot about that method. I've been authoring in PHP
    - and getting stuck in this very same quagmire.
    Adrienne Boswell, Sep 29, 2009
    1. Advertisements

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments (here). After that, you can post your question and our members will help you out.