Jump to content

form values dissapear in captcha validation


laxi

Recommended Posts

Hi everyone,

 

I am unable to get the any of the form values to stay after submission with captcha.

 

My code is below.

 

Please help. Also the error of the validation doesnt display on submission



<!DOCTYPE HTML>
<html>
<head>
<style>
.error {color: #FF0000;}
.success {color:#360; background-color:#FF0;}
.fail {color:#F00; background-color:#FFF;)
</style>
</head>
<body>

<?php

 if (isset($_POST['submit'])){
 
 $name = $_POST['name'];
 $email = $_POST['email'];
 $phone = $_POST['phone'];
 $country = $_POST['country'];
 $comment = $_POST['comment'];
 $gender = $_POST['gender'];
 
 $to = "laxmon@wikigets.com";
 $subject = "New contact form submission";
 $message =" A visitor of WIKIGETS has submited a form onine\n\n $name\n\n $email\n\n $phone \n\n $country \n\n $gender\n\n $comment";
 
 
 
 
   require_once('recaptchalib.php');
  $privatekey = "6LdK8_YSAAAAAJYPJduOpxhsL4Cy86NgwpCSJCod";
  $resp = recaptcha_check_answer ($privatekey,
                                $_SERVER["REMOTE_ADDR"],
                                $_POST["recaptcha_challenge_field"],
                                $_POST["recaptcha_response_field"]);
if (!$resp->is_valid) {
    	
	
	
 header	("Location:contact.php?s=2");
 
 
  } else {
    mail($to,$subject,$message);
	header	("Location:contact.php?s=1");
  }
  
  
}
  ?>

 <? 
 	
	$country_options= array("select","Afghanistan",	"Ã…Land Islands",	"Albania",	"Algeria",	"American Samoa",	"Andorra",	"Angola",	"Anguilla",	"Antarctica",	"Antigua And Barbuda",	"Argentina",	"Armenia",	"Aruba",	"Australia",	"Austria",	"Azerbaijan",	"Bahamas",	"Bahrain",	"Bangladesh",	"Barbados",	"Belarus",	"Belgium",	"Belize",	"Benin",	"Bermuda",	"Bhutan",	"Bolivia",	"Bosnia And Herzegovina",	"Botswana",	"Bouvet Island",	"Brazil",	"British Indian Ocean Territory",	"Brunei Darussalam",	"Bulgaria",	"Burkina Faso",	"Burundi",	"Cambodia",	"Cameroon",	"Canada",	"Cape Verde",	"Cayman Islands",	"Central African Republic",	"Chad",	"Chile",	"China",	"Christmas Island",	"Cocos (Keeling) Islands",	"Colombia",	"Comoros",	"Congo",	"Congo, The Democratic Republic Of The",	"Cook Islands",	"Costa Rica",	"Cote D'Ivoire",	"Croatia",	"Cuba",	"Cyprus",	"Czech Republic",	"Denmark",	"Djibouti",	"Dominica",	"Dominican Republic",	"Ecuador",	"Egypt",	"El Salvador",	"Equatorial Guinea",	"Eritrea",	"Estonia",	"Ethiopia",	"Falkland Islands (Malvinas)",	"Faroe Islands",	"Fiji",	"Finland",	"France",	"French Guiana",	"French Polynesia",	"French Southern Territories",	"Gabon",	"Gambia",	"Georgia",	"Germany",	"Ghana",	"Gibraltar",	"Greece",	"Greenland",	"Grenada",	"Guadeloupe",	"Guam",	"Guatemala",	"Guernsey",	"Guinea",	"Guinea-Bissau",	"Guyana",	"Haiti",	"Heard Island And Mcdonald Islands",	"Holy See (Vatican City State)",	"Honduras",	"Hong Kong",	"Hungary",	"Iceland",	"India",	"Indonesia",	"Iran, Islamic Republic Of",	"Iraq",	"Ireland",	"Isle Of Man",	"Israel",	"Italy",	"Jamaica",	"Japan",	"Jersey",	"Jordan",	"Kazakhstan",	"Kenya",	"Kiribati",	"Korea, Democratic People'S Republic Of",	"Korea, Republic Of",	"Kuwait",	"Kyrgyzstan",	"Lao People'S Democratic Republic",	"Latvia",	"Lebanon",	"Lesotho",	"Liberia",	"Libyan Arab Jamahiriya",	"Liechtenstein",	"Lithuania",	"Luxembourg",	"Macao",	"Macedonia, The Former Yugoslav Republic Of",	"Madagascar",	"Malawi",	"Malaysia",	"Maldives",	"Mali",	"Malta",	"Marshall Islands",	"Martinique",	"Mauritania",	"Mauritius",	"Mayotte",	"Mexico",	"Micronesia, Federated States Of",	"Moldova, Republic Of",	"Monaco",	"Mongolia",	"Montserrat",	"Morocco",	"Mozambique",	"Myanmar",	"Namibia",	"Nauru",	"Nepal",	"Netherlands",	"Netherlands Antilles",	"New Caledonia",	"New Zealand",	"Nicaragua",	"Niger",	"Nigeria",	"Niue",	"Norfolk Island",	"Northern Mariana Islands",	"Norway",	"Oman",	"Pakistan",	"Palau",	"Palestinian Territory, Occupied",	"Panama",	"Papua New Guinea",	"Paraguay",	"Peru",	"Philippines",	"Pitcairn",	"Poland",	"Portugal",	"Puerto Rico",	"Qatar",	"Reunion",	"Romania",	"Russian Federation",	"Rwanda",	"Saint Helena",	"Saint Kitts And Nevis",	"Saint Lucia",	"Saint Pierre And Miquelon",	"Saint Vincent And The Grenadines",	"Samoa",	"San Marino",	"Sao Tome And Principe",	"Saudi Arabia",	"Senegal",	"Serbia And Montenegro",	"Seychelles",	"Sierra Leone",	"Singapore",	"Slovakia",	"Slovenia",	"Solomon Islands",	"Somalia",	"South Africa",	"South Georgia And The South Sandwich Islands",	"Spain",	"Sri Lanka",	"Sudan",	"Suriname",	"Svalbard And Jan Mayen",	"Swaziland",	"Sweden",	"Switzerland",	"Syrian Arab Republic",	"Taiwan, Province Of China",	"Tajikistan",	"Tanzania, United Republic Of",	"Thailand",	"Timor-Leste",	"Togo",	"Tokelau",	"Tonga",	"Trinidad And Tobago",	"Tunisia",	"Turkey",	"Turkmenistan",	"Turks And Caicos Islands",	"Tuvalu",	"Uganda",	"Ukraine",	"United Arab Emirates",	"United Kingdom",	"United States",	"United States Minor Outlying Islands",	"Uruguay",	"Uzbekistan",	"Vanuatu",	"Venezuela",	"Viet Nam",	"Virgin Islands, British",	"Virgin Islands, U.S.",	"Wallis And Futuna",	"Western Sahara",	"Yemen",	"Zambia",	"Zimbabwe"
 
);

// define variables and set to empty values
$nameErr = $emailErr = $genderErr = $websiteErr = $countryErr = $phoneErr ="";
$name = $email = $gender = $comment = $website = $phone = "";
$country ="";
if ($_SERVER["REQUEST_METHOD"] == "POST") {
if (empty($_POST["name"])) {
$nameErr = "Name is required";
} else {
$name = test_input($_POST["name"]);
// check if name only contains letters and whitespace
if (!preg_match("/^[a-zA-Z ]*$/",$name)) {
$nameErr = "Only letters and white space allowed";
}
}
if (empty($_POST["email"])) {
$emailErr = "Email is required";
} else {
$email = test_input($_POST["email"]);
// check if e-mail address syntax is valid
if (!preg_match("/([\w\-]+\@[\w\-]+\.[\w\-]+)/",$email)) {
$emailErr = "Invalid email format";
}
}
if (empty($_POST["website"])) {
$website = "";
} else {
$website = test_input($_POST["website"]);
// check if URL address syntax is valid (this regular expression also allows dashes in the URL)
if (!preg_match("/\b(??:https?|ftp):\/\/|www\.)[-a-z0-9+&@#\/%?=~_|!:,.;]*[-a-z0-9+&@#\/%=~_|]/i",$website)) {
$websiteErr = "Invalid URL";
}
}
 
if (empty($_POST["comment"])) {
$comment = "";
} else {
$comment = test_input($_POST["comment"]);
}

if (empty($_POST["phone"])) {
$phone = "";
} else {

	
$phone = test_input($_POST["phone"]);
$phone = preg_replace('/\D/', '', $phone);
}
 
if (empty($_POST["gender"])) {
$genderErr = "Gender is required";
} else {
$gender = test_input($_POST["gender"]);
}
$country2 = $_POST['country'];
$country3= "select";
if($country2!= $country3)
{
	$country=$country2;
	
	}

else

 {
$country1 = "Please select your country";}
}

 
function test_input($data) {
$data = trim($data);
$data = stripslashes($data);
$data = htmlspecialchars($data);
return $data;
}
 ?>
 
 
 
 


 
<h2>CONTACT US</h2>
<p><?php 
$s=$_GET['s'];
if($s=='1'){
	Echo('<span class= "success"> Success!! An email has been sent to our web team. Please allow 24 hours for a response.</span>');
	}
else if ($s=='2')
{
	 
 
	Echo('<span class= "fail">Sorry! Please ensure to fill all feilds correctly</span>' );
	}

?>









</p>

<form method="post" action="<?php echo htmlspecialchars($_SERVER["PHP_SELF"]);?>">
  <p>Name:
  <input type="text" name="name" value="<?php echo $name;?>">
  <span class="error">* <?php echo $nameErr1;?></span>
  <br><br>
    E-mail: <input type="text" name="email" value="<?php echo $email;?>">
  <span class="error">* <?php echo $emailErr1;?></span>  </p>
  <p>Phone Number:<input type="text" name="phone" value="<?php echo $phone;?>">
  <span class="error"> <?php echo $phoneErr1;?></span>
  <br>
    <br>
    Country:
    <?php
$item = 'select';
  
echo '<select name="country">';
foreach($country_options as $c)
{
	$sel=''; // Set $sel to empty initially
	$tag = 'selected="selected"';
	
	if(isset($_POST['country']) && $_POST['country'] == $c) // Here we check if the form has been posted so an error isn't thrown and then check it's value against $c
	{ $sel = $tag; }
	elseif(!isset($_POST['country']) && $item == $c) // So that the $item doesn't override the posted value we need to check to make sure the form has NOT been submitted also in the 
	{ $sel = $tag; }	 
	 
	echo '<option value="'.$c.'" '.$sel.'>'.$c.'</option>';
}
echo '</select>';
 
?>
    <span class="error">*<?php echo (isset($country1)) ? $country1 : '';?></span>
    <br><br>
    <!--Website: <input type="text" name="website" value="<?php echo $website;?>">
    <span class="error"><?php echo $websiteErr1;?></span>
    <br><br>-->
    Gender:
    <input type="radio" name="gender" <?php if (isset($gender) && $gender=="female") echo "checked";?> value="female">Female
    <input type="radio" name="gender" <?php if (isset($gender) && $gender=="male") echo "checked";?> value="male">Male
    <span class="error">* <?php echo $genderErr1;?></span>
    <br><br>
    Comment: 
    <textarea name="comment" rows="5" cols="40"><?php echo $comment;?></textarea>
    <br>
    
    <?php
          require_once('recaptchalib.php');
          $publickey = "6LdK8_YSAAAAACMvxVRzJ7ZNqjQ9nT_dU6fEZdHx"; // you got this from the signup page
          echo recaptcha_get_html($publickey);
        ?>
    
    <br>
    <input type="submit" name="submit" value="Submit">
  </p>
</form>
 
 
</body>
</html>
Edited by laxi
Link to comment
Share on other sites

That thread was resolved as it was only the select option issue. That works well now.

 

 

The problem is that now after i put the captcha into my site no validation is happening.

 

After hitting submit the values dissapear from the form altogether though they were supposed to display validation errors.

can check the same in wikigets.com/contact.php.

 

I am looking to display validation errros on the form and keep form items intact so that the errors can be corrected and resend for submission instead of having to fill them all over again. Thank you again for looking into this.Please help.

 

 

Is this topic solved? You said in your other thread that you seemed to have fixed the issue?  Please confirm if you still need help.

 

Link to comment
Share on other sites

Ummm, wow, your current code is one of the worst jumbles of code I have seen in a long time.  Maybe you should take in depth look at another tutorial I have about how to validate a form and the flow of logic it need to go through.  Please take your time and follow it step by step and then slowly put in the additional input fields you need.

http://amecms.com/article/How-to-validate-a-form-the-right-way

Link to comment
Share on other sites

You need a space after Location: on this line

 header	("Location:contact.php?s=2");

and a die(); after you print the header because you don't want the rest of the script to execute.

 

Wait, if you go back to your own script with these headers you lose all of your data. instead of doing this just set a variable $myvariable=1 or $myvariable=2 then use that variable instead of $_GET['s']

Link to comment
Share on other sites

i could not understand. Can you explain or show it?

 

Thank you

You need a space after Location: on this line



 header	("Location:contact.php?s=2");

and a die(); after you print the header because you don't want the rest of the script to execute.

 

Wait, if you go back to your own script with these headers you lose all of your data. instead of doing this just set a variable $myvariable=1 or $myvariable=2 then use that variable instead of $_GET['s']

Link to comment
Share on other sites

You are trying to pass a variable value by using the header() function. That is where you lose your data.

 

replace the 5 lines starting at line 38 with

if (!$resp->is_valid) {
$s=2;
} else {
$s=1;
}

and delete line 144.

$s=$_GET['s']; // this is not needed
Link to comment
Share on other sites

The values and error messages comes up.

 

but still unable to send the email to the email address.

 

please check. wikigets.com/contact.php

 

code below

<!DOCTYPE HTML>
<html>
<head>
<style>
.error {color: #FF0000;}
</style>
</head>
<body>
 <?php 
 if (isset($_POST['submit'])){
 
 $name = $_POST['name'];
 $email = $_POST['email'];
 $phone = $_POST['phone'];
 $country = $_POST['country'];
 $comment = $_POST['comment'];
 $gender = $_POST['gender'];
 
 $to = "laxmon@wikigets.com";
 $subject = "New contact form submission";
 $message =" A visitor of WIKIGETS has submited a form onine\n\n $name\n\n $email\n\n $phone \n\n $country \n\n $gender\n\n $comment";
 if ($security=="40") {
	 
     $s=1;
} else {
$s=2;
  }
  
  
}
 ?>
<?php
$country_options= array("select","Afghanistan",	"Ã…Land Islands",	"Albania",	"Algeria",	"American Samoa",	"Andorra",	"Angola",	"Anguilla",	"Antarctica",	"Antigua And Barbuda",	"Argentina",	"Armenia",	"Aruba",	"Australia",	"Austria",	"Azerbaijan",	"Bahamas",	"Bahrain",	"Bangladesh",	"Barbados",	"Belarus",	"Belgium",	"Belize",	"Benin",	"Bermuda",	"Bhutan",	"Bolivia",	"Bosnia And Herzegovina",	"Botswana",	"Bouvet Island",	"Brazil",	"British Indian Ocean Territory",	"Brunei Darussalam",	"Bulgaria",	"Burkina Faso",	"Burundi",	"Cambodia",	"Cameroon",	"Canada",	"Cape Verde",	"Cayman Islands",	"Central African Republic",	"Chad",	"Chile",	"China",	"Christmas Island",	"Cocos (Keeling) Islands",	"Colombia",	"Comoros",	"Congo",	"Congo, The Democratic Republic Of The",	"Cook Islands",	"Costa Rica",	"Cote D'Ivoire",	"Croatia",	"Cuba",	"Cyprus",	"Czech Republic",	"Denmark",	"Djibouti",	"Dominica",	"Dominican Republic",	"Ecuador",	"Egypt",	"El Salvador",	"Equatorial Guinea",	"Eritrea",	"Estonia",	"Ethiopia",	"Falkland Islands (Malvinas)",	"Faroe Islands",	"Fiji",	"Finland",	"France",	"French Guiana",	"French Polynesia",	"French Southern Territories",	"Gabon",	"Gambia",	"Georgia",	"Germany",	"Ghana",	"Gibraltar",	"Greece",	"Greenland",	"Grenada",	"Guadeloupe",	"Guam",	"Guatemala",	"Guernsey",	"Guinea",	"Guinea-Bissau",	"Guyana",	"Haiti",	"Heard Island And Mcdonald Islands",	"Holy See (Vatican City State)",	"Honduras",	"Hong Kong",	"Hungary",	"Iceland",	"India",	"Indonesia",	"Iran, Islamic Republic Of",	"Iraq",	"Ireland",	"Isle Of Man",	"Israel",	"Italy",	"Jamaica",	"Japan",	"Jersey",	"Jordan",	"Kazakhstan",	"Kenya",	"Kiribati",	"Korea, Democratic People'S Republic Of",	"Korea, Republic Of",	"Kuwait",	"Kyrgyzstan",	"Lao People'S Democratic Republic",	"Latvia",	"Lebanon",	"Lesotho",	"Liberia",	"Libyan Arab Jamahiriya",	"Liechtenstein",	"Lithuania",	"Luxembourg",	"Macao",	"Macedonia, The Former Yugoslav Republic Of",	"Madagascar",	"Malawi",	"Malaysia",	"Maldives",	"Mali",	"Malta",	"Marshall Islands",	"Martinique",	"Mauritania",	"Mauritius",	"Mayotte",	"Mexico",	"Micronesia, Federated States Of",	"Moldova, Republic Of",	"Monaco",	"Mongolia",	"Montserrat",	"Morocco",	"Mozambique",	"Myanmar",	"Namibia",	"Nauru",	"Nepal",	"Netherlands",	"Netherlands Antilles",	"New Caledonia",	"New Zealand",	"Nicaragua",	"Niger",	"Nigeria",	"Niue",	"Norfolk Island",	"Northern Mariana Islands",	"Norway",	"Oman",	"Pakistan",	"Palau",	"Palestinian Territory, Occupied",	"Panama",	"Papua New Guinea",	"Paraguay",	"Peru",	"Philippines",	"Pitcairn",	"Poland",	"Portugal",	"Puerto Rico",	"Qatar",	"Reunion",	"Romania",	"Russian Federation",	"Rwanda",	"Saint Helena",	"Saint Kitts And Nevis",	"Saint Lucia",	"Saint Pierre And Miquelon",	"Saint Vincent And The Grenadines",	"Samoa",	"San Marino",	"Sao Tome And Principe",	"Saudi Arabia",	"Senegal",	"Serbia And Montenegro",	"Seychelles",	"Sierra Leone",	"Singapore",	"Slovakia",	"Slovenia",	"Solomon Islands",	"Somalia",	"South Africa",	"South Georgia And The South Sandwich Islands",	"Spain",	"Sri Lanka",	"Sudan",	"Suriname",	"Svalbard And Jan Mayen",	"Swaziland",	"Sweden",	"Switzerland",	"Syrian Arab Republic",	"Taiwan, Province Of China",	"Tajikistan",	"Tanzania, United Republic Of",	"Thailand",	"Timor-Leste",	"Togo",	"Tokelau",	"Tonga",	"Trinidad And Tobago",	"Tunisia",	"Turkey",	"Turkmenistan",	"Turks And Caicos Islands",	"Tuvalu",	"Uganda",	"Ukraine",	"United Arab Emirates",	"United Kingdom",	"United States",	"United States Minor Outlying Islands",	"Uruguay",	"Uzbekistan",	"Vanuatu",	"Venezuela",	"Viet Nam",	"Virgin Islands, British",	"Virgin Islands, U.S.",	"Wallis And Futuna",	"Western Sahara",	"Yemen",	"Zambia",	"Zimbabwe"
 
);

// define variables and set to empty values
$nameErr = $emailErr = $genderErr = $websiteErr = $countryErr = $phoneErr = "";
$name = $email = $gender = $comment = $website = $phone = "";
$country ="";
if ($_SERVER["REQUEST_METHOD"] == "POST") {
if (empty($_POST["name"])) {
$nameErr = "Name is required";
} else {
$name = test_input($_POST["name"]);
// check if name only contains letters and whitespace
if (!preg_match("/^[a-zA-Z ]*$/",$name)) {
$nameErr = "Only letters and white space allowed";
}
}
if (empty($_POST["email"])) {
$emailErr = "Email is required";
} else {
$email = test_input($_POST["email"]);
// check if e-mail address syntax is valid
if (!preg_match("/([\w\-]+\@[\w\-]+\.[\w\-]+)/",$email)) {
$emailErr = "Invalid email format";
}
}
if (empty($_POST["website"])) {
$website = "";
} else {
$website = test_input($_POST["website"]);
// check if URL address syntax is valid (this regular expression also allows dashes in the URL)
if (!preg_match("/\b(??:https?|ftp):\/\/|www\.)[-a-z0-9+&@#\/%?=~_|!:,.;]*[-a-z0-9+&@#\/%=~_|]/i",$website)) {
$websiteErr = "Invalid URL";
}

if (empty($_POST["phone"])) {
$phone = "";
} else {
$phone = test_input($_POST["phone"]);
// check if URL address syntax is valid (this regular expression also allows dashes in the URL)
}


}
 
if (empty($_POST["comment"])) {
$comment = "";
} else {
$comment = test_input($_POST["comment"]);
}
 
if (empty($_POST["gender"])) {
$genderErr = "Gender is required";
} else {
$gender = test_input($_POST["gender"]);
}
$country = $_POST['country'];
if (!in_array($country, $country_options)) {
$country1 = "Please select your country";}
}
 
function test_input($data) {
$data = trim($data);
$data = stripslashes($data);
$data = htmlspecialchars($data);
return $data;
}
?>
 
<h2>contact us</h2>
<?php 

if($s=='1'){
	Echo('<span class= "success"> Success!! An email has been sent to our web team. Please allow 24 hours for a response.</span>');
	}
else if ($s=='2')
{
	 
 
	Echo('<span class= "fail">Sorry! Please ensure to fill all feilds correctly</span>' );
	}

?>

<p><span class="error">* required field.</span></p>
<form method="post" action="<?php echo htmlspecialchars($_SERVER["PHP_SELF"]);?>">
  <p>Name:
  <input type="text" name="name" value="<?php echo $name;?>">
  <span class="error">* <?php echo $nameErr;?></span>
  <br><br>
    E-mail: <input type="text" name="email" value="<?php echo $email;?>">
  <span class="error">* <?php echo $emailErr;?></span>
  <br><br>
   Phone Number: <input type="text" name="phone" value="<?php echo $phone;?>">
  
  <br><br>
    Country:
  <?php
$item = 'select';
  
echo '<select name="country">';
foreach($country_options as $c)
{
	$sel=''; // Set $sel to empty initially
	$tag = 'selected="selected"';
	
	if(isset($_POST['country']) && $_POST['country'] == $c) // Here we check if the form has been posted so an error isn't thrown and then check it's value against $c
	{ $sel = $tag; }
	elseif(!isset($_POST['country']) && $item == $c) // So that the $item doesn't override the posted value we need to check to make sure the form has NOT been submitted also in the 
	{ $sel = $tag; }	 
	 
	echo '<option value="'.$c.'" '.$sel.'>'.$c.'</option>';
}
echo '</select>';
 
?>
  <span class="error">*<?php echo (isset($country1)) ? $country1 : '';?></span>
  <br><br>
    Website: <input type="text" name="website" value="<?php echo $website;?>">
  <span class="error"><?php echo $websiteErr;?></span>
  <br><br>
    Gender:
  <input type="radio" name="gender" <?php if (isset($gender) && $gender=="female") echo "checked";?> value="female">Female
  <input type="radio" name="gender" <?php if (isset($gender) && $gender=="male") echo "checked";?> value="male">Male
  <span class="error">* <?php echo $genderErr;?></span>
  <br><br>
    Comment: 
  <textarea name="comment" rows="5" cols="40"><?php echo $comment;?></textarea>
  </p>
  <p>What is 8+32 = :  <input type="text" name="security" id="security" ><br>
    <br>
    <input type="submit" name="submit" value="Submit">
  </p>
</form>
 
 
</body>
</html>

 

You are trying to pass a variable value by using the header() function. That is where you lose your data.

 

replace the 5 lines starting at line 38 with





if (!$resp->is_valid) {
$s=2;
} else {
$s=1;
}

and delete line 144.





$s=$_GET['s']; // this is not needed

 

Link to comment
Share on other sites

your last posted code doesn't have any mail() statement in it, so, there's no way it can send an email. i recommend reviewing your code to make sure it is doing what you expect.

 

 

@davidannis, a header() redirect has no problem using url's with parameters. if you had a case where it didn't work, i can list more than six reasons why. and afaik, the lack of a space isn't a problem (just tested.)

Link to comment
Share on other sites

I Noticed that and have added mail().

 

my code is below. Still no go all feilds stay like that with out submitting.

 

Also i notice that the country warning doesnt highlight no matter what.

 

Please check it in wikigets.com/contact.php

<!DOCTYPE HTML>
<html>
<head>
<style>
.error {color: #FF0000;}
</style>
</head>
<body>
 <?php 
 if (isset($_POST['submit'])){
 
 $name = $_POST['name'];
 $email = $_POST['email'];
 $phone = $_POST['phone'];
 $country = $_POST['country'];
 $comment = $_POST['comment'];
 $gender = $_POST['gender'];
 
 $to = "laxmon@wikigets.com";
 $subject = "New contact form submission";
 $message =" A visitor of WIKIGETS has submited a form onine\n\n $name\n\n $email\n\n $phone \n\n $country \n\n $gender\n\n $comment";
 if ($security=="40") {
	 
     $s=1;
} else {
$s=2;
  }
  if($s=='1'){
	
	mail($to,$subject,$message);
	Echo('<span class= "success"> Success!! An email has been sent to our web team. Please allow 24 hours for a response.</span>');
	}
else if ($s=='2')
{
	 
 
	Echo('<span class= "fail">Sorry! Please ensure to fill all feilds correctly</span>' );
	}
 
  
}
 ?>
<?php
$country_options= array("select","Afghanistan",	"ÅLand Islands",	"Albania",	"Algeria",	"American Samoa",	"Andorra",	"Angola",	"Anguilla",	"Antarctica",	"Antigua And Barbuda",	"Argentina",	"Armenia",	"Aruba",	"Australia",	"Austria",	"Azerbaijan",	"Bahamas",	"Bahrain",	"Bangladesh",	"Barbados",	"Belarus",	"Belgium",	"Belize",	"Benin",	"Bermuda",	"Bhutan",	"Bolivia",	"Bosnia And Herzegovina",	"Botswana",	"Bouvet Island",	"Brazil",	"British Indian Ocean Territory",	"Brunei Darussalam",	"Bulgaria",	"Burkina Faso",	"Burundi",	"Cambodia",	"Cameroon",	"Canada",	"Cape Verde",	"Cayman Islands",	"Central African Republic",	"Chad",	"Chile",	"China",	"Christmas Island",	"Cocos (Keeling) Islands",	"Colombia",	"Comoros",	"Congo",	"Congo, The Democratic Republic Of The",	"Cook Islands",	"Costa Rica",	"Cote D'Ivoire",	"Croatia",	"Cuba",	"Cyprus",	"Czech Republic",	"Denmark",	"Djibouti",	"Dominica",	"Dominican Republic",	"Ecuador",	"Egypt",	"El Salvador",	"Equatorial Guinea",	"Eritrea",	"Estonia",	"Ethiopia",	"Falkland Islands (Malvinas)",	"Faroe Islands",	"Fiji",	"Finland",	"France",	"French Guiana",	"French Polynesia",	"French Southern Territories",	"Gabon",	"Gambia",	"Georgia",	"Germany",	"Ghana",	"Gibraltar",	"Greece",	"Greenland",	"Grenada",	"Guadeloupe",	"Guam",	"Guatemala",	"Guernsey",	"Guinea",	"Guinea-Bissau",	"Guyana",	"Haiti",	"Heard Island And Mcdonald Islands",	"Holy See (Vatican City State)",	"Honduras",	"Hong Kong",	"Hungary",	"Iceland",	"India",	"Indonesia",	"Iran, Islamic Republic Of",	"Iraq",	"Ireland",	"Isle Of Man",	"Israel",	"Italy",	"Jamaica",	"Japan",	"Jersey",	"Jordan",	"Kazakhstan",	"Kenya",	"Kiribati",	"Korea, Democratic People'S Republic Of",	"Korea, Republic Of",	"Kuwait",	"Kyrgyzstan",	"Lao People'S Democratic Republic",	"Latvia",	"Lebanon",	"Lesotho",	"Liberia",	"Libyan Arab Jamahiriya",	"Liechtenstein",	"Lithuania",	"Luxembourg",	"Macao",	"Macedonia, The Former Yugoslav Republic Of",	"Madagascar",	"Malawi",	"Malaysia",	"Maldives",	"Mali",	"Malta",	"Marshall Islands",	"Martinique",	"Mauritania",	"Mauritius",	"Mayotte",	"Mexico",	"Micronesia, Federated States Of",	"Moldova, Republic Of",	"Monaco",	"Mongolia",	"Montserrat",	"Morocco",	"Mozambique",	"Myanmar",	"Namibia",	"Nauru",	"Nepal",	"Netherlands",	"Netherlands Antilles",	"New Caledonia",	"New Zealand",	"Nicaragua",	"Niger",	"Nigeria",	"Niue",	"Norfolk Island",	"Northern Mariana Islands",	"Norway",	"Oman",	"Pakistan",	"Palau",	"Palestinian Territory, Occupied",	"Panama",	"Papua New Guinea",	"Paraguay",	"Peru",	"Philippines",	"Pitcairn",	"Poland",	"Portugal",	"Puerto Rico",	"Qatar",	"Reunion",	"Romania",	"Russian Federation",	"Rwanda",	"Saint Helena",	"Saint Kitts And Nevis",	"Saint Lucia",	"Saint Pierre And Miquelon",	"Saint Vincent And The Grenadines",	"Samoa",	"San Marino",	"Sao Tome And Principe",	"Saudi Arabia",	"Senegal",	"Serbia And Montenegro",	"Seychelles",	"Sierra Leone",	"Singapore",	"Slovakia",	"Slovenia",	"Solomon Islands",	"Somalia",	"South Africa",	"South Georgia And The South Sandwich Islands",	"Spain",	"Sri Lanka",	"Sudan",	"Suriname",	"Svalbard And Jan Mayen",	"Swaziland",	"Sweden",	"Switzerland",	"Syrian Arab Republic",	"Taiwan, Province Of China",	"Tajikistan",	"Tanzania, United Republic Of",	"Thailand",	"Timor-Leste",	"Togo",	"Tokelau",	"Tonga",	"Trinidad And Tobago",	"Tunisia",	"Turkey",	"Turkmenistan",	"Turks And Caicos Islands",	"Tuvalu",	"Uganda",	"Ukraine",	"United Arab Emirates",	"United Kingdom",	"United States",	"United States Minor Outlying Islands",	"Uruguay",	"Uzbekistan",	"Vanuatu",	"Venezuela",	"Viet Nam",	"Virgin Islands, British",	"Virgin Islands, U.S.",	"Wallis And Futuna",	"Western Sahara",	"Yemen",	"Zambia",	"Zimbabwe"
 
);
 
// define variables and set to empty values
$nameErr = $emailErr = $genderErr = $websiteErr = $countryErr = $phoneErr = "";
$name = $email = $gender = $comment = $website = $phone = "";
$country ="";
if ($_SERVER["REQUEST_METHOD"] == "POST") {
if (empty($_POST["name"])) {
$nameErr = "Name is required";
} else {
$name = test_input($_POST["name"]);
// check if name only contains letters and whitespace
if (!preg_match("/^[a-zA-Z ]*$/",$name)) {
$nameErr = "Only letters and white space allowed";
}
}
if (empty($_POST["email"])) {
$emailErr = "Email is required";
} else {
$email = test_input($_POST["email"]);
// check if e-mail address syntax is valid
if (!preg_match("/([\w\-]+\@[\w\-]+\.[\w\-]+)/",$email)) {
$emailErr = "Invalid email format";
}
}
if (empty($_POST["website"])) {
$website = "";
} else {
$website = test_input($_POST["website"]);
// check if URL address syntax is valid (this regular expression also allows dashes in the URL)
if (!preg_match("/\b(??:https?|ftp):\/\/|www\.)[-a-z0-9+&@#\/%?=~_|!:,.;]*[-a-z0-9+&@#\/%=~_|]/i",$website)) {
$websiteErr = "Invalid URL";
}
 
if (empty($_POST["phone"])) {
$phone = "";
} else {
$phone = test_input($_POST["phone"]);
// check if URL address syntax is valid (this regular expression also allows dashes in the URL)
}
 
 
}
 
if (empty($_POST["comment"])) {
$comment = "";
} else {
$comment = test_input($_POST["comment"]);
}
 
if (empty($_POST["gender"])) {
$genderErr = "Gender is required";
} else {
$gender = test_input($_POST["gender"]);
}
$country = $_POST['country'];
if (!in_array($country, $country_options)) {
$country1 = "Please select your country";}
}
 
function test_input($data) {
$data = trim($data);
$data = stripslashes($data);
$data = htmlspecialchars($data);
return $data;
}
?>
 
<h2>contact us</h2>

 
<p><span class="error">* required field.</span></p>
<form method="post" action="<?php echo htmlspecialchars($_SERVER["PHP_SELF"]);?>">
  <p>Name:
  <input type="text" name="name" value="<?php echo $name;?>">
  <span class="error">* <?php echo $nameErr;?></span>
  <br><br>
    E-mail: <input type="text" name="email" value="<?php echo $email;?>">
  <span class="error">* <?php echo $emailErr;?></span>
  <br><br>
   Phone Number: <input type="text" name="phone" value="<?php echo $phone;?>">
  
  <br><br>
    Country:
  <?php
$item = 'select';
  
echo '<select name="country">';
foreach($country_options as $c)
{
	$sel=''; // Set $sel to empty initially
	$tag = 'selected="selected"';
	
	if(isset($_POST['country']) && $_POST['country'] == $c) // Here we check if the form has been posted so an error isn't thrown and then check it's value against $c
	{ $sel = $tag; }
	elseif(!isset($_POST['country']) && $item == $c) // So that the $item doesn't override the posted value we need to check to make sure the form has NOT been submitted also in the 
	{ $sel = $tag; }	 
	 
	echo '<option value="'.$c.'" '.$sel.'>'.$c.'</option>';
}
echo '</select>';
 
?>
  <span class="error">*<?php echo (isset($country1)) ? $country1 : '';?></span>
  <br><br>
    Website: <input type="text" name="website" value="<?php echo $website;?>">
  <span class="error"><?php echo $websiteErr;?></span>
  <br><br>
    Gender:
  <input type="radio" name="gender" <?php if (isset($gender) && $gender=="female") echo "checked";?> value="female">Female
  <input type="radio" name="gender" <?php if (isset($gender) && $gender=="male") echo "checked";?> value="male">Male
  <span class="error">* <?php echo $genderErr;?></span>
  <br><br>
    Comment: 
  <textarea name="comment" rows="5" cols="40"><?php echo $comment;?></textarea>
  </p>
  <p>What is 8+32 = :  <input type="text" name="security" id="security" ><br>
    <br>
    <input type="submit" name="submit" value="Submit">
  </p>
</form>
 
 
</body>
</html>

your last posted code doesn't have any mail() statement in it, so, there's no way it can send an email. i recommend reviewing your code to make sure it is doing what you expect.

 

 

@davidannis, a header() redirect has no problem using url's with parameters. if you had a case where it didn't work, i can list more than six reasons why. and afaik, the lack of a space isn't a problem (just tested.)

Link to comment
Share on other sites

your last posted code doesn't have any mail() statement in it, so, there's no way it can send an email. i recommend reviewing your code to make sure it is doing what you expect.

 

 

@davidannis, a header() redirect has no problem using url's with parameters. if you had a case where it didn't work, i can list more than six reasons why. and afaik, the lack of a space isn't a problem (just tested.)

The problem is not that a header has a problem supporting parameters but that the OP tried to set the value of $s by sending the program from contact.php to contact.php?s=1 and then adding $s=$_GET['s']. Since he did that he lost all of the other parameters. If he added all the other parameters to the header he could have set $s that way but it is a horribly inefficient way to set a value because (among other issues) it requires a round trip from server to browser.

 

I believe that I have had a problem with spacing in a header, the manual page shows a space, and a quick Google shows others who share the concern though it seems to work in most cases if the space is omitted. The spec says that there is supposed to be at least one space before the value http://www.w3.org/Protocols/rfc2616/rfc2616-sec4.html#sec4.2

Edited by davidannis
Link to comment
Share on other sites

Hi,

 

My code looks like this now but the form elements are not submitting to the email.

 

it's just stuck there in the form.

 

Please help me send the email . webpage wikigets.com/contact.php

<!DOCTYPE HTML>
<html>
<head>
<style>
.error {color: #FF0000;}
</style>
</head>
<body>
 <?php 
 if (isset($_POST['submit'])){
 
 $name = $_POST['name'];
 $email = $_POST['email'];
 $phone = $_POST['phone'];
 $country = $_POST['country'];
 $comment = $_POST['comment'];
 $gender = $_POST['gender'];
 
 $to = "laxmon@wikigets.com";
 $subject = "New contact form submission";
 $message =" A visitor of WIKIGETS has submited a form onine\n\n $name\n\n $email\n\n $phone \n\n $country \n\n $gender\n\n $comment";
 if ($security=="40") {
	 
     $s=1;
} else {
$s=2;
  }
  if($s=='1'){
	
	mail($to,$subject,$message);
	Echo('<span class= "success"> Success!! An email has been sent to our web team. Please allow 24 hours for a response.</span>');
	}
else if ($s=='2')
{
	 
 
	Echo('<span class= "fail">Sorry! Please ensure to fill all feilds correctly</span>' );
	}
 
  
}
 ?>
<?php
$country_options= array("select","Afghanistan",	"Albania",	"Algeria",	"American Samoa",	"Andorra",	"Angola",	"Anguilla",	"Antarctica",	"Antigua And Barbuda",	"Argentina",	"Armenia",	"Aruba",	"Australia",	"Austria",	"Azerbaijan",	"Bahamas",	"Bahrain",	"Bangladesh",	"Barbados",	"Belarus",	"Belgium",	"Belize",	"Benin",	"Bermuda",	"Bhutan",	"Bolivia",	"Bosnia And Herzegovina",	"Botswana",	"Bouvet Island",	"Brazil",	"British Indian Ocean Territory",	"Brunei Darussalam",	"Bulgaria",	"Burkina Faso",	"Burundi",	"Cambodia",	"Cameroon",	"Canada",	"Cape Verde",	"Cayman Islands",	"Central African Republic",	"Chad",	"Chile",	"China",	"Christmas Island",	"Cocos (Keeling) Islands",	"Colombia",	"Comoros",	"Congo",	"Congo, The Democratic Republic Of The",	"Cook Islands",	"Costa Rica",	"Cote D'Ivoire",	"Croatia",	"Cuba",	"Cyprus",	"Czech Republic",	"Denmark",	"Djibouti",	"Dominica",	"Dominican Republic",	"Ecuador",	"Egypt",	"El Salvador",	"Equatorial Guinea",	"Eritrea",	"Estonia",	"Ethiopia",	"Falkland Islands (Malvinas)",	"Faroe Islands",	"Fiji",	"Finland",	"France",	"French Guiana",	"French Polynesia",	"French Southern Territories",	"Gabon",	"Gambia",	"Georgia",	"Germany",	"Ghana",	"Gibraltar",	"Greece",	"Greenland",	"Grenada",	"Guadeloupe",	"Guam",	"Guatemala",	"Guernsey",	"Guinea",	"Guinea-Bissau",	"Guyana",	"Haiti",	"Heard Island And Mcdonald Islands",	"Holy See (Vatican City State)",	"Honduras",	"Hong Kong",	"Hungary",	"Iceland",	"India",	"Indonesia",	"Iran, Islamic Republic Of",	"Iraq",	"Ireland",	"Isle Of Man",	"Israel",	"Italy",	"Jamaica",	"Japan",	"Jersey",	"Jordan",	"Kazakhstan",	"Kenya",	"Kiribati",	"Korea, Democratic People'S Republic Of",	"Korea, Republic Of",	"Kuwait",	"Kyrgyzstan",	"Lao People'S Democratic Republic",	"Latvia",	"Lebanon",	"Lesotho",	"Liberia",	"Libyan Arab Jamahiriya",	"Liechtenstein",	"Lithuania",	"Luxembourg",	"Macao",	"Macedonia, The Former Yugoslav Republic Of",	"Madagascar",	"Malawi",	"Malaysia",	"Maldives",	"Mali",	"Malta",	"Marshall Islands",	"Martinique",	"Mauritania",	"Mauritius",	"Mayotte",	"Mexico",	"Micronesia, Federated States Of",	"Moldova, Republic Of",	"Monaco",	"Mongolia",	"Montserrat",	"Morocco",	"Mozambique",	"Myanmar",	"Namibia",	"Nauru",	"Nepal",	"Netherlands",	"Netherlands Antilles",	"New Caledonia",	"New Zealand",	"Nicaragua",	"Niger",	"Nigeria",	"Niue",	"Norfolk Island",	"Northern Mariana Islands",	"Norway",	"Oman",	"Pakistan",	"Palau",	"Palestinian Territory, Occupied",	"Panama",	"Papua New Guinea",	"Paraguay",	"Peru",	"Philippines",	"Pitcairn",	"Poland",	"Portugal",	"Puerto Rico",	"Qatar",	"Reunion",	"Romania",	"Russian Federation",	"Rwanda",	"Saint Helena",	"Saint Kitts And Nevis",	"Saint Lucia",	"Saint Pierre And Miquelon",	"Saint Vincent And The Grenadines",	"Samoa",	"San Marino",	"Sao Tome And Principe",	"Saudi Arabia",	"Senegal",	"Serbia And Montenegro",	"Seychelles",	"Sierra Leone",	"Singapore",	"Slovakia",	"Slovenia",	"Solomon Islands",	"Somalia",	"South Africa",	"South Georgia And The South Sandwich Islands",	"Spain",	"Sri Lanka",	"Sudan",	"Suriname",	"Svalbard And Jan Mayen",	"Swaziland",	"Sweden",	"Switzerland",	"Syrian Arab Republic",	"Taiwan, Province Of China",	"Tajikistan",	"Tanzania, United Republic Of",	"Thailand",	"Timor-Leste",	"Togo",	"Tokelau",	"Tonga",	"Trinidad And Tobago",	"Tunisia",	"Turkey",	"Turkmenistan",	"Turks And Caicos Islands",	"Tuvalu",	"Uganda",	"Ukraine",	"United Arab Emirates",	"United Kingdom",	"United States",	"United States Minor Outlying Islands",	"Uruguay",	"Uzbekistan",	"Vanuatu",	"Venezuela",	"Viet Nam",	"Virgin Islands, British",	"Virgin Islands, U.S.",	"Wallis And Futuna",	"Western Sahara",	"Yemen",	"Zambia",	"Zimbabwe"
 
);
 
// define variables and set to empty values
$nameErr = $emailErr = $genderErr = $websiteErr = $countryErr = $phoneErr = "";
$name = $email = $gender = $comment = $website = $phone = "";
$country ="";
if ($_SERVER["REQUEST_METHOD"] == "POST") {
if (empty($_POST["name"])) {
$nameErr = "Name is required";
} else {
$name = test_input($_POST["name"]);
// check if name only contains letters and whitespace
if (!preg_match("/^[a-zA-Z ]*$/",$name)) {
$nameErr = "Only letters and white space allowed";
}
}
if (empty($_POST["email"])) {
$emailErr = "Email is required";
} else {
$email = test_input($_POST["email"]);
// check if e-mail address syntax is valid
if (!preg_match("/([\w\-]+\@[\w\-]+\.[\w\-]+)/",$email)) {
$emailErr = "Invalid email format";
}
}
if (empty($_POST["website"])) {
$website = "";
} else {
$website = test_input($_POST["website"]);
// check if URL address syntax is valid (this regular expression also allows dashes in the URL)
if (!preg_match("/\b(??:https?|ftp):\/\/|www\.)[-a-z0-9+&@#\/%?=~_|!:,.;]*[-a-z0-9+&@#\/%=~_|]/i",$website)) {
$websiteErr = "Invalid URL";
}
 
if (empty($_POST["phone"])) {
$phone = "";
} else {
$phone = test_input($_POST["phone"]);
// check if URL address syntax is valid (this regular expression also allows dashes in the URL)
}
 
 
}
 
if (empty($_POST["comment"])) {
$comment = "";
} else {
$comment = test_input($_POST["comment"]);
}
 
if (empty($_POST["gender"])) {
$genderErr = "Gender is required";
} else {
$gender = test_input($_POST["gender"]);
}
$country = $_POST['country'];
if (!in_array($country, $country_options)) {
$country1 = "Please select your country";}
}
 
function test_input($data) {
$data = trim($data);
$data = stripslashes($data);
$data = htmlspecialchars($data);
return $data;
}
?>
 
<h2>contact us</h2>

 
<br>
<form method="post" action="<?php echo htmlspecialchars($_SERVER["PHP_SELF"]);?>">
  <p>Name:
  <input type="text" name="name" value="<?php echo $name;?>">
  <span class="error">* <?php echo $nameErr;?></span>
  <br><br>
    E-mail: <input type="text" name="email" value="<?php echo $email;?>">
  <span class="error">* <?php echo $emailErr;?></span>
  <br><br>
   Phone Number: <input type="text" name="phone" value="<?php echo $phone;?>">
  
  <br><br>
    Country:
  <?php
$item = 'select';
  
echo '<select name="country">';
foreach($country_options as $c)
{
	$sel=''; // Set $sel to empty initially
	$tag = 'selected="selected"';
	
	if(isset($_POST['country']) && $_POST['country'] == $c) // Here we check if the form has been posted so an error isn't thrown and then check it's value against $c
	{ $sel = $tag; }
	elseif(!isset($_POST['country']) && $item == $c) // So that the $item doesn't override the posted value we need to check to make sure the form has NOT been submitted also in the 
	{ $sel = $tag; }	 
	 
	echo '<option value="'.$c.'" '.$sel.'>'.$c.'</option>';
}
echo '</select>';
 
?>
  <span class="error">*<?php echo (isset($country1)) ? $country1 : '';?></span>
  <br><br>
    Website: <input type="text" name="website" value="<?php echo $website;?>">
  <span class="error"><?php echo $websiteErr;?></span>
  <br><br>
    Gender:
  <input type="radio" name="gender" <?php if (isset($gender) && $gender=="female") echo "checked";?> value="female">Female
  <input type="radio" name="gender" <?php if (isset($gender) && $gender=="male") echo "checked";?> value="male">Male
  <span class="error">* <?php echo $genderErr;?></span>
  <br><br>
    Comment: 
  <textarea name="comment" rows="5" cols="40"><?php echo $comment;?></textarea>
  </p>
  <p>What is 8+32 = :  <input type="text" name="security" id="security" ><br>
    <br>
    <input type="submit" name="submit" value="Submit">
  </p>
</form>
 
 
</body>
</html>

The problem is not that a header has a problem supporting parameters but that the OP tried to set the value of $s by sending the program from contact.php to contact.php?s=1 and then adding $s=$_GET['s']. Since he did that he lost all of the other parameters. If he added all the other parameters to the header he could have set $s that way but it is a horribly inefficient way to set a value because (among other issues) it requires a round trip from server to browser.

 

I believe that I have had a problem with spacing in a header, the manual page shows a space, and a quick Google shows others who share the concern though it seems to work in most cases if the space is omitted. The spec says that there is supposed to be at least one space before the value http://www.w3.org/Protocols/rfc2616/rfc2616-sec4.html#sec4.2

Link to comment
Share on other sites

Here is a reworked and functional code based on your original code.  It does include the captcha which you seem to have removed in your more recent posts.

<?php
require_once('recaptchalib.php');
$privatekey = "6LdK8_YSAAAAAJYPJduOpxhsL4Cy86NgwpCSJCod";
$publickey = "6LdK8_YSAAAAACMvxVRzJ7ZNqjQ9nT_dU6fEZdHx"; // you got this from the signup page

function validCaptcha($privatekey)
{	
	$resp = recaptcha_check_answer ($privatekey, $_SERVER["REMOTE_ADDR"], $_POST["recaptcha_challenge_field"], $_POST["recaptcha_response_field"]);
	
	if($resp->is_valid === FALSE)
	{ return $errors[] = "The Captcha did not pass validation. Please try again."; }
	else{ return TRUE; }
}

function cleanTextarea($p)
{
	$post = htmlentities(trim($p));
	return $post;
}

function requiredFields($posted, $req)
{
	foreach($posted as $key => $val)
	{
		$val = cleanTextarea($val);
		if(in_array($key, $req) && empty($val))
		{
			$bad = TRUE;
			return $errors[] = 'Please fill in all required fields'; // If a value was empty we add an error to the $GLOBALS['errors'] array so we can display it later to the user.
			
			break 1;
		}
	}
	if(!isset($bad)){return TRUE;} // If no errors, return true;
}

    // Display form errors.
    // $issue needs to be an array of the errors.
    // The ul uses a default class of form-errors and you can designate a second class as the second param in the function call.
function formErrors($issue, $sec_class = NULL)
{
    $sec_class = (!empty($sec_class)) ? $sec_class : '';
    echo '<ul class="form-errors '.$sec_class.'">';
    foreach($issue as $i)
    {echo "<li>$i</li>";}
    echo "</ul>";
}
     
    // Sets the form completion display
    // $phrase should be a string that you want displayed to the user if the form passes all validation.
    // Defaults to displaying a h1 tag but you may designate a different element as the second param in the function call.
function formComplete($phrase, $element = NULL)
{
    $element = ($element !== NULL) ? $element : 'h1';
    echo '<'.$element.' class="form-complete">'.$phrase.'</'.$element.'>';
}

$country_options= array("select","Afghanistan",	"Ã…Land Islands",	"Albania",	"Algeria",	"American Samoa",	"Andorra",	"Angola",	"Anguilla",	"Antarctica",	"Antigua And Barbuda",	"Argentina",	"Armenia",	"Aruba",	"Australia",	"Austria",	"Azerbaijan",	"Bahamas",	"Bahrain",	"Bangladesh",	"Barbados",	"Belarus",	"Belgium",	"Belize",	"Benin",	"Bermuda",	"Bhutan",	"Bolivia",	"Bosnia And Herzegovina",	"Botswana",	"Bouvet Island",	"Brazil",	"British Indian Ocean Territory",	"Brunei Darussalam",	"Bulgaria",	"Burkina Faso",	"Burundi",	"Cambodia",	"Cameroon",	"Canada",	"Cape Verde",	"Cayman Islands",	"Central African Republic",	"Chad",	"Chile",	"China",	"Christmas Island",	"Cocos (Keeling) Islands",	"Colombia",	"Comoros",	"Congo",	"Congo, The Democratic Republic Of The",	"Cook Islands",	"Costa Rica",	"Cote D'Ivoire",	"Croatia",	"Cuba",	"Cyprus",	"Czech Republic",	"Denmark",	"Djibouti",	"Dominica",	"Dominican Republic",	"Ecuador",	"Egypt",	"El Salvador",	"Equatorial Guinea",	"Eritrea",	"Estonia",	"Ethiopia",	"Falkland Islands (Malvinas)",	"Faroe Islands",	"Fiji",	"Finland",	"France",	"French Guiana",	"French Polynesia",	"French Southern Territories",	"Gabon",	"Gambia",	"Georgia",	"Germany",	"Ghana",	"Gibraltar",	"Greece",	"Greenland",	"Grenada",	"Guadeloupe",	"Guam",	"Guatemala",	"Guernsey",	"Guinea",	"Guinea-Bissau",	"Guyana",	"Haiti",	"Heard Island And Mcdonald Islands",	"Holy See (Vatican City State)",	"Honduras",	"Hong Kong",	"Hungary",	"Iceland",	"India",	"Indonesia",	"Iran, Islamic Republic Of",	"Iraq",	"Ireland",	"Isle Of Man",	"Israel",	"Italy",	"Jamaica",	"Japan",	"Jersey",	"Jordan",	"Kazakhstan",	"Kenya",	"Kiribati",	"Korea, Democratic People'S Republic Of",	"Korea, Republic Of",	"Kuwait",	"Kyrgyzstan",	"Lao People'S Democratic Republic",	"Latvia",	"Lebanon",	"Lesotho",	"Liberia",	"Libyan Arab Jamahiriya",	"Liechtenstein",	"Lithuania",	"Luxembourg",	"Macao",	"Macedonia, The Former Yugoslav Republic Of",	"Madagascar",	"Malawi",	"Malaysia",	"Maldives",	"Mali",	"Malta",	"Marshall Islands",	"Martinique",	"Mauritania",	"Mauritius",	"Mayotte",	"Mexico",	"Micronesia, Federated States Of",	"Moldova, Republic Of",	"Monaco",	"Mongolia",	"Montserrat",	"Morocco",	"Mozambique",	"Myanmar",	"Namibia",	"Nauru",	"Nepal",	"Netherlands",	"Netherlands Antilles",	"New Caledonia",	"New Zealand",	"Nicaragua",	"Niger",	"Nigeria",	"Niue",	"Norfolk Island",	"Northern Mariana Islands",	"Norway",	"Oman",	"Pakistan",	"Palau",	"Palestinian Territory, Occupied",	"Panama",	"Papua New Guinea",	"Paraguay",	"Peru",	"Philippines",	"Pitcairn",	"Poland",	"Portugal",	"Puerto Rico",	"Qatar",	"Reunion",	"Romania",	"Russian Federation",	"Rwanda",	"Saint Helena",	"Saint Kitts And Nevis",	"Saint Lucia",	"Saint Pierre And Miquelon",	"Saint Vincent And The Grenadines",	"Samoa",	"San Marino",	"Sao Tome And Principe",	"Saudi Arabia",	"Senegal",	"Serbia And Montenegro",	"Seychelles",	"Sierra Leone",	"Singapore",	"Slovakia",	"Slovenia",	"Solomon Islands",	"Somalia",	"South Africa",	"South Georgia And The South Sandwich Islands",	"Spain",	"Sri Lanka",	"Sudan",	"Suriname",	"Svalbard And Jan Mayen",	"Swaziland",	"Sweden",	"Switzerland",	"Syrian Arab Republic",	"Taiwan, Province Of China",	"Tajikistan",	"Tanzania, United Republic Of",	"Thailand",	"Timor-Leste",	"Togo",	"Tokelau",	"Tonga",	"Trinidad And Tobago",	"Tunisia",	"Turkey",	"Turkmenistan",	"Turks And Caicos Islands",	"Tuvalu",	"Uganda",	"Ukraine",	"United Arab Emirates",	"United Kingdom",	"United States",	"United States Minor Outlying Islands",	"Uruguay",	"Uzbekistan",	"Vanuatu",	"Venezuela",	"Viet Nam",	"Virgin Islands, British",	"Virgin Islands, U.S.",	"Wallis And Futuna",	"Western Sahara",	"Yemen",	"Zambia",	"Zimbabwe"
);


if (isset($_POST['submit']))
{
	$required = array('name', 'email', 'country');
	$check_required = requiredFields($_POST, $required);
	
	if($check_required !== TRUE){ $errors[] = $check_required; }
	else
	{
		$name = isset($_POST['name']) ? cleanTextarea($_POST['name']) : '';
		$email = isset($_POST['email']) ? cleanTextarea($_POST['email']) : '';
		$phone = isset($_POST['phone']) ? cleanTextarea($_POST['phone']) : '';
		$country = (isset($_POST['country']) && $_POST['country'] != 'select') ? $_POST['country'] : '';
		$comment = isset($_POST['comment']) ? cleanTextarea($_POST['comment']) : '';
		$gender = isset($_POST['gender']) ? cleanTextarea($_POST['gender']) : '';
		
		$gender_options = array('male', 'female');
		
		$to = "laxmon@wikigets.com";
		$subject = "New contact form submission";
		$message =" A visitor of WIKIGETS has submited a form online\n\nName: $name\n\nEmail: $email\n\nPhone: $phone \n\nCountry: $country \n\nGender: $gender\n\nComment: $comment";

		// check if name only contains letters and whitespace
		if (!preg_match("/^[a-zA-Z ]*$/",$name)) 
		{ $errors[] = "Only letters and spaces allowed in your name"; }

		// check if e-mail address syntax is valid
		if (filter_var($email, FILTER_VALIDATE_EMAIL) === FALSE) 
		{ $errors[] = "Invalid email format"; }
				 
		if(!preg_replace('/\D/', '', $phone))
		{ $errors[] = 'Your phone number is not in the proper format.'; }
		
		if(empty($gender))
		{ $errors[] = 'Please select your gender.'; }
		elseif(!in_array($gender, $gender_options))
		{ $errors[] = 'That is not a gender selection.'; }
		
		if(!in_array($country, $country_options))
		{ $errors[] = 'Please select your country.'; }			
				
		$check = validCaptcha($privatekey);
		if($check !== TRUE)
		{ $errors[] = $check; }			
	}
	
	if(!empty($errors)){}
	else
	{
		$headers = 'MIME-Version: 1.0' . "rn";
		$headers .= 'Content-Type: text/plain; charset=iso-8859-1' . "rn";
		
		if(mail($to, $subject, $message, $headers) === TRUE)
		{ 
			$success = TRUE; 
			$name = $email = $phone = $gender = $country = $comment = '';
		}
		else
		{ $success = FALSE; }
	}
}
 
?>

<!DOCTYPE HTML>
<html>
<head>
<title>Contact Us</title>
<style>
.error {color: #FF0000;}
.success {color:#360; background-color:#FF0;}
.fail {color:#F00; background-color:#FFF;}

.form-errors li {
	color: #FFFFFF;
	border: 2px solid #FF0000;
	border-radius: 4px;
	-webkit-border-radius: 4px;
	-moz-border-radius: 4px;
	padding: 4px;
	margin: 4px;
	background-color: #FF5050;
}
.form-complete {
	color: #FFFFFF;
	border: 2px solid #009900;
	border-radius: 4px;
	-webkit-border-radius: 4px;
	-moz-border-radius: 4px;
	padding: 4px;
	margin: 4px;
	background-color: #33CC33;
	font-size: 14px;
}
</style>
</head>
<body>
<h2>CONTACT US</h2>
<p>
<?php
if(!empty($errors))
{ formErrors($errors); }
elseif(isset($success) && $success === TRUE)
{ formComplete('You mesage has been sent.  We will get back to you shortly.'); }
elseif(isset($success) && $success === FALSE)
{ formErrors(array('Your email was unable to be sent. Please try again.')); }
?>
</p>
<form method="post" action="">
<p>Name:
<input type="text" name="name" value="<?php echo isset($name) ? $name : ''; ?>">

<br><br>
E-mail: <input type="text" name="email" value="<?php echo isset($email) ? $email : '';?>">
</p>
<p>Phone Number:<input type="text" name="phone" value="<?php echo isset($phone) ? $phone : '';?>">

<br>
<br>
Country:
<?php
$item = 'select';
echo '<select name="country">';
foreach($country_options as $c)
{
$sel=''; // Set $sel to empty initially
$tag = 'selected="selected"';
if(isset($_POST['country']) && $_POST['country'] == $c) // Here we check if the form has been posted so an error isn't thrown and then check it's value against $c
{ $sel = $tag; }
elseif(!isset($_POST['country']) && $item == $c) // So that the $item doesn't override the posted value we need to check to make sure the form has NOT been submitted also in the
{ $sel = $tag; }	
echo '<option value="'.$c.'" '.$sel.'>'.$c.'</option>';
}
echo '</select>';
?>
<span class="error">*<?php echo (isset($country1)) ? $country1 : '';?></span>
<br><br>

Gender:
<input type="radio" name="gender" <?php if (isset($gender) && $gender=="female") echo "checked";?> value="female">Female
<input type="radio" name="gender" <?php if (isset($gender) && $gender=="male") echo "checked";?> value="male">Male

<br><br>
Comment:
<textarea name="comment" rows="5" cols="40"><?php echo isset($comment) ? $comment : '';?></textarea>
<br>
<?php
echo recaptcha_get_html($publickey);
?>
<br>
<input type="submit" name="submit" value="Submit">
</p>
</form>
</body>
</html>
Edited by fastsol
Link to comment
Share on other sites

at the point where the variables are being referenced, they won't exist until after the form has been submitted once. the isset() ? : logic prevents php undefined variable errors.

That makes sense. My default level of error reporting is probably too lax.

Link to comment
Share on other sites

That makes sense. My default level of error reporting is probably too lax.

That's probably true if you're not seeing basic undefined errors.  I use E_ALL but have the upper levels like E_STRICT and something else turned off.

Link to comment
Share on other sites

I found a couple fundamental flaws in what I recently posted.  First was if it reutrned a message of needing a fields filled in, it would not retain the text in the input fields.  It was only a flaw cause I tried to modify how I normally do it and found out why I do it hte way I do, so I changed it back.  Second, I found a way to validate if an radio button was not in the post array for the requireFields() to use.  Third, removed a if() for the gender checking now that the requiredFields() will handle it appropriately.  Here is an updated version.

<?php
require_once('recaptchalib.php');
$privatekey = "6LdK8_YSAAAAAJYPJduOpxhsL4Cy86NgwpCSJCod";
$publickey = "6LdK8_YSAAAAACMvxVRzJ7ZNqjQ9nT_dU6fEZdHx"; // you got this from the signup page

function validCaptcha($privatekey)
{	
	$resp = recaptcha_check_answer ($privatekey, $_SERVER["REMOTE_ADDR"], $_POST["recaptcha_challenge_field"], $_POST["recaptcha_response_field"]);
	
	if($resp->is_valid === FALSE)
	{ return $errors[] = "The Captcha did not pass validation. Please try again."; }
	else{ return TRUE; }
}

function cleanTextarea($p)
{
	$post = htmlentities(trim($p));
	return $post;
}

function requiredFields($posted, $req)
{
	$message = 'Please fill in all required fields';
	
	// This is mostly to verify if a required radio button was not selected since if it wasn't it won't be in the $_POST array.
	$all_there = array_diff($req, array_keys($posted));
	
	// Then set an error if the above array isn't empty
	if(!empty($all_there))
	{ return $errors[] = $message; }
	else
	{
		
		foreach($posted as $key => $val)
		{
			$val = cleanTextarea($val);
			if(in_array($key, $req) && empty($val))
			{
				$bad = TRUE;
				return $errors[] = $message; // If a value was empty we add an error to the $GLOBALS['errors'] array so we can display it later to the user.
				
				break 1;
			}
		}
		if(!isset($bad)){return TRUE;} // If no errors, return true;
	}
}

    // Display form errors.
    // $issue needs to be an array of the errors.
    // The ul uses a default class of form-errors and you can designate a second class as the second param in the function call.
function formErrors($issue, $sec_class = NULL)
{
    $sec_class = (!empty($sec_class)) ? $sec_class : '';
    echo '<ul class="form-errors '.$sec_class.'">';
    foreach($issue as $i)
    {echo "<li>$i</li>";}
    echo "</ul>";
}
     
    // Sets the form completion display
    // $phrase should be a string that you want displayed to the user if the form passes all validation.
    // Defaults to displaying a h1 tag but you may designate a different element as the second param in the function call.
function formComplete($phrase, $element = NULL)
{
    $element = ($element !== NULL) ? $element : 'h1';
    echo '<'.$element.' class="form-complete">'.$phrase.'</'.$element.'>';
}

$country_options= array("select","Afghanistan",	"Ã…Land Islands",	"Albania",	"Algeria",	"American Samoa",	"Andorra",	"Angola",	"Anguilla",	"Antarctica",	"Antigua And Barbuda",	"Argentina",	"Armenia",	"Aruba",	"Australia",	"Austria",	"Azerbaijan",	"Bahamas",	"Bahrain",	"Bangladesh",	"Barbados",	"Belarus",	"Belgium",	"Belize",	"Benin",	"Bermuda",	"Bhutan",	"Bolivia",	"Bosnia And Herzegovina",	"Botswana",	"Bouvet Island",	"Brazil",	"British Indian Ocean Territory",	"Brunei Darussalam",	"Bulgaria",	"Burkina Faso",	"Burundi",	"Cambodia",	"Cameroon",	"Canada",	"Cape Verde",	"Cayman Islands",	"Central African Republic",	"Chad",	"Chile",	"China",	"Christmas Island",	"Cocos (Keeling) Islands",	"Colombia",	"Comoros",	"Congo",	"Congo, The Democratic Republic Of The",	"Cook Islands",	"Costa Rica",	"Cote D'Ivoire",	"Croatia",	"Cuba",	"Cyprus",	"Czech Republic",	"Denmark",	"Djibouti",	"Dominica",	"Dominican Republic",	"Ecuador",	"Egypt",	"El Salvador",	"Equatorial Guinea",	"Eritrea",	"Estonia",	"Ethiopia",	"Falkland Islands (Malvinas)",	"Faroe Islands",	"Fiji",	"Finland",	"France",	"French Guiana",	"French Polynesia",	"French Southern Territories",	"Gabon",	"Gambia",	"Georgia",	"Germany",	"Ghana",	"Gibraltar",	"Greece",	"Greenland",	"Grenada",	"Guadeloupe",	"Guam",	"Guatemala",	"Guernsey",	"Guinea",	"Guinea-Bissau",	"Guyana",	"Haiti",	"Heard Island And Mcdonald Islands",	"Holy See (Vatican City State)",	"Honduras",	"Hong Kong",	"Hungary",	"Iceland",	"India",	"Indonesia",	"Iran, Islamic Republic Of",	"Iraq",	"Ireland",	"Isle Of Man",	"Israel",	"Italy",	"Jamaica",	"Japan",	"Jersey",	"Jordan",	"Kazakhstan",	"Kenya",	"Kiribati",	"Korea, Democratic People'S Republic Of",	"Korea, Republic Of",	"Kuwait",	"Kyrgyzstan",	"Lao People'S Democratic Republic",	"Latvia",	"Lebanon",	"Lesotho",	"Liberia",	"Libyan Arab Jamahiriya",	"Liechtenstein",	"Lithuania",	"Luxembourg",	"Macao",	"Macedonia, The Former Yugoslav Republic Of",	"Madagascar",	"Malawi",	"Malaysia",	"Maldives",	"Mali",	"Malta",	"Marshall Islands",	"Martinique",	"Mauritania",	"Mauritius",	"Mayotte",	"Mexico",	"Micronesia, Federated States Of",	"Moldova, Republic Of",	"Monaco",	"Mongolia",	"Montserrat",	"Morocco",	"Mozambique",	"Myanmar",	"Namibia",	"Nauru",	"Nepal",	"Netherlands",	"Netherlands Antilles",	"New Caledonia",	"New Zealand",	"Nicaragua",	"Niger",	"Nigeria",	"Niue",	"Norfolk Island",	"Northern Mariana Islands",	"Norway",	"Oman",	"Pakistan",	"Palau",	"Palestinian Territory, Occupied",	"Panama",	"Papua New Guinea",	"Paraguay",	"Peru",	"Philippines",	"Pitcairn",	"Poland",	"Portugal",	"Puerto Rico",	"Qatar",	"Reunion",	"Romania",	"Russian Federation",	"Rwanda",	"Saint Helena",	"Saint Kitts And Nevis",	"Saint Lucia",	"Saint Pierre And Miquelon",	"Saint Vincent And The Grenadines",	"Samoa",	"San Marino",	"Sao Tome And Principe",	"Saudi Arabia",	"Senegal",	"Serbia And Montenegro",	"Seychelles",	"Sierra Leone",	"Singapore",	"Slovakia",	"Slovenia",	"Solomon Islands",	"Somalia",	"South Africa",	"South Georgia And The South Sandwich Islands",	"Spain",	"Sri Lanka",	"Sudan",	"Suriname",	"Svalbard And Jan Mayen",	"Swaziland",	"Sweden",	"Switzerland",	"Syrian Arab Republic",	"Taiwan, Province Of China",	"Tajikistan",	"Tanzania, United Republic Of",	"Thailand",	"Timor-Leste",	"Togo",	"Tokelau",	"Tonga",	"Trinidad And Tobago",	"Tunisia",	"Turkey",	"Turkmenistan",	"Turks And Caicos Islands",	"Tuvalu",	"Uganda",	"Ukraine",	"United Arab Emirates",	"United Kingdom",	"United States",	"United States Minor Outlying Islands",	"Uruguay",	"Uzbekistan",	"Vanuatu",	"Venezuela",	"Viet Nam",	"Virgin Islands, British",	"Virgin Islands, U.S.",	"Wallis And Futuna",	"Western Sahara",	"Yemen",	"Zambia",	"Zimbabwe"
);


if (isset($_POST['submit']))
{
        // Moved all these vars above the if() below so they will retain if some required fields were not filled in.
	$name = isset($_POST['name']) ? cleanTextarea($_POST['name']) : '';
	$email = isset($_POST['email']) ? cleanTextarea($_POST['email']) : '';
	$phone = isset($_POST['phone']) ? cleanTextarea($_POST['phone']) : '';
	$country = (isset($_POST['country']) && $_POST['country'] != 'select') ? $_POST['country'] : '';
	$comment = isset($_POST['comment']) ? cleanTextarea($_POST['comment']) : '';
	$gender = isset($_POST['gender']) ? cleanTextarea($_POST['gender']) : '';

	$required = array('name', 'email', 'country', 'gender');
	$check_required = requiredFields($_POST, $required);
	
	if($check_required !== TRUE){ $errors[] = $check_required; }
	else
	{		
		$gender_options = array('male', 'female');
		
		$to = "laxmon@wikigets.com";
		$subject = "New contact form submission";
		$message =" A visitor of WIKIGETS has submited a form online\n\nName: $name\n\nEmail: $email\n\nPhone: $phone \n\nCountry: $country \n\nGender: $gender\n\nComment: $comment";

		// check if name only contains letters and whitespace
		if (!preg_match("/^[a-zA-Z ]*$/",$name)) 
		{ $errors[] = "Only letters and spaces allowed in your name"; }

		// check if e-mail address syntax is valid
		if (filter_var($email, FILTER_VALIDATE_EMAIL) === FALSE) 
		{ $errors[] = "Invalid email format"; }
				 
		if(!preg_replace('/\D/', '', $phone))
		{ $errors[] = 'Your phone number is not in the proper format.'; }
		
		if(!in_array($gender, $gender_options)) // Removed a if() here that is no longer need with the modified requiredFields() above.
		{ $errors[] = 'That is not a gender selection.'; }
		
		if(!in_array($country, $country_options))
		{ $errors[] = 'Please select your country.'; }			
				
		$check = validCaptcha($privatekey);
		if($check !== TRUE)
		{ $errors[] = $check; }			
	}
	
	if(!empty($errors)){}
	else
	{
		$headers = 'MIME-Version: 1.0' . "rn";
		$headers .= 'Content-Type: text/plain; charset=iso-8859-1' . "rn";
		
		if(mail($to, $subject, $message, $headers) === TRUE)
		{ 
			$success = TRUE; 
			$name = $email = $phone = $gender = $country = $comment = '';
		}
		else
		{ $success = FALSE; }
	}
}
 
?>

<!DOCTYPE HTML>
<html>
<head>
<title>Contact Us</title>
<style>
.error {color: #FF0000;}
.success {color:#360; background-color:#FF0;}
.fail {color:#F00; background-color:#FFF;}

.form-errors li {
	color: #FFFFFF;
	border: 2px solid #FF0000;
	border-radius: 4px;
	-webkit-border-radius: 4px;
	-moz-border-radius: 4px;
	padding: 4px;
	margin: 4px;
	background-color: #FF5050;
}
.form-complete {
	color: #FFFFFF;
	border: 2px solid #009900;
	border-radius: 4px;
	-webkit-border-radius: 4px;
	-moz-border-radius: 4px;
	padding: 4px;
	margin: 4px;
	background-color: #33CC33;
	font-size: 14px;
}
</style>
</head>
<body>
<h2>CONTACT US</h2>
<p>
<?php
if(!empty($errors))
{ formErrors($errors); }
elseif(isset($success) && $success === TRUE)
{ formComplete('You mesage has been sent.  We will get back to you shortly.'); }
elseif(isset($success) && $success === FALSE)
{ formErrors(array('Your email was unable to be sent. Please try again.')); }
?>
</p>
<form method="post" action="">
<p>Name:
<input type="text" name="name" value="<?php echo isset($name) ? $name : ''; ?>">

<br><br>
E-mail: <input type="text" name="email" value="<?php echo isset($email) ? $email : '';?>">
</p>
<p>Phone Number:<input type="text" name="phone" value="<?php echo isset($phone) ? $phone : '';?>">

<br>
<br>
Country:
<?php
$item = 'select';
echo '<select name="country">';
foreach($country_options as $c)
{
$sel=''; // Set $sel to empty initially
$tag = 'selected="selected"';
if(isset($_POST['country']) && $_POST['country'] == $c) // Here we check if the form has been posted so an error isn't thrown and then check it's value against $c
{ $sel = $tag; }
elseif(!isset($_POST['country']) && $item == $c) // So that the $item doesn't override the posted value we need to check to make sure the form has NOT been submitted also in the
{ $sel = $tag; }	
echo '<option value="'.$c.'" '.$sel.'>'.$c.'</option>';
}
echo '</select>';
?>
<span class="error">*<?php echo (isset($country1)) ? $country1 : '';?></span>
<br><br>

Gender:
<input type="radio" name="gender" <?php if (isset($gender) && $gender=="female") echo "checked";?> value="female">Female
<input type="radio" name="gender" <?php if (isset($gender) && $gender=="male") echo "checked";?> value="male">Male

<br><br>
Comment:
<textarea name="comment" rows="5" cols="40"><?php echo isset($comment) ? $comment : '';?></textarea>
<br>
<?php
echo recaptcha_get_html($publickey);
?>
<br>
<input type="submit" name="submit" value="Submit">
</p>
</form>
</body>
</html>
Link to comment
Share on other sites

Sorry for the delayed response. I was held up with some work.

 

Hey the code by fastsol finally works kickass.

 

Thank you fastsol, davidannis, mac_gyver. You guys are brilliant 

 

::)

 

I found a couple fundamental flaws in what I recently posted.  First was if it reutrned a message of needing a fields filled in, it would not retain the text in the input fields.  It was only a flaw cause I tried to modify how I normally do it and found out why I do it hte way I do, so I changed it back.  Second, I found a way to validate if an radio button was not in the post array for the requireFields() to use.  Third, removed a if() for the gender checking now that the requiredFields() will handle it appropriately.  Here is an updated version.





<?php
require_once('recaptchalib.php');
$privatekey = "6LdK8_YSAAAAAJYPJduOpxhsL4Cy86NgwpCSJCod";
$publickey = "6LdK8_YSAAAAACMvxVRzJ7ZNqjQ9nT_dU6fEZdHx"; // you got this from the signup page

function validCaptcha($privatekey)
{	
	$resp = recaptcha_check_answer ($privatekey, $_SERVER["REMOTE_ADDR"], $_POST["recaptcha_challenge_field"], $_POST["recaptcha_response_field"]);
	
	if($resp->is_valid === FALSE)
	{ return $errors[] = "The Captcha did not pass validation. Please try again."; }
	else{ return TRUE; }
}

function cleanTextarea($p)
{
	$post = htmlentities(trim($p));
	return $post;
}

function requiredFields($posted, $req)
{
	$message = 'Please fill in all required fields';
	
	// This is mostly to verify if a required radio button was not selected since if it wasn't it won't be in the $_POST array.
	$all_there = array_diff($req, array_keys($posted));
	
	// Then set an error if the above array isn't empty
	if(!empty($all_there))
	{ return $errors[] = $message; }
	else
	{
		
		foreach($posted as $key => $val)
		{
			$val = cleanTextarea($val);
			if(in_array($key, $req) && empty($val))
			{
				$bad = TRUE;
				return $errors[] = $message; // If a value was empty we add an error to the $GLOBALS['errors'] array so we can display it later to the user.
				
				break 1;
			}
		}
		if(!isset($bad)){return TRUE;} // If no errors, return true;
	}
}

    // Display form errors.
    // $issue needs to be an array of the errors.
    // The ul uses a default class of form-errors and you can designate a second class as the second param in the function call.
function formErrors($issue, $sec_class = NULL)
{
    $sec_class = (!empty($sec_class)) ? $sec_class : '';
    echo '<ul class="form-errors '.$sec_class.'">';
    foreach($issue as $i)
    {echo "<li>$i</li>";}
    echo "</ul>";
}
     
    // Sets the form completion display
    // $phrase should be a string that you want displayed to the user if the form passes all validation.
    // Defaults to displaying a h1 tag but you may designate a different element as the second param in the function call.
function formComplete($phrase, $element = NULL)
{
    $element = ($element !== NULL) ? $element : 'h1';
    echo '<'.$element.' class="form-complete">'.$phrase.'</'.$element.'>';
}

$country_options= array("select","Afghanistan",	"Ã…Land Islands",	"Albania",	"Algeria",	"American Samoa",	"Andorra",	"Angola",	"Anguilla",	"Antarctica",	"Antigua And Barbuda",	"Argentina",	"Armenia",	"Aruba",	"Australia",	"Austria",	"Azerbaijan",	"Bahamas",	"Bahrain",	"Bangladesh",	"Barbados",	"Belarus",	"Belgium",	"Belize",	"Benin",	"Bermuda",	"Bhutan",	"Bolivia",	"Bosnia And Herzegovina",	"Botswana",	"Bouvet Island",	"Brazil",	"British Indian Ocean Territory",	"Brunei Darussalam",	"Bulgaria",	"Burkina Faso",	"Burundi",	"Cambodia",	"Cameroon",	"Canada",	"Cape Verde",	"Cayman Islands",	"Central African Republic",	"Chad",	"Chile",	"China",	"Christmas Island",	"Cocos (Keeling) Islands",	"Colombia",	"Comoros",	"Congo",	"Congo, The Democratic Republic Of The",	"Cook Islands",	"Costa Rica",	"Cote D'Ivoire",	"Croatia",	"Cuba",	"Cyprus",	"Czech Republic",	"Denmark",	"Djibouti",	"Dominica",	"Dominican Republic",	"Ecuador",	"Egypt",	"El Salvador",	"Equatorial Guinea",	"Eritrea",	"Estonia",	"Ethiopia",	"Falkland Islands (Malvinas)",	"Faroe Islands",	"Fiji",	"Finland",	"France",	"French Guiana",	"French Polynesia",	"French Southern Territories",	"Gabon",	"Gambia",	"Georgia",	"Germany",	"Ghana",	"Gibraltar",	"Greece",	"Greenland",	"Grenada",	"Guadeloupe",	"Guam",	"Guatemala",	"Guernsey",	"Guinea",	"Guinea-Bissau",	"Guyana",	"Haiti",	"Heard Island And Mcdonald Islands",	"Holy See (Vatican City State)",	"Honduras",	"Hong Kong",	"Hungary",	"Iceland",	"India",	"Indonesia",	"Iran, Islamic Republic Of",	"Iraq",	"Ireland",	"Isle Of Man",	"Israel",	"Italy",	"Jamaica",	"Japan",	"Jersey",	"Jordan",	"Kazakhstan",	"Kenya",	"Kiribati",	"Korea, Democratic People'S Republic Of",	"Korea, Republic Of",	"Kuwait",	"Kyrgyzstan",	"Lao People'S Democratic Republic",	"Latvia",	"Lebanon",	"Lesotho",	"Liberia",	"Libyan Arab Jamahiriya",	"Liechtenstein",	"Lithuania",	"Luxembourg",	"Macao",	"Macedonia, The Former Yugoslav Republic Of",	"Madagascar",	"Malawi",	"Malaysia",	"Maldives",	"Mali",	"Malta",	"Marshall Islands",	"Martinique",	"Mauritania",	"Mauritius",	"Mayotte",	"Mexico",	"Micronesia, Federated States Of",	"Moldova, Republic Of",	"Monaco",	"Mongolia",	"Montserrat",	"Morocco",	"Mozambique",	"Myanmar",	"Namibia",	"Nauru",	"Nepal",	"Netherlands",	"Netherlands Antilles",	"New Caledonia",	"New Zealand",	"Nicaragua",	"Niger",	"Nigeria",	"Niue",	"Norfolk Island",	"Northern Mariana Islands",	"Norway",	"Oman",	"Pakistan",	"Palau",	"Palestinian Territory, Occupied",	"Panama",	"Papua New Guinea",	"Paraguay",	"Peru",	"Philippines",	"Pitcairn",	"Poland",	"Portugal",	"Puerto Rico",	"Qatar",	"Reunion",	"Romania",	"Russian Federation",	"Rwanda",	"Saint Helena",	"Saint Kitts And Nevis",	"Saint Lucia",	"Saint Pierre And Miquelon",	"Saint Vincent And The Grenadines",	"Samoa",	"San Marino",	"Sao Tome And Principe",	"Saudi Arabia",	"Senegal",	"Serbia And Montenegro",	"Seychelles",	"Sierra Leone",	"Singapore",	"Slovakia",	"Slovenia",	"Solomon Islands",	"Somalia",	"South Africa",	"South Georgia And The South Sandwich Islands",	"Spain",	"Sri Lanka",	"Sudan",	"Suriname",	"Svalbard And Jan Mayen",	"Swaziland",	"Sweden",	"Switzerland",	"Syrian Arab Republic",	"Taiwan, Province Of China",	"Tajikistan",	"Tanzania, United Republic Of",	"Thailand",	"Timor-Leste",	"Togo",	"Tokelau",	"Tonga",	"Trinidad And Tobago",	"Tunisia",	"Turkey",	"Turkmenistan",	"Turks And Caicos Islands",	"Tuvalu",	"Uganda",	"Ukraine",	"United Arab Emirates",	"United Kingdom",	"United States",	"United States Minor Outlying Islands",	"Uruguay",	"Uzbekistan",	"Vanuatu",	"Venezuela",	"Viet Nam",	"Virgin Islands, British",	"Virgin Islands, U.S.",	"Wallis And Futuna",	"Western Sahara",	"Yemen",	"Zambia",	"Zimbabwe"
);


if (isset($_POST['submit']))
{
        // Moved all these vars above the if() below so they will retain if some required fields were not filled in.
	$name = isset($_POST['name']) ? cleanTextarea($_POST['name']) : '';
	$email = isset($_POST['email']) ? cleanTextarea($_POST['email']) : '';
	$phone = isset($_POST['phone']) ? cleanTextarea($_POST['phone']) : '';
	$country = (isset($_POST['country']) && $_POST['country'] != 'select') ? $_POST['country'] : '';
	$comment = isset($_POST['comment']) ? cleanTextarea($_POST['comment']) : '';
	$gender = isset($_POST['gender']) ? cleanTextarea($_POST['gender']) : '';

	$required = array('name', 'email', 'country', 'gender');
	$check_required = requiredFields($_POST, $required);
	
	if($check_required !== TRUE){ $errors[] = $check_required; }
	else
	{		
		$gender_options = array('male', 'female');
		
		$to = "laxmon@wikigets.com";
		$subject = "New contact form submission";
		$message =" A visitor of WIKIGETS has submited a form online\n\nName: $name\n\nEmail: $email\n\nPhone: $phone \n\nCountry: $country \n\nGender: $gender\n\nComment: $comment";

		// check if name only contains letters and whitespace
		if (!preg_match("/^[a-zA-Z ]*$/",$name)) 
		{ $errors[] = "Only letters and spaces allowed in your name"; }

		// check if e-mail address syntax is valid
		if (filter_var($email, FILTER_VALIDATE_EMAIL) === FALSE) 
		{ $errors[] = "Invalid email format"; }
				 
		if(!preg_replace('/\D/', '', $phone))
		{ $errors[] = 'Your phone number is not in the proper format.'; }
		
		if(!in_array($gender, $gender_options)) // Removed a if() here that is no longer need with the modified requiredFields() above.
		{ $errors[] = 'That is not a gender selection.'; }
		
		if(!in_array($country, $country_options))
		{ $errors[] = 'Please select your country.'; }			
				
		$check = validCaptcha($privatekey);
		if($check !== TRUE)
		{ $errors[] = $check; }			
	}
	
	if(!empty($errors)){}
	else
	{
		$headers = 'MIME-Version: 1.0' . "rn";
		$headers .= 'Content-Type: text/plain; charset=iso-8859-1' . "rn";
		
		if(mail($to, $subject, $message, $headers) === TRUE)
		{ 
			$success = TRUE; 
			$name = $email = $phone = $gender = $country = $comment = '';
		}
		else
		{ $success = FALSE; }
	}
}
 
?>

<!DOCTYPE HTML>
<html>
<head>
<title>Contact Us</title>
<style>
.error {color: #FF0000;}
.success {color:#360; background-color:#FF0;}
.fail {color:#F00; background-color:#FFF;}

.form-errors li {
	color: #FFFFFF;
	border: 2px solid #FF0000;
	border-radius: 4px;
	-webkit-border-radius: 4px;
	-moz-border-radius: 4px;
	padding: 4px;
	margin: 4px;
	background-color: #FF5050;
}
.form-complete {
	color: #FFFFFF;
	border: 2px solid #009900;
	border-radius: 4px;
	-webkit-border-radius: 4px;
	-moz-border-radius: 4px;
	padding: 4px;
	margin: 4px;
	background-color: #33CC33;
	font-size: 14px;
}
</style>
</head>
<body>
<h2>CONTACT US</h2>
<p>
<?php
if(!empty($errors))
{ formErrors($errors); }
elseif(isset($success) && $success === TRUE)
{ formComplete('You mesage has been sent.  We will get back to you shortly.'); }
elseif(isset($success) && $success === FALSE)
{ formErrors(array('Your email was unable to be sent. Please try again.')); }
?>
</p>
<form method="post" action="">
<p>Name:
<input type="text" name="name" value="<?php echo isset($name) ? $name : ''; ?>">

<br><br>
E-mail: <input type="text" name="email" value="<?php echo isset($email) ? $email : '';?>">
</p>
<p>Phone Number:<input type="text" name="phone" value="<?php echo isset($phone) ? $phone : '';?>">

<br>
<br>
Country:
<?php
$item = 'select';
echo '<select name="country">';
foreach($country_options as $c)
{
$sel=''; // Set $sel to empty initially
$tag = 'selected="selected"';
if(isset($_POST['country']) && $_POST['country'] == $c) // Here we check if the form has been posted so an error isn't thrown and then check it's value against $c
{ $sel = $tag; }
elseif(!isset($_POST['country']) && $item == $c) // So that the $item doesn't override the posted value we need to check to make sure the form has NOT been submitted also in the
{ $sel = $tag; }	
echo '<option value="'.$c.'" '.$sel.'>'.$c.'</option>';
}
echo '</select>';
?>
<span class="error">*<?php echo (isset($country1)) ? $country1 : '';?></span>
<br><br>

Gender:
<input type="radio" name="gender" <?php if (isset($gender) && $gender=="female") echo "checked";?> value="female">Female
<input type="radio" name="gender" <?php if (isset($gender) && $gender=="male") echo "checked";?> value="male">Male

<br><br>
Comment:
<textarea name="comment" rows="5" cols="40"><?php echo isset($comment) ? $comment : '';?></textarea>
<br>
<?php
echo recaptcha_get_html($publickey);
?>
<br>
<input type="submit" name="submit" value="Submit">
</p>
</form>
</body>
</html>
Edited by laxi
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.