954,561 Members — Technology Publication meets Social Media
Username:
Password:
Lost login information?
Have something to say? Contribute New Article Reply to this Article

Small Checkbox Dillema

Hi all,

I have this PHP script (for a HTML form) which I would like to a) check if a checkbox is checked, and then b) if it is, to check some text fields for input. If the checkbox is not checked, these fields do not need to be checked.

This is my checkbox HTML:

<input id="want2book" type="checkbox" name="want2book" value="Yes" tabindex="11" />

..and this is the section of my PHP script which I can not get working (notice the commented out line above - this was an alternative attempt to get this to work):

//if($want2book == 'Yes'){ 

if($_POST['want2book'] == 'Yes')
{
	if (empty($date) || empty($time)) {
	   header( "Location: $errorurl" );
	   exit ;
	} 
}


To summarise: If the checkbox 'want2book' is checked, I would like the script to make sure there is content in the two text fields 'date' and 'time' - if there is, great, submit and send out the email. If not, redirect the user to the $errorurl.

At present, the code above sends the email regardless of the check state and any input or not into the date and time fields. This is so simple but I just cant seem to grasp how to make it work...

Any help would be greatly appreciated

phillyt
Newbie Poster
5 posts since Feb 2012
Reputation Points: 10
Solved Threads: 0
 

I'm not sure whether you've already set the values of $date and $time...

if(isset($_POST['want2book']) && $_POST['want2book'] == 'Yes') {
    if(! strlen(trim($_POST['date'])) || ! strlen(trim($_POST['time']))) {
        header("Location: {$errorurl}");
        exit(0);
    }
}
blocblue
Posting Pro in Training
475 posts since Jan 2008
Reputation Points: 142
Solved Threads: 79
 

Thanks blogblue but that hasn't work either :(

Here is my full script:

<?php

$subject = "New Website Enquiry" ;
$formurl = "contact.php" ;
$errorurl = "error.php" ;
$thankyouurl = "thanks.php" ;


$name = $_POST['name'] ;
$tel = $_POST['tel'] ;
$email = $_POST['email'] ;

$want2book = $_POST['want2book'] ;
	$date = $_POST['date'] ;
	$time = $_POST['time'] ;


$genenq = $_POST['genenq'] ;
$http_referrer = getenv( "HTTP_REFERER" );


if (!isset($_POST['email'])) {
	header( "Location: $formurl" );
	exit ;
}
if (empty($name) || empty($tel) || empty($email)) {
   header( "Location: $errorurl" );
   exit ;
}



// ----------
// This is the section not working - check if checkbox is checked, if so, are date/time empty?

if(isset($_POST['want2book']) && $_POST['want2book'] == 'Yes') {
    if(! strlen(trim($_POST['date'])) || ! strlen(trim($_POST['time']))) {
        header("Location: {$errorurl}");
        exit(0);
    }
} 

// ----------


if ( preg_match( "/[\r\n]/", $name ) || preg_match( "/[\r\n]/", $email ) ) {
   header( "Location: $errorurl" );
   exit ;
}

$message =
	"Website Enquiry \n\n" .
	
	"Name:		$name \n\n" .
	"Tel: 		        $tel \n" .
	"E-mail:		$email \n\n\n" .


        "-- Booking info (if applicable): -- \n\n".

	"Preferred date: 	$date \n" .
	"Preferred time: 	$time \n" ;




mail(	//	"webmaster@want2party.com",
		"$subject", "$message" \n.
		"From: \"Website\" ;$email&gt;\nReply-To: \"$name\" <$email>\nX-Mailer: chfeedback.php 2.01", 
		"-f".$_REQUEST[email]);
header( "Location: $thankyouurl" );
?>
phillyt
Newbie Poster
5 posts since Feb 2012
Reputation Points: 10
Solved Threads: 0
 

Let me get this right...

If the want2book checkbox is checked, you want to make sure there are values in the date and time fields.

If it isn't checked, you don't care if there are values in the date and time fields?

Because the code I posted should only work for this situation. When a checkbox isn't checked, it doesn't post a value at all, hence $_POST['want2book'] will not be set in the post array.

To force it to always post a value, I usually do:

<input type="hidden" name="want2book" value="No" />
<input id="want2book" type="checkbox" name="want2book" value="Yes" />
blocblue
Posting Pro in Training
475 posts since Jan 2008
Reputation Points: 142
Solved Threads: 79
 

If the want2book checkbox is checked, you want to make sure there are values in the date and time fields.

If it isn't checked, you don't care if there are values in the date and time fields?

Yes - this correct

See the additional time/date fields aren't revealed to the user unless this checkbox is checked, so there's no need to check for a value on it, only to validate against empty time and date fields (which Id like to make required) - on checking of the checkbox.

Anything im trying at the moment though submits and sends regardless of empty fields and a checked checkbox.

phillyt
Newbie Poster
5 posts since Feb 2012
Reputation Points: 10
Solved Threads: 0
 

What about:

$error_url = 'error.php';
$book = isset($_POST['want2book']);
$date = isset($_POST['date']) ? trim($_POST['date']) : false;
$time = isset($_POST['time']) ? trim($_POST['time']) : false;

if($book && (! $date || ! $time)) {
    header("Location: {$error_url}");
    exit(0);
}


This should work on the basis that a checkbox field, when not checked will not post a value. Thus giving you a true / false value on checking isset. Removing white space from the date and time fields if set.

I can't see any reason why this shouldn't work...

blocblue
Posting Pro in Training
475 posts since Jan 2008
Reputation Points: 142
Solved Threads: 79
 

@BlocBlue - Thank you soo much pal, that works a treat!!

I'm not sure if the Trim function is working correctly though; "24th Jan 2013" still submits as 24th Jan 2013 (not "24thJan2013" as expected, is that correct? Luckily it doesnt matter to me as jQuery date/timepicker will see that the input is formatted correctly, I just wondered whether it was supposed to strip the input of all white space/space bar presses?

Many many thanks once again!

phillyt
Newbie Poster
5 posts since Feb 2012
Reputation Points: 10
Solved Threads: 0
 

Glad it worked. Please mark the thread as solved :)

And FYI - trim only removes white space from the end of strings. Not from the middle.

blocblue
Posting Pro in Training
475 posts since Jan 2008
Reputation Points: 142
Solved Threads: 79
 

Aah cool, thanks for that tidbit.

..and will do! :)

phillyt
Newbie Poster
5 posts since Feb 2012
Reputation Points: 10
Solved Threads: 0
 

This question has already been solved

Post: Markdown Syntax: Formatting Help
You
View similar articles that have also been tagged: