determine whether checkbox is checked php $_GET

2020-04-11 12:03发布

问题:

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:

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.



回答2:

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)*/
   }


回答3:

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).



标签: php get