I've successfully managed to display and send all the text fields values, but I'm having problems checking that day, month and year have been selected and displaying an error message if they haven't. Once selected and passed validation, I am sending the values using the form scripts.
Here is what I've done, If anyone could help me validate the dropdown options, send the values to the email address, and redirect to the "thank you" page once passed submission I'd most appreciate it.
<form name="form1" e class="membership-form membership-form-stage-two" method="post" action="form-one.php">
<div class="half">
<h4>First Name</h4>
<input name="firstname" type="text" id="firstname" value="<?php echo $_POST['firstname']; ?>" class="">
</div>
<div class="half lasthalf">
<h4>Last Name</h4>
<input name="lastname" type="text" id="lastname" value="<?php echo $_POST['lastname']; ?>" class="">
</div>
<h4>Date of Birth</h4>
<select class="day" name="day">
<option>Day</option>
<option value="">1</option>
<option value="">2</option>
</select>
<select class="month" name="month">
<option>Month</option>
<option value="">1</option>
<option value="">2</option>
</select>
<select class="year" name="year">
<option>Year</option>
<option value="">1</option>
<option value="">2</option>
</select>
<h4>Email Address</h4>
<input name="emailaddress" type="text" id="emailaddress" value="<?php echo $_POST['emailaddress']; ?>" class="">
<h4>Select your Favourite </h4>
<div class="favorite">
<select>
<option value="North"> North</option>
<option value="Central">Central</option>
<option value="East">East</option>
</select>
</div>
<h4>Company Name (for Business Buddies)</h4>
<input name="companyname" type="text" id="companyname" value="<?php echo $_POST['companyname']; ?>" class="">
<input type="submit" name="Submit" value="Finish" class="membership-finish">
</form>
<?php
if (isset($_POST['Submit'])) {
if ($_POST['firstname'] != "") {
$_POST['firstname'] = filter_var($_POST['firstname'], FILTER_SANITIZE_STRING);
if ($_POST['firstname'] == "") {
$errors .= 'Please enter a valid name.<br/><br/>';
}
} else {
$errors .= 'Please enter your name.<br/>';
}
if ($_POST['lastname'] != "") {
$_POST['lastname'] = filter_var($_POST['lastname'], FILTER_SANITIZE_STRING);
if ($_POST['lastname'] == "") {
$errors .= 'Please enter a valid name.<br/><br/>';
}
} else {
$errors .= 'Please enter your name.<br/>';
}
if ($_POST['emailaddress'] != "") {
$emailaddress = filter_var($_POST['emailaddress'], FILTER_SANITIZE_EMAIL);
if (!filter_var($emailaddress, FILTER_VALIDATE_EMAIL)) {
$errors .= "$emailaddress <strong>NOT</strong> a valid email address.<br/><br/>";
}
} else {
$errors .= 'Please enter your email address.<br/>';
}
if ($_POST['companyname'] != "") {
$_POST['companyname'] = filter_var($_POST['companyname'], FILTER_SANITIZE_STRING);
if ($_POST['companyname'] == "") {
$errors .= 'Please enter a valid name.<br/><br/>';
}
} else {
$errors .= 'Please enter your name.<br/>';
}
if (!$errors) {
$mail_to = 'ad@test.com';
$subject = 'test';
$message = 'Name: ' . $_POST['firstname'] .' ' . $_POST['lastname'] . "
";
$message .= 'Email Address: ' . $_POST['emailaddress'] . "
";
$message .= 'Company: ' . $_POST['companyname'] . "
";
mail($mail_to, $subject, $message);
header( 'Location: thank-you-one.php' ) ;
} else {
echo "<div class='error-message'><span>Please complete the fields in red</span></div>";
}
}
?>
Just add this line, after the check for the companyname
if(!checkdate($_POST['month'],$_POST['day'],$_POST['year'])){
$errors .= 'Please enter a valid DOB<br/><br/>';
}
If the <select
has no name="xx"
property the value of the field is not posted back to the server. So add a name to each.
You also have to add a value into the value=""
as that is what is actually posted back to the server NOT the value between the <option>1</option>
tags.
<h4>Date of Birth</h4>
<select class="day" name="day">
<option>Day</option>
<option value="0">Select day</option>
<option value="1">1</option>
<option value="2">2</option>
</select>
<select class="month" name="month">
<option>Month</option>
<option value="0">Select month</option>
<option value="1">January</option>
<option value="2">February</option>
....
</select>
<select class="year" name="year">
<option>Year</option>
<option value="0">Select year</option>
<option value="2001">2001</option>
<option value="2001">2002</option>
....
</select>
When you come to validate remember that now you have a value="" set you will always get a value as a dropdown auto selects the first value in the list unless otherwise instructed.
Now I added a item to each list with a value="0". When you validate that an entry has been selected you can just test that
if ( $_POST['day'] > 0 ) // An item has been selected
and so on like that for all the date fields.