Jump to content

Single checkbox and $_SESSION?


wzshop

Recommended Posts

Hello,

 

I have a simple multiple-step form and I use sessions to save the data. Now i have 1 single checkbox and i would like to know how i can save that data (if one checked it or not). I am not very advanced with sessions, nor PHP, thus i tried the following:

if (isset($_POST['newsletter']))
{
  $_SESSION['newsletter']=$_POST['newsletter'];
}
$newsletter = $_SESSION['newsletter'];

// do not really know what if statement to use
if($newsletter == 'yes') 
{
	$newsl = '1';
}


//checkbox html here
<input type="checkbox" class="styled" name="newsletter" value="yes" />

 

Obviously the above won't work. Can explain to me how to save checkbox data in a session?

Thanks a lot in advance.

Link to comment
https://forums.phpfreaks.com/topic/249262-single-checkbox-and-_session/
Share on other sites

so what is your form code? you should have something like this

 

form.html

<form action="check.php" method="POST">
Is this how you do it? <br/>

YES:<input type="checkbox" class="styled" name="newsletter" value="yes" />
<input type="submit" value="submit"/>
</form>

 

check.php

<?php
session_start();
if (isset($_POST['newsletter'])) {

   $_SESSION['newsletter'] = $_POST['newsletter'];
   $newsletter = $_SESSION['newsletter'];

}

if($newsletter == "yes") {

   $newsl = 1;

}

?>

The code you gave is similar to mine. But i have another statement:

<?php
session_start();
if (isset($_POST['newsletter'])) {

   $_SESSION['newsletter'] = $_POST['newsletter'];
   $newsletter = $_SESSION['newsletter'];

}

if($newsletter == "yes") {

   $newsl = 1;

}


//later in the code i use an if statement
if($newsl == "1"){
echo"example";
}

?>

 

When i put

$newsletter = $_SESSION['newsletter'];

outside the }, the word "example" will be echoot no matter if i checked the checkbox or not.

its because you already have the session store in your browser. clear them.

 

<?php
session_start();
if (isset($_POST['newsletter'])) {

$_SESSION['newsletter'] = $_POST['newsletter'];
}

$newsletter = $_SESSION['newsletter'];

if($newsletter == "yes") {

$newsl = 1;
echo $newsl;

}

if($newsl == 1){
echo "example";
}

// this will destory the sessions.
session_destroy();

?>

tested everything and its working even if the

 

$newsletter = $_SESSION['newsletter'];

 

is outside the bracket.

 

Sorry, one more question. Is there any way to (dubble) check if the checkbox is checked or not, everytime the form submits? For instance, if i check the checkbox, submit the form, go back and uncheck the checkbox.. it will stay checked in the session.

 

Try my script at: http://www.maakmijnportret.nl/test3.php

<?php
session_start(); // start up your PHP session! 

if (isset($_POST['position']))
{
  $_SESSION['position']=$_POST['position'];
}

if (isset($_POST['name']))
{
  $_SESSION['name']=$_POST['name'];
}

if (isset($_POST['newsletter']))
{
  $_SESSION['newsletter']=$_POST['newsletter'];
}


$name = $_SESSION['name'];
$position = $_SESSION['position'];
$newsletter = $_SESSION['newsletter'];


// eerste formulier

if(!isset($_POST['overview']) && !isset($_POST['btn']))
{
?>

<form action="<? $_SERVER['PHP_SELF'];?>" method="post" enctype="multipart/form-data">
<input type="text" value="" name="position" />
<input type="checkbox" class="styled" name="newsletter" value="on" <? if($newsletter == 'on')
{ echo "checked";} ?> />
  <input type="submit" name="btn" />
  </form>
<?php
}
// form 2
if(isset($_POST['btn']))
{
?><form action="<? $_SERVER['PHP_SELF'];?>" method="post" enctype="multipart/form-data">
<input type="text" value="" name="name" />
  <input type="submit" name="overview" />
</form>
<?php
}



if(isset($_POST['overview']))
{
echo $position;
echo $name;
if($newsletter == 'on')
{ echo "testing";
}
}

?>

 

Once the checkbox is checked, "testing" will keep showing up.

Thanks again!

please do not use short tags. i've re-coded your script. do try it.

 

<?php
session_start();

if (isset($_POST['position']) && !empty($_POST['position'])) {
$_SESSION['position'] = $_POST['position'];
}

if (isset($_POST['name']) && !empty($_POST['name'])) {
$_SESSION['name'] = $_POST['name'];
}

if (isset($_POST['newsletter']) && !empty($_POST['newsletter'])) {
$_SESSION['newsletter'] = $_POST['newsletter'];
}

$name = $_SESSION['name'];
$position = $_SESSION['position'];
$newsletter = $_SESSION['newsletter'];

if(empty($position) && empty($name)) {
?>
<form action="<?php echo $_SERVER['PHP_SELF']; ?>" method="post" enctype="multipart/form-data">
<input type="text" value="" name="position" />
<input type="checkbox" class="styled" name="newsletter" value="on" <?php if($newsletter == 'on') { echo "checked";} ?> />
<input type="submit" name="btn" />
</form>
<?php
}

if(!empty($position) && empty($name)) {
?>
<form action="<?php echo $_SERVER['PHP_SELF']; ?>" method="post" enctype="multipart/form-data">
<input type="text" value="" name="name" />
<input type="submit" name="overview" />
</form>
<?php
}

if(!empty($name)) {
echo $position;
echo $name;
if($newsletter == 'on') {
	echo "Newletter on!";
}
session_destroy();
}
?>

 

EDIT: i've just updated the new version. the above code is the new one. take note.

just realised there was some errors in my script. the code below is tested and working.

 

<?php
session_start();

if (isset($_POST['position']) && !empty($_POST['position'])) {
$_SESSION['position'] = $_POST['position'];
}

if (isset($_POST['name']) && !empty($_POST['name'])) {
$_SESSION['name'] = $_POST['name'];
}

if (isset($_POST['newsletter']) && !empty($_POST['newsletter'])) {
$_SESSION['newsletter'] = $_POST['newsletter'];
}

$name = $_SESSION['name'];
$position = $_SESSION['position'];
$newsletter = $_SESSION['newsletter'];

if(empty($position) && empty($name)) {
?>
<form action="<?php echo $_SERVER['PHP_SELF']; ?>" method="post" enctype="multipart/form-data">
<input type="text" value="" name="position" />
<input type="checkbox" class="styled" name="newsletter" value="on" <?php if($newsletter == 'on') { echo "checked";} ?> />
<input type="submit" name="btn" />
</form>
<?php
}

if(!empty($position) && empty($name)) {
?>
<form action="<?php echo $_SERVER['PHP_SELF']; ?>" method="post" enctype="multipart/form-data">
<input type="text" value="" name="name" />
<input type="submit" name="overview" />
</form>
<?php
}

if(!empty($name)) {
echo $position;
echo $name;
if($newsletter == 'on') {
	echo "Newletter on!";
}
session_destroy();
}
?>

done, one question though; is it also possible to go back in the session. Thus let's say you're here

if(!empty($position) && empty($name))

and you want 1 step back in the form, for instance to uncheck the box, is that possible to implement or?

 

Thanks again, Robbert

Done. you may want to test it out :) it works.

 

<?php
session_start();

if (isset($_POST['position']) && !empty($_POST['position'])) {
$_SESSION['position'] = $_POST['position'];
}

if (isset($_POST['name']) && !empty($_POST['name'])) {
$_SESSION['name'] = $_POST['name'];
}

if (isset($_POST['newsletter']) && !empty($_POST['newsletter'])) {
$_SESSION['newsletter'] = $_POST['newsletter'];
}

$name = $_SESSION['name'];
$position = $_SESSION['position'];
$newsletter = $_SESSION['newsletter'];

if(isset($_GET['backto']) && !empty($_GET['backto'])) {

$back2 = $_GET['backto'];

if($back2 == "reset") {
	$position = "";
	$name = "";
	session_destroy();
}
if($back2 == "name") {
	$name = "";
}
if($back2 == "position") {
	$position = "";
	$name = "";
}
}

if(empty($position) && empty($name)) {
$name = $_SESSION['name'];
$position = $_SESSION['position'];
$newsletter = $_SESSION['newsletter'];
?>
<form action="<?php echo $_SERVER['PHP_SELF']; ?>" method="post" enctype="multipart/form-data">
<input type="text" value="<?php echo $position; ?>" name="position" />
<input type="checkbox" class="styled" name="newsletter" value="on" <?php if($newsletter == 'on') { echo "checked";} ?> />
<input type="submit" name="btn" />
</form>
<?php
session_destroy();
$name = "";
$position = "";
$newsletter = "";
}

if(!empty($position) && empty($name)) {
?>
<form action="<?php echo $_SERVER['PHP_SELF']; ?>" method="post" enctype="multipart/form-data">
<input type="text" value="" name="name" />
<input type="submit" name="overview" />
</form>
Go <a href="<?php echo $_SERVER['PHP_SELF']; ?>?backto=position">back</a>
<?php
}

if(!empty($name)) {
echo $position;
echo $name;
if($newsletter == 'on') {
	echo "Newletter on!";
}
echo 'Go <a href="'. $_SERVER['PHP_SELF'].'?backto=name">back</a>';
echo 'Go <a href="'. $_SERVER['PHP_SELF'].'?backto=reset">reset</a>';
}
?>

 

EDIT: ive changed the script a little.

Works great!

except the "reset" function at the end gives an error:

 

Warning: session_destroy() [function.session-destroy]: Trying to destroy uninitialized session in /home/musicv/public_html/maakmijnportret.nl/test3.php on line 49

 

is that just a warning or a bug?

Thanks, learn a lot;)

Sorry to bother you once more, I am trying to understand the code.. Why did you not use the

if(isset($_POST['btn']))

function? Is that some outdated code or? Anyway, while i was trying to understand the code, I deleted some code to see what exact function it fulfills.

 

I found that the code below, actually does what it should.. thus i was therefore wondering if you could please further explain your given solution..

 

See the script live here: http://www.maakmijnportret.nl/test3.php

 

<?php
session_start();

if (isset($_POST['position']) && !empty($_POST['position'])) {
$_SESSION['position'] = $_POST['position'];
}

if (isset($_POST['name']) && !empty($_POST['name'])) {
$_SESSION['name'] = $_POST['name'];
}

if (isset($_POST['newsletter']) && !empty($_POST['newsletter'])) {
$_SESSION['newsletter'] = $_POST['newsletter'];
}

$name = $_SESSION['name'];
$position = $_SESSION['position'];
$newsletter = $_SESSION['newsletter'];
if(!isset($_POST['btn']) && !isset($_POST['overview']))

{

?>
<form action="<?php echo $_SERVER['PHP_SELF']; ?>" method="post" enctype="multipart/form-data">
<input type="text" value="<?php echo $position; ?>" name="position" />
<input type="checkbox" class="styled" name="newsletter" value="on" <?php if($newsletter == 'on') { echo "checked";} ?> />
<input type="submit" name="btn" />
</form>
<?php
session_destroy();

}
if(isset($_POST['btn'])) {
?>
<form action="<?php echo $_SERVER['PHP_SELF']; ?>" method="post" enctype="multipart/form-data">
<input type="text" value="" name="name" />
<input type="submit" name="overview" />
</form>
Go <a href="<?php echo $_SERVER['PHP_SELF']; ?>?backto=position">back</a>
<?php
}

if(isset($_POST['overview'])){
echo $position;
echo $name;
if($newsletter == 'on') {
	echo "Newletter on!";
}
echo 'Go <a href="'. $_SERVER['PHP_SELF'].'">back</a>';

}
?>

 

Thanks again, Robbert

Archived

This topic is now archived and is closed to further replies.

×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.