Handling Multiple check boxes

This is a discussion on Handling Multiple check boxes within the PHP Language forums, part of the PHP Programming Forums category; I have a PHP generated page which displays X many records. Each record has a checkbox preceding it. The user ...


Go Back   Usenet Forums > PHP Programming Forums > PHP Language

FAQ Members List Calendar Search Today's Posts Mark Forums Read
  #1 (permalink)  
Old 04-28-2004
Adrian Parker
 
Posts: n/a
Default Handling Multiple check boxes

I have a PHP generated page which displays X many records. Each record has
a checkbox preceding it. The user checks several checkboxes, and hits a
delete button. All the corresponding records will be deleted.

But I'm running into difficulty...


Right now the NAME property of each check box is the primary key of the
corresponding record. Hence if I know which checkboxes are checked, I
simply use DELETE using the NAME value.

Generally speaking, how do I get the server side to see which check boxes
were checked?

The check box names may not be sequential, if any records have been deleted
previously, and the first check box might be a number greater than 0.

Is there an easy mechanism to do this? Some kind of built in cnotrol array
allowing me to loop over every check box that was on the form submitted?

I could store the last and first checkbox number in a hidden input, then
loop starting/ending at those values, but that may loop over a lot of
controls that do not exist.


Thoughts?



<Ade
--
Adrian Parker. Ordained priest. <adrian.parker@sympatico.ca>

"A society that views graphic violence as entertainment ...should not be
surprised when senseless violence shatters the dreams of it's youngest and
brightest..." - Ensign (March 2004)


Reply With Quote
  #2 (permalink)  
Old 04-28-2004
Martin Andrew Galese
 
Posts: n/a
Default Re: Handling Multiple check boxes

I've solved this problem in the past by giving each of the checkboxes
the same name, say id, but then setting the value statement to the
primary key I'm on. When you look in your _POST array, you should find
that each id that was checked is in a comma separated list. Just process
this list as you need to loop over the selected primary keys.

Adrian Parker wrote:
> I have a PHP generated page which displays X many records. Each record has
> a checkbox preceding it. The user checks several checkboxes, and hits a
> delete button. All the corresponding records will be deleted.
>
> But I'm running into difficulty...
>
>
> Right now the NAME property of each check box is the primary key of the
> corresponding record. Hence if I know which checkboxes are checked, I
> simply use DELETE using the NAME value.
>
> Generally speaking, how do I get the server side to see which check boxes
> were checked?
>
> The check box names may not be sequential, if any records have been deleted
> previously, and the first check box might be a number greater than 0.
>
> Is there an easy mechanism to do this? Some kind of built in cnotrol array
> allowing me to loop over every check box that was on the form submitted?
>
> I could store the last and first checkbox number in a hidden input, then
> loop starting/ending at those values, but that may loop over a lot of
> controls that do not exist.
>
>
> Thoughts?
>
>
>
> <Ade



--
Martin
(Personal email: martin@galese.net)
(Work/Academic email: andy@uchicago.edu)

"As soon as men decide that all means are permitted to fight an evil,
then their good becomes indistinguishable from the evil that
they set out to destroy."
- Christopher Dawson

"And this gray spirit yearning in desire
To follow knowledge like a sinking star,
Beyond the utmost bound of human thought."
- Lord Alfred Tennyson
Reply With Quote
  #3 (permalink)  
Old 04-29-2004
Adrian Parker
 
Posts: n/a
Default Re: Handling Multiple check boxes

"Martin Andrew Galese" <martin@galese.net> wrote in message
news:rnVjc.16$45.2036@news.uchicago.edu...
> I've solved this problem in the past by giving each of the checkboxes
> the same name, say id, but then setting the value statement to the
> primary key I'm on. When you look in your _POST array, you should find
> that each id that was checked is in a comma separated list. Just process
> this list as you need to loop over the selected primary keys.


I didn't know the checkbox could have a value. Cool.

The only way I've used the POST array before was by doing things like:
if (isset($_POST["controlname"]))

How do you reference it using your method?


Adrian


>
> Adrian Parker wrote:
> > I have a PHP generated page which displays X many records. Each record

has
> > a checkbox preceding it. The user checks several checkboxes, and hits a
> > delete button. All the corresponding records will be deleted.
> >
> > But I'm running into difficulty...
> >
> >
> > Right now the NAME property of each check box is the primary key of the
> > corresponding record. Hence if I know which checkboxes are checked, I
> > simply use DELETE using the NAME value.
> >
> > Generally speaking, how do I get the server side to see which check

boxes
> > were checked?
> >
> > The check box names may not be sequential, if any records have been

deleted
> > previously, and the first check box might be a number greater than 0.
> >
> > Is there an easy mechanism to do this? Some kind of built in cnotrol

array
> > allowing me to loop over every check box that was on the form submitted?
> >
> > I could store the last and first checkbox number in a hidden input, then
> > loop starting/ending at those values, but that may loop over a lot of
> > controls that do not exist.
> >
> >
> > Thoughts?
> >
> >
> >
> > <Ade

>
>
> --
> Martin
> (Personal email: martin@galese.net)
> (Work/Academic email: andy@uchicago.edu)
>
> "As soon as men decide that all means are permitted to fight an evil,
> then their good becomes indistinguishable from the evil that
> they set out to destroy."
> - Christopher Dawson
>
> "And this gray spirit yearning in desire
> To follow knowledge like a sinking star,
> Beyond the utmost bound of human thought."
> - Lord Alfred Tennyson



Reply With Quote
  #4 (permalink)  
Old 04-29-2004
Adrian Parker
 
Posts: n/a
Default Re: Handling Multiple check boxes


"Martin Andrew Galese" <martin@galese.net> wrote in message
news:rnVjc.16$45.2036@news.uchicago.edu...
> I've solved this problem in the past by giving each of the checkboxes
> the same name, say id, but then setting the value statement to the
> primary key I'm on. When you look in your _POST array, you should find
> that each id that was checked is in a comma separated list. Just process
> this list as you need to loop over the selected primary keys.


That doesn't seem to work.

foreach (array_keys($_POST) as $key) {
$$key = $_POST[$key];
print "$key is ${$key}<br />";
}


When I name all the textboxes the same, and make their values the primary
key of the record to delete, the _POST array just contains the total number
of checked checkboxes.

Output:
"deleteMe is 8
Delete is Delete selected"

I check 8 check boxes. Their names are 1, 2, 3, 4, 5, 6, 7, 8

Either _POST is getting the number of how many are checked, or the value of
the last one only.



Adrian



>
> Adrian Parker wrote:
> > I have a PHP generated page which displays X many records. Each record

has
> > a checkbox preceding it. The user checks several checkboxes, and hits a
> > delete button. All the corresponding records will be deleted.
> >
> > But I'm running into difficulty...
> >
> >
> > Right now the NAME property of each check box is the primary key of the
> > corresponding record. Hence if I know which checkboxes are checked, I
> > simply use DELETE using the NAME value.
> >
> > Generally speaking, how do I get the server side to see which check

boxes
> > were checked?
> >
> > The check box names may not be sequential, if any records have been

deleted
> > previously, and the first check box might be a number greater than 0.
> >
> > Is there an easy mechanism to do this? Some kind of built in cnotrol

array
> > allowing me to loop over every check box that was on the form submitted?
> >
> > I could store the last and first checkbox number in a hidden input, then
> > loop starting/ending at those values, but that may loop over a lot of
> > controls that do not exist.
> >
> >
> > Thoughts?
> >
> >
> >
> > <Ade

>
>
> --
> Martin
> (Personal email: martin@galese.net)
> (Work/Academic email: andy@uchicago.edu)
>
> "As soon as men decide that all means are permitted to fight an evil,
> then their good becomes indistinguishable from the evil that
> they set out to destroy."
> - Christopher Dawson
>
> "And this gray spirit yearning in desire
> To follow knowledge like a sinking star,
> Beyond the utmost bound of human thought."
> - Lord Alfred Tennyson



Reply With Quote
  #5 (permalink)  
Old 04-29-2004
Adrian Parker
 
Posts: n/a
Default Re: Handling Multiple check boxes


"Martin Andrew Galese" <martin@galese.net> wrote in message
news:rnVjc.16$45.2036@news.uchicago.edu...
> I've solved this problem in the past by giving each of the checkboxes
> the same name, say id, but then setting the value statement to the
> primary key I'm on. When you look in your _POST array, you should find
> that each id that was checked is in a comma separated list. Just process
> this list as you need to loop over the selected primary keys.


I feel supid now.

This doesn't work. If 10 check boxes all have the same name, the only value
used is that of that last one. They cascadingly change the value of the one
checkbox name.


>
> Adrian Parker wrote:
> > I have a PHP generated page which displays X many records. Each record

has
> > a checkbox preceding it. The user checks several checkboxes, and hits a
> > delete button. All the corresponding records will be deleted.
> >
> > But I'm running into difficulty...
> >
> >
> > Right now the NAME property of each check box is the primary key of the
> > corresponding record. Hence if I know which checkboxes are checked, I
> > simply use DELETE using the NAME value.
> >
> > Generally speaking, how do I get the server side to see which check

boxes
> > were checked?
> >
> > The check box names may not be sequential, if any records have been

deleted
> > previously, and the first check box might be a number greater than 0.
> >
> > Is there an easy mechanism to do this? Some kind of built in cnotrol

array
> > allowing me to loop over every check box that was on the form submitted?
> >
> > I could store the last and first checkbox number in a hidden input, then
> > loop starting/ending at those values, but that may loop over a lot of
> > controls that do not exist.
> >
> >
> > Thoughts?
> >
> >
> >
> > <Ade

>
>
> --
> Martin
> (Personal email: martin@galese.net)
> (Work/Academic email: andy@uchicago.edu)
>
> "As soon as men decide that all means are permitted to fight an evil,
> then their good becomes indistinguishable from the evil that
> they set out to destroy."
> - Christopher Dawson
>
> "And this gray spirit yearning in desire
> To follow knowledge like a sinking star,
> Beyond the utmost bound of human thought."
> - Lord Alfred Tennyson



Reply With Quote
  #6 (permalink)  
Old 04-29-2004
Jan Pieter Kunst
 
Posts: n/a
Default Re: Handling Multiple check boxes

In article <24Vjc.33915$OU.792065@news20.bellglobal.com>,
"Adrian Parker" <adrian.parker@NOSPAMsympatico.ca> wrote:

> Is there an easy mechanism to do this? Some kind of built in cnotrol array
> allowing me to loop over every check box that was on the form submitted?


Make the "name" attribute an array.

<input type="checkbox" name="checkbox_id[1]" value="a" />
<input type="checkbox" name="checkbox_id[3]" value="b" />
<input type="checkbox" name="checkbox_id[56]" value="c" />
<input type="checkbox" name="checkbox_id[145]" value="d" />

If a and c are checked, then after submitting $_REQUEST['checkbox_id']
is an array containing this: [1] => a [56]=> d.

JP

--
Sorry, <devnull@cauce.org> is een "spam trap".
E-mail adres is <jpk"at"akamail.com>, waarbij "at" = @.
Reply With Quote
  #7 (permalink)  
Old 04-29-2004
Adrian Parker
 
Posts: n/a
Default Re: Handling Multiple check boxes


"Jan Pieter Kunst" <devnull@cauce.org> wrote in message
news:devnull-3C02F7.10204229042004@news1.news.xs4all.nl...
> In article <24Vjc.33915$OU.792065@news20.bellglobal.com>,
> "Adrian Parker" <adrian.parker@NOSPAMsympatico.ca> wrote:
>
> > Is there an easy mechanism to do this? Some kind of built in cnotrol

array
> > allowing me to loop over every check box that was on the form submitted?

>
> Make the "name" attribute an array.
>
> <input type="checkbox" name="checkbox_id[1]" value="a" />
> <input type="checkbox" name="checkbox_id[3]" value="b" />
> <input type="checkbox" name="checkbox_id[56]" value="c" />
> <input type="checkbox" name="checkbox_id[145]" value="d" />
>
> If a and c are checked, then after submitting $_REQUEST['checkbox_id']
> is an array containing this: [1] => a [56]=> d.


How can I loop through it without knowing how many elements it holds?

Example code?


Adrian


Reply With Quote
  #8 (permalink)  
Old 04-29-2004
Adrian Parker
 
Posts: n/a
Default Re: Handling Multiple check boxes


"Jan Pieter Kunst" <devnull@cauce.org> wrote in message
news:devnull-3C02F7.10204229042004@news1.news.xs4all.nl...
> In article <24Vjc.33915$OU.792065@news20.bellglobal.com>,
> "Adrian Parker" <adrian.parker@NOSPAMsympatico.ca> wrote:
>
> > Is there an easy mechanism to do this? Some kind of built in cnotrol

array
> > allowing me to loop over every check box that was on the form submitted?

>
> Make the "name" attribute an array.
>
> <input type="checkbox" name="checkbox_id[1]" value="a" />
> <input type="checkbox" name="checkbox_id[3]" value="b" />
> <input type="checkbox" name="checkbox_id[56]" value="c" />
> <input type="checkbox" name="checkbox_id[145]" value="d" />
>
> If a and c are checked, then after submitting $_REQUEST['checkbox_id']
> is an array containing this: [1] => a [56]=> d.


This seems to work:

foreach(array_keys($_POST["checkBox_Delete"]) as $key)
{
if ($deleteCount == 0)
{
$deleteThese = "'" . $key . "'";
$deleteCount += 1;
} else {
$deleteThese .= ", '" . $key . "'";
}
}


This look good to you?


Adrian


Reply With Quote
  #9 (permalink)  
Old 04-29-2004
Jan Pieter Kunst
 
Posts: n/a
Default Re: Handling Multiple check boxes

In article <Y0dkc.41886$OU.978179@news20.bellglobal.com>,
"Adrian Parker" <adrian.parker@NOSPAMsympatico.ca> wrote:

> > Make the "name" attribute an array.
> >
> > <input type="checkbox" name="checkbox_id[1]" value="a" />
> > <input type="checkbox" name="checkbox_id[3]" value="b" />
> > <input type="checkbox" name="checkbox_id[56]" value="c" />
> > <input type="checkbox" name="checkbox_id[145]" value="d" />
> >
> > If a and c are checked, then after submitting $_REQUEST['checkbox_id']
> > is an array containing this: [1] => a [56]=> d.


(Should be [56] => c, sorry)

> How can I loop through it without knowing how many elements it holds?


That's what foreach() is for! See
<http://nl.php.net/manual/en/control-structures.foreach.php>.

Assuming that the form was submitted with method="post":

foreach($_POST[checkbox_id] as $record_id => $value) {

do_something_in_database($record_id);
...
}

JP

--
Sorry, <devnull@cauce.org> is een "spam trap".
E-mail adres is <jpk"at"akamail.com>, waarbij "at" = @.
Reply With Quote
  #10 (permalink)  
Old 04-29-2004
Jan Pieter Kunst
 
Posts: n/a
Default Re: Handling Multiple check boxes

In article <qkdkc.41916$OU.979436@news20.bellglobal.com>,
"Adrian Parker" <adrian.parker@NOSPAMsympatico.ca> wrote:

> This seems to work:
>
> foreach(array_keys($_POST["checkBox_Delete"]) as $key)
> {
> if ($deleteCount == 0)
> {
> $deleteThese = "'" . $key . "'";
> $deleteCount += 1;
> } else {
> $deleteThese .= ", '" . $key . "'";
> }
> }
>
>
> This look good to you?


If you need the number of checked checkboxes, it is faster to get that
like this:

$deleteCount = count($_POST['checkBox_Delete']);

JP

--
Sorry, <devnull@cauce.org> is een "spam trap".
E-mail adres is <jpk"at"akamail.com>, waarbij "at" = @.
Reply With Quote
Reply
Thread Tools Search this Thread
Search this Thread:

Advanced Search
Display Modes

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are Off
[IMG] code is Off
HTML code is Off
Trackbacks are On
Pingbacks are On
Refbacks are On




All times are GMT +1. The time now is 08:33 AM.


Powered by vBulletin® Version 3.7.3
Copyright ©2000 - 2008, Jelsoft Enterprises Ltd.
Content Relevant URLs by vBSEO 3.0.0