tags:

views:

189

answers:

3

Hi,

I just want to have php determines whether a checkbox is checked, but I am running into a problem of getting the right return. Help please.

My html code

    <label>
    <input name="Language" type="checkbox" id="aa"  checked="checked"  />
    One</label>
    <label>
    <input name="Language" type="checkbox" id="bb" />Two</label>
    <label>
   <input type="checkbox" name="Language"  id="cc" />Three</label>

I pass the values to php by the $_GET method

my php code:

$aa=$_GET["aa"];
$bb=$_GET["bb"];
$cc=$_GET["cc"];


echo $aa."<br>";
echo $bb."<br>";
echo $cc."<br>";

the output is true false false

I next want to just determine if each box is checked and if so, do something.

if ($aa == true) { $abc="checked";}
else { $abc="not checked"; }

if ($bb == true) { $cde="checked";}
else { $cde="not checked"; }


if ($fgh == true) { $fgh="checked";}
else { $fgh="not checked"; }

But the if statements always return true, even if the box is not checked. I tried variations of "===" and "!=", but it does not seem to work.

TIA

+1  A: 
if (isset($_GET['checkbox_name'])) { ... }

Form controls (with the exception of file inputs, and with some special rules for image inputs) always submit strings. There is no concept of a boolean in a query string or a form encoded POST body.

The id is irrelevant — only the name and value matter (at least as far as PHP is concerned).

Since you haven't given them values they will, IIRC, default to on so if you are doing a comparison you should look for that. Looking with isset is simpler though. This is somewhat beside the point though, since your example gives them all the same name and value, so you can't differentiate between them.

Additionally, due to an oddity of the PHP form data parser, you have to end the with [] if you want multiple elements with the same name.

You probably want to do something like this:

<label>
<input name="Language[]" type="checkbox" id="aa"  checked="checked" value="One" />
One</label>
<label>
<input name="Language[]" type="checkbox" id="bb" value="Two" />Two</label>
<label>
<input type="checkbox" name="Language[]"  id="cc" value="Three" />Three</label>

Important: Note the addition of values and the change in name.

Then in PHP $_GET['Language'] will be an Array of the values of the checked checkboxes, which you can loop over.

David Dorward
Thank you David
jamex
+1  A: 

Try isset()

I think your HTML code should be like

<label>
  <input name="Language[]" type="checkbox" id="aa" checked="checked" value ="1" />One    
</label>
<label>
  <input name="Language[]" type="checkbox" id="bb" value ="2" />Two
</label>
<label>
  <input name="Language[]" type="checkbox"  id="cc" value ="3" />Three
</label>

and then by using something like

$count = count($_GET["Language"]); you can count the number of checkboxes checked.

Or do

$arr = $_GET["Language"]; //$arr is an array that contains the values of the checked checkboxes

Then you can foreach over the array

   foreach( $arr as $item)
   {
        echo $item . "</br>"; /* Will print 1,2 and 3 (mind newlines)*/
   }
Prasoon Saurav
This will only tell if you at least one checkbox is checked, not which ones are.
David Dorward
@David : Oopz, corrected. Even I think `Language` should be an array.
Prasoon Saurav
It won't be. If the name doesn't end in `[]` (or `[foo]` (which is another story)) then PHP will take the last value and ignore the others. It will only turn it into an Array if you follow the naming conventions.
David Dorward
@David : Edited the post, have a look :)
Prasoon Saurav
Thank you Prasoon
jamex
A: 

In my PHP I got it from $_POST['checkbox_name'], and I found that the variable had the value on when the box was checked (i.e. it existed even if the checkbox was clear).

Brian Hooper
Same problem that I had.
jamex