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
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;

}

?>

Link to comment
Share on other sites

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.

Link to comment
Share on other sites

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.

 

Link to comment
Share on other sites

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!

Link to comment
Share on other sites

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.

Link to comment
Share on other sites

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();
}
?>

Link to comment
Share on other sites

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

Link to comment
Share on other sites

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.

Link to comment
Share on other sites

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

Link to comment
Share on other sites

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

Link to comment
Share on other sites

This thread is more than a year old. Please don't revive it unless you have something important to add.

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • 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.