Using PHP and sessions, how can I check a checkbox the first time the page is loaded?
Here is a minimal sample of my code:
index.php:
<?php
session_start();
$_SESSION['foo'] = $_POST['foo'];
?>
<!doctype html>
<html>
<body>
<form method='POST'>
<input type="checkbox" id="checkFoo" name="foo" <?php echo (isset($_POST['foo']) && $_POST['foo'] === 'on') ? 'checked' : ''; ?>>
<label for="checkFoo">checkbox</label>
<button type="submit">Submit</button>
</form>
<?php include 'print.php'; ?>
</body>
</html>
print.php:
<?php
session_start();
echo $_SESSION['foo'].' ';
?>
Apart from the default value, this code works exactly as I intend:
- When the user checks the checkbox and clicks submit, it prints 'on'
- When the user unchecks the checkbox and clicks submit, it prints nothing
- Clicking the submit button does not change the value of the checkbox
How can I change the default (startup) value of the checkbox to 'on', without changing the above behavior?
CodePudding user response:
This is a little verbose, but it's good practice to use a default value, then check if something exists before setting a variable to it.
Something like this should work.
<?php
session_start();
// default value is on
$foo = "on";
// if session has a value, use it instead
if(isset($_SESSION["foo"])){
$foo = $_SESSION["foo"];
}
// if post has a value, use it instead and set the session value
if(isset($_POST["foo"])){
$foo = $_POST["foo"];
$_SESSION["foo"] = $_POST["foo"];
}
$checked = $foo === "on";
This can be simplified in newer PHP versions (7 )
<?php
session_start();
$foo = $_POST["foo"] ?? $_SESSION["foo"] ?? "on";
$_SESSION["foo"] = $foo;
CodePudding user response:
When the page will be first loaded, the $_POST['foo']
would not be set as the page would be accessed using a GET
Request.
So You Can Add A Check:
<input type="checkbox" id="checkFoo" name="foo" <?php echo (!isset($_POST['foo']) || (isset($_POST['foo']) && $_POST['foo'] === 'on')) ? 'checked' : ''; ?>>
CodePudding user response:
You can add an additional check to see if $_POST['foo']
is missing, and if so default to checked
.
<input
type="checkbox"
id="checkFoo"
name="foo"
<?php echo (!isset($_POST['foo']) || (isset($_POST['foo']) && $_POST['foo'] === 'on')) ? 'checked' : ''; ?>>
/>