laxi Posted July 16, 2014 Share Posted July 16, 2014 (edited) 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 July 16, 2014 by laxi Quote Link to comment https://forums.phpfreaks.com/topic/289942-form-values-dissapear-in-captcha-validation/ Share on other sites More sharing options...
fastsol Posted July 16, 2014 Share Posted July 16, 2014 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. Quote Link to comment https://forums.phpfreaks.com/topic/289942-form-values-dissapear-in-captcha-validation/#findComment-1485465 Share on other sites More sharing options...
laxi Posted July 16, 2014 Author Share Posted July 16, 2014 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. Quote Link to comment https://forums.phpfreaks.com/topic/289942-form-values-dissapear-in-captcha-validation/#findComment-1485468 Share on other sites More sharing options...
fastsol Posted July 16, 2014 Share Posted July 16, 2014 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 Quote Link to comment https://forums.phpfreaks.com/topic/289942-form-values-dissapear-in-captcha-validation/#findComment-1485473 Share on other sites More sharing options...
davidannis Posted July 16, 2014 Share Posted July 16, 2014 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'] Quote Link to comment https://forums.phpfreaks.com/topic/289942-form-values-dissapear-in-captcha-validation/#findComment-1485477 Share on other sites More sharing options...
laxi Posted July 16, 2014 Author Share Posted July 16, 2014 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'] Quote Link to comment https://forums.phpfreaks.com/topic/289942-form-values-dissapear-in-captcha-validation/#findComment-1485487 Share on other sites More sharing options...
davidannis Posted July 17, 2014 Share Posted July 17, 2014 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 Quote Link to comment https://forums.phpfreaks.com/topic/289942-form-values-dissapear-in-captcha-validation/#findComment-1485501 Share on other sites More sharing options...
laxi Posted July 17, 2014 Author Share Posted July 17, 2014 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 Quote Link to comment https://forums.phpfreaks.com/topic/289942-form-values-dissapear-in-captcha-validation/#findComment-1485508 Share on other sites More sharing options...
mac_gyver Posted July 17, 2014 Share Posted July 17, 2014 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.) Quote Link to comment https://forums.phpfreaks.com/topic/289942-form-values-dissapear-in-captcha-validation/#findComment-1485510 Share on other sites More sharing options...
laxi Posted July 17, 2014 Author Share Posted July 17, 2014 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.) Quote Link to comment https://forums.phpfreaks.com/topic/289942-form-values-dissapear-in-captcha-validation/#findComment-1485511 Share on other sites More sharing options...
davidannis Posted July 17, 2014 Share Posted July 17, 2014 (edited) 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 July 17, 2014 by davidannis Quote Link to comment https://forums.phpfreaks.com/topic/289942-form-values-dissapear-in-captcha-validation/#findComment-1485531 Share on other sites More sharing options...
laxi Posted July 17, 2014 Author Share Posted July 17, 2014 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 Quote Link to comment https://forums.phpfreaks.com/topic/289942-form-values-dissapear-in-captcha-validation/#findComment-1485537 Share on other sites More sharing options...
fastsol Posted July 17, 2014 Share Posted July 17, 2014 (edited) 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 July 17, 2014 by fastsol Quote Link to comment https://forums.phpfreaks.com/topic/289942-form-values-dissapear-in-captcha-validation/#findComment-1485539 Share on other sites More sharing options...
davidannis Posted July 17, 2014 Share Posted July 17, 2014 @fastsol just curious why you do this: echo isset($phone) ? $phone : ''; shouldn't echo $phone; produce the same result in all cases? Quote Link to comment https://forums.phpfreaks.com/topic/289942-form-values-dissapear-in-captcha-validation/#findComment-1485547 Share on other sites More sharing options...
mac_gyver Posted July 17, 2014 Share Posted July 17, 2014 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. 1 Quote Link to comment https://forums.phpfreaks.com/topic/289942-form-values-dissapear-in-captcha-validation/#findComment-1485548 Share on other sites More sharing options...
davidannis Posted July 17, 2014 Share Posted July 17, 2014 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. Quote Link to comment https://forums.phpfreaks.com/topic/289942-form-values-dissapear-in-captcha-validation/#findComment-1485555 Share on other sites More sharing options...
fastsol Posted July 17, 2014 Share Posted July 17, 2014 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. Quote Link to comment https://forums.phpfreaks.com/topic/289942-form-values-dissapear-in-captcha-validation/#findComment-1485557 Share on other sites More sharing options...
fastsol Posted July 17, 2014 Share Posted July 17, 2014 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> Quote Link to comment https://forums.phpfreaks.com/topic/289942-form-values-dissapear-in-captcha-validation/#findComment-1485567 Share on other sites More sharing options...
laxi Posted July 18, 2014 Author Share Posted July 18, 2014 (edited) 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 July 18, 2014 by laxi Quote Link to comment https://forums.phpfreaks.com/topic/289942-form-values-dissapear-in-captcha-validation/#findComment-1485619 Share on other sites More sharing options...
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.