how to retrieve CheckBox value using GET Method ?

M

magix

If I have

<form action="process.asp" method="get" name="form1">

....
....
<input TYPE=checkbox name=sports VALUE=Cricket>
<input TYPE=checkbox name=sports VALUE=Swimming>
<input TYPE=checkbox name=sports VALUE=Football>

</form>

If I check all, when submit, I will get in URL string

http://....?... &sports=Cricket&sports=Swimming&sports=Football

So, in process.asp, how can I differentiate each of them with
request.querystring("sports)?
How cna I know how many "sports" have been selected ?
Assume that all must having same checkbox name, and must use GET method,
instead of POST

Thanks.

regards,
Magix
 
E

Evertjan.

magix wrote on 21 aug 2008 in microsoft.public.inetserver.asp.general:
If I have

<form action="process.asp" method="get" name="form1">

...
...
<input TYPE=checkbox name=sports VALUE=Cricket>
<input TYPE=checkbox name=sports VALUE=Swimming>
<input TYPE=checkbox name=sports VALUE=Football>

</form>

If I check all, when submit, I will get in URL string

http://....?... &sports=Cricket&sports=Swimming&sports=Football

So, in process.asp, how can I differentiate each of them with
request.querystring("sports)?

I think, but please test first:

request.querystring("sports")(0)
request.querystring("sports")(1)
How cna I know how many "sports" have been selected ?

request.querystring("sports").length
 
O

Old Pedant

magix said:
If I have
<input TYPE=checkbox name=sports VALUE=Cricket>
<input TYPE=checkbox name=sports VALUE=Swimming>
<input TYPE=checkbox name=sports VALUE=Football>

So, in process.asp, how can I differentiate each of them with
request.querystring("sports)?
How cna I know how many "sports" have been selected ?

Other answers right, but more complex than needed.

Just do this:

<%
....
sports = Trim( Request("sports") ) ' do not need to say Request.QueryString
If sports = "" Then
... no sports selected ...
Else
sports = Split( sports, ", " ) ' that is COMMA-SPACE and *not* just comma
Response.Write "You selected " & UBound(sports)+1 " sports."
End If
....
%>

This works fine so long as none of the VALUE= values for the checkboxes
contain COMMA-SPACE.

But you should be sure you really need to do the SPLIT, first. You may be
able to do many SQL queries without bothering to get the individual choices.
 
B

Bob Barrows [MVP]

Old said:
Other answers right, but more complex than needed.

Just do this:

<%
...
sports = Trim( Request("sports") ) ' do not need to say
Request.QueryString

Perhaps not, but I would suggest you do so.
I'm surprised a pedant would advise someone to be less that precise! :)
 
O

Old Pedant

Bob Barrows said:
Perhaps not, but I would suggest you do so.
I'm surprised a pedant would advise someone to be less that precise! :)

LOL! But it *IS* precise...if you know what you are doing.

http://msdn.microsoft.com/en-us/library/ms524948(VS.85).aspx

Since QueryString is searched first, then
Request("foo")
is equivalent to
Request.QueryString("foo")
with the proviso that the latter actually exists.

Now, pedantically, if for some reason the querystring value does not exist
then the search process will indeed try to find that name in all the other
collections. But unless your code has created a "sports" key/value pair in
Request.Form (that is, via POST) or Cookies, that's not an issue.

Anyway, the reason I tended to use just Request was simple: During
development and debug, I'd use METHOD=GET in my <FORM>s so I could see in the
URL what I was passing. Then, once it was working and debugged, I'd change
to METHOD=POST but wouldn't have to change my VBS code.

A hack, but I think a reasonable one.

Anyway, I'll bet in this case there's no reason for him to know how many
were selected and/or separate them. I'll bet that if he constructed the SQL
efficiently he'd just need to do something such as
sql = " ... WHERE sport IN ('" & Replace(Request("sports"),", ","','")
& "') "
or similar.
 
A

Anthony Jones

Old Pedant said:
Other answers right, but more complex than needed.

I'm sorry perhaps I'm miss reading you but you seem to be saying the other
answers are more complex than needed and yours below is simpler??
Just do this:

<%
...
sports = Trim( Request("sports") ) ' do not need to say
Request.QueryString

Bob was more gentle, I would say that this is not a good practice at all.
Always use either .QueryString or .Form. I've seen the short cut above
cause too many headaches especially when a page was using GET then switches
to POST.

If sports = "" Then
... no sports selected ...
Else
sports = Split( sports, ", " ) ' that is COMMA-SPACE and *not* just comma
Response.Write "You selected " & UBound(sports)+1 " sports."
End If
...
%>

This works fine so long as none of the VALUE= values for the checkboxes
contain COMMA-SPACE.

Yikes. Is that 'less complex'? Have you tested it? Does it seem to you to
match the querystring structure seen in the OP?
But you should be sure you really need to do the SPLIT, first. You may be
able to do many SQL queries without bothering to get the individual choices.

Thats an interesting assertion. Can you achieve that without creating a SQL
statement using string concatenation which I'm sure you would agree would be
a bad thing?
 
A

Anthony Jones

magix said:
If I have

<form action="process.asp" method="get" name="form1">

...
...
<input TYPE=checkbox name=sports VALUE=Cricket>
<input TYPE=checkbox name=sports VALUE=Swimming>
<input TYPE=checkbox name=sports VALUE=Football>

</form>

If I check all, when submit, I will get in URL string

http://....?... &sports=Cricket&sports=Swimming&sports=Football

So, in process.asp, how can I differentiate each of them with
request.querystring("sports)?
How cna I know how many "sports" have been selected ?
Assume that all must having same checkbox name, and must use GET method,
instead of POST

Why GET instead of POST? Do you deliberately want enable the possiblity
that a response can be delivered from the cache?
 
D

Dave Anderson

Old said:
Anyway, the reason I tended to use just Request was simple: During
development and debug, I'd use METHOD=GET in my <FORM>s so I could
see in the URL what I was passing. Then, once it was working and
debugged, I'd change to METHOD=POST but wouldn't have to change my
VBS code.

This seems to contradict your earlier argument that Request("foo") is the
same as Request.QueryString("foo") because QueryString is the first
collection searched.

If you change your form methods to POST, are you not introducing a
useless -- and potentially interfering -- search through the QueryString
collection for your post-development scripts?

A hack, but I think a reasonable one.

Well, that's one opinion.

We have solved countless problems by breaking people of this habit.
Likewise, default properties.
 

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. After that, you can post your question and our members will help you out.

Ask a Question

Members online

No members online now.

Forum statistics

Threads
473,744
Messages
2,569,484
Members
44,903
Latest member
orderPeak8CBDGummies

Latest Threads

Top