determine whether checkbox is checked php $_GET

2020-04-11 11:24发布

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

标签: php get
3条回答
混吃等死
2楼-- · 2020-04-11 12:08

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)*/
   }
查看更多
Fickle 薄情
3楼-- · 2020-04-11 12:14
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.

查看更多
我只想做你的唯一
4楼-- · 2020-04-11 12:15

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

查看更多
登录 后发表回答