Reputation: 159
I have a checkbox in my HTML file:
<input type="checkbox" id="kopia" name="kopia" class="form-input" value="0">
I'm trying to pass to the PHP file (via AJAX) a couple of values, one of them is a boolean value created by a checkbox (simplified):
name: "kopia"
value: document.getElementById("kopia").checked
If I check via console, it returns true
if checked and false
if unchecked.
document.getElementById("kopia").checked
If I check via PHP file, it behaves the same:
echo $_POST['kopia']
But when I write something like this:
$checkbox = $_POST['kopia'];
if ($checkbox){
echo "hey";
} else {echo "bye";}
It always returns "hey", no matter if the checkbox was checked or not. I don't get it. Even if I make something like this:
$checkbox = $_POST['kopia'];
if ($checkbox){
echo $checkbox;
} else {echo "bye";}
It never returns "bye", no matter if the box was checked or not, but returns true
if checked and false
if unchecked. This thing has already stolen a couple of hours and that's a couple of hours too much. Any idea, hint?
Upvotes: 2
Views: 4754
Reputation: 78994
Your are passing true
or false
in $_POST['kopia']
via the return of document.getElementById("kopia").checked
, however $_POST
values are strings in PHP. So both string "true"
and string "false"
will evaluate to boolean true
in your current if condition. You can check the string value:
$checkbox = $_POST['kopia'];
if ($checkbox == "true"){
echo $checkbox;
} else {
echo "bye";
}
Or you can convert them to a boolean, see PHP: Validate Filters (thanks to Sysix):
$checkbox = filter_var($_POST['kopia'], FILTER_VALIDATE_BOOLEAN);
Or if you set $_POST['kopia']
to 0
or 1
, those strings will be evaluated correctly in your current if condition.
Or you could abandon the JS value switching and just check if $_POST['kopia']
exists (only when checked):
if(isset($_POST['kopia'])) {
echo "hey";
} else {
echo "bye";
}
Upvotes: 3
Reputation: 654
You could make a simple check like this:
$isChecked = !empty($_POST['kopia']) ? true : false;
if($isChecked){
echo 'Checked';
}
else{
echo 'Not checked';
}
empty checks both isset and if 0 it equals false, if 1 it equals true and if not set it equals false.
Hopes this helps.
Upvotes: 0