wright67uk Posted May 5, 2011 Share Posted May 5, 2011 As expected when a die statement is triggered, my script is exited and ALL of the fields that have been filled in on my form are wiped clean. This however is proving to be annoying for users making mistakes. Is there a way to keep the data in the correctly filled in fields, and to just wipe or highlight the incorrectly filled in fields? <?php function checkPostcode (&$toCheck) { $alpha1 = "[abcdefghijklmnoprstuwyz]"; $alpha2 = "[abcdefghklmnopqrstuvwxy]"; $alpha3 = "[abcdefghjkstuw]"; $alpha4 = "[abehmnprvwxy]"; $alpha5 = "[abdefghjlnpqrstuwxyz]"; $pcexp[0] = '^('.$alpha1.'{1}'.$alpha2.'{0,1}[0-9]{1,2})([0-9]{1}'.$alpha5.'{2})$'; $pcexp[1] = '^('.$alpha1.'{1}[0-9]{1}'.$alpha3.'{1})([0-9]{1}'.$alpha5.'{2})$'; $pcexp[2] = '^('.$alpha1.'{1}'.$alpha2.'[0-9]{1}'.$alpha4.')([0-9]{1}'.$alpha5.'{2})$'; $pcexp[3] = '^(gir)(0aa)$'; $pcexp[4] = '^(bfpo)([0-9]{1,4})$'; $pcexp[5] = '^(bfpo)(c\/o[0-9]{1,3})$'; $Postcode = strtolower($toCheck); $Postcode = str_replace (' ', '', $Postcode); $valid = false; foreach ($pcexp as $regexp) { if (ereg($regexp,$Postcode, $matches)) { $toCheck = strtoupper ($matches[1] . ' ' . $matches [2]); $toCheck = ereg_replace ('C\/O', 'c/o ', $toCheck); $valid = true; break; } } if ($valid){return true;} else {return false;}; } if(isset($_POST['submit'])) { $drop = mysql_real_escape_string($_POST['drop_1']); $tier_two = mysql_real_escape_string($_POST['Subtype']); $Name = mysql_real_escape_string($_POST["Name"]); $Phone = mysql_real_escape_string($_POST["Phone"]); $Email = mysql_real_escape_string($_POST["Email"]); $Postcode = mysql_real_escape_string($_POST["Postcode"]); $Website = mysql_real_escape_string($_POST["Website"]); if($Name == '') { die ("<div class=\"form\">You did not complete the name field, please try again</div>"); } elseif ($Phone == '' or (preg_match("/^([1]-)?[0-9]{3}-[0-9]{3}-[0-9]{4}$/i", $Phone))) { die("<div class=\"form\"> You completed the telephone field incorrectly, please try again</div>"); } elseif ($Email == '' or (!filter_var($Email, FILTER_VALIDATE_EMAIL))) { die("<div class=\"form\"> You completed the Email field incorrectly, please try again</div>"); } elseif ($Postcode == '' or (!checkPostcode($Postcode))) { die("<div class=\"form\"> You did not complete the Postcode field correctly, please try again</div>"); } elseif ($Website == '' or (!preg_match("~^[a-z0-9.-]+\.(com|org|net|edu|co.uk)~i", $Website))) { die("<div class=\"form\">You completed the website field incorrectly, please try again</div>"); } else { echo("<div id=\"formtwo\">Thankyou for submiting your details, you will be added to our directory shortly</div>"); } $query = ("INSERT INTO business (`id`, `Name`, `Type`, `Subtype`, `Phone`, `Email`, `Postcode`, `WebAddress`, `Confirmed`) VALUES ('NULL', '$Name', '$drop', '$tier_two' , '$Phone', '$Email', '$Postcode', '$Website', 'Yes')"); mysql_query($query) or die ( "<br>Query: $query<br>Error: " .mysql_error()); } ?> Quote Link to comment https://forums.phpfreaks.com/topic/235574-i-dont-want-all-of-my-form-fields-to-go-blank-just-the-incorrect-ones-perhaps/ Share on other sites More sharing options...
Pikachu2000 Posted May 5, 2011 Share Posted May 5, 2011 Funny you should mention that. I just posted an example in this thread: http://www.phpfreaks.com/forums/index.php?topic=332260.msg1564125#msg1564125 Quote Link to comment https://forums.phpfreaks.com/topic/235574-i-dont-want-all-of-my-form-fields-to-go-blank-just-the-incorrect-ones-perhaps/#findComment-1210776 Share on other sites More sharing options...
wright67uk Posted May 5, 2011 Author Share Posted May 5, 2011 Is it then the case that If I use die, then I will not be able to repopulate my form fields? Ive seen somebody on a different thread put value="<?php if (!empty($Name)) echo $Name; ?>"/> into their html form It would be good to do somthing like this on my form to re-populate the fields but doesn't seem to work. Please excuse me if im not quite grasping this. Quote Link to comment https://forums.phpfreaks.com/topic/235574-i-dont-want-all-of-my-form-fields-to-go-blank-just-the-incorrect-ones-perhaps/#findComment-1211123 Share on other sites More sharing options...
wright67uk Posted May 5, 2011 Author Share Posted May 5, 2011 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <?php include('func.php'); include($_SERVER['DOCUMENT_ROOT'].'/include/db.php'); ?> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>Chained Select Boxes using PHP, MySQL and jQuery</title> <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.3/jquery.min.js"></script> <script type="text/javascript"> $(document).ready(function() { $('#wait_1').hide(); $('#drop_1').change(function(){ $('#wait_1').show(); $('#result_1').hide(); $.get("func.php", { func: "drop_1", drop_var: $('#drop_1').val() }, function(response){ $('#result_1').fadeOut(); setTimeout("finishAjax('result_1', '"+escape(response)+"')", 400); }); return false; }); }); function finishAjax(id, response) { $('#wait_1').hide(); $('#'+id).html(unescape(response)); $('#'+id).fadeIn(); } </script> <style type="text/css"> <!-- --> </style> <link href="newbusiness.css" rel="stylesheet" type="text/css" /> </head> <body> <div id="banner"> <div id="bannerleft"></div> <div id="logo"></div> <div id="bannerright"><div id="navbar" title=""> <div id="b1"><p class="centre"><a href="index.html">Directory</a></p></div> <div id="b2"><p class="centre"><a href="business.html">Add Your Business</a></p></div> <div id="b3"><p class="centre"><a href="contact.html">Contact Us</a></p></div> </div><!-- end of navbar--> </div><!--end of bannerright--> </div><!-- end of banner--> <form name="add" action="#" method="post"> <fieldset> <legend>Add Your Business</legend> <p><label for="Name">Name</label><input type="text" name="Name" id="Name" maxlength="50" value="<?php if (!empty($Name)) echo $Name; ?>"/></p> <p><label for="Phone">Phone</label> <input type="text" name="Phone" id="Phone" maxlength="50" <?php if (!empty($Phone)) echo $Phone; ?>/></p> <p><label for="Email">Email</label><input type="text" name="Email" id="Email" maxlength="50"<?php if (!empty($Email)) echo $Email; ?> /></p> <p><label for="Postcode">Postcode</label><input type="text" name="Postcode" id="Postcode" maxlength="50"<?php if (!empty($Postcode)) echo $Postcode; ?> /></p> <p><label for="Web Address">Web Address</label><input type="text" name="Website" id="Website" maxlength="50" <?php if (!empty($Website)) echo $Website; ?>/></p> <select name="drop_1" id="drop_1"> <option value="" selected="selected" disabled="disabled">Select a Category</option> <?php getTierOne(); ?> </select> <span id="wait_1" style="display: none;"> <img alt="Please Wait" src="ajax-loader.gif"/> </span> <span id="result_1" style="display: none;"></span> <br /> </fieldset> </form> <div id="results"> <?php function checkPostcode (&$toCheck) { $alpha1 = "[abcdefghijklmnoprstuwyz]"; $alpha2 = "[abcdefghklmnopqrstuvwxy]"; $alpha3 = "[abcdefghjkstuw]"; $alpha4 = "[abehmnprvwxy]"; $alpha5 = "[abdefghjlnpqrstuwxyz]"; $pcexp[0] = '^('.$alpha1.'{1}'.$alpha2.'{0,1}[0-9]{1,2})([0-9]{1}'.$alpha5.'{2})$'; $pcexp[1] = '^('.$alpha1.'{1}[0-9]{1}'.$alpha3.'{1})([0-9]{1}'.$alpha5.'{2})$'; $pcexp[2] = '^('.$alpha1.'{1}'.$alpha2.'[0-9]{1}'.$alpha4.')([0-9]{1}'.$alpha5.'{2})$'; $pcexp[3] = '^(gir)(0aa)$'; $pcexp[4] = '^(bfpo)([0-9]{1,4})$'; $pcexp[5] = '^(bfpo)(c\/o[0-9]{1,3})$'; $Postcode = strtolower($toCheck); $Postcode = str_replace (' ', '', $Postcode); $valid = false; foreach ($pcexp as $regexp) { if (ereg($regexp,$Postcode, $matches)) { $toCheck = strtoupper ($matches[1] . ' ' . $matches [2]); $toCheck = ereg_replace ('C\/O', 'c/o ', $toCheck); $valid = true; break; } } if ($valid){return true;} else {return false;}; } if(isset($_POST['submit'])) { $drop = mysql_real_escape_string($_POST['drop_1']); $tier_two = mysql_real_escape_string($_POST['Subtype']); $Name = mysql_real_escape_string($_POST["Name"]); $Phone = mysql_real_escape_string($_POST["Phone"]); $Email = mysql_real_escape_string($_POST["Email"]); $Postcode = mysql_real_escape_string($_POST["Postcode"]); $Website = mysql_real_escape_string($_POST["Website"]); if($Name == '') { die ("<div class=\"form\">You did not complete the name field, please try again</div>"); } elseif ($Phone == '' or (preg_match("/^([1]-)?[0-9]{3}-[0-9]{3}-[0-9]{4}$/i", $Phone))) { die("<div class=\"form\"> You completed the telephone field incorrectly, please try again</div>"); } elseif ($Email == '' or (!filter_var($Email, FILTER_VALIDATE_EMAIL))) { die("<div class=\"form\"> You completed the Email field incorrectly, please try again</div>"); } elseif ($Postcode == '' or (!checkPostcode($Postcode))) { die("<div class=\"form\"> You did not complete the Postcode field correctly, please try again</div>"); } elseif ($Website == '' or (!preg_match("~^[a-z0-9.-]+\.(com|org|net|edu|co.uk)~i", $Website))) { die("<div class=\"form\">You completed the website field incorrectly, please try again</div>"); } else { echo("<div id=\"formtwo\">Thankyou for submiting your details, you will be added to our directory shortly</div>"); } $query = ("INSERT INTO business (`id`, `Name`, `Type`, `Subtype`, `Phone`, `Email`, `Postcode`, `WebAddress`, `Confirmed`) VALUES ('NULL', '$Name', '$drop', '$tier_two' , '$Phone', '$Email', '$Postcode', '$Website', 'Yes')"); mysql_query($query) or die ( "<br>Query: $query<br>Error: " .mysql_error()); } ?> <p>I-stevenage is forever expanding, by adding new catergories and business types. <br /> If you would like to add a service that is not in our list, then please click here. <br />(It will only take 30 seconds to fill in our form)</p> </div> </body> </html> Quote Link to comment https://forums.phpfreaks.com/topic/235574-i-dont-want-all-of-my-form-fields-to-go-blank-just-the-incorrect-ones-perhaps/#findComment-1211124 Share on other sites More sharing options...
spiderwell Posted May 6, 2011 Share Posted May 6, 2011 the form isnt populating as you are not putting the $_POST values into the variables so they remain empty/blank the die statements are AFTER this so shouldnt affect populating, if they are causing issues, change them to echo statements while debugging Quote Link to comment https://forums.phpfreaks.com/topic/235574-i-dont-want-all-of-my-form-fields-to-go-blank-just-the-incorrect-ones-perhaps/#findComment-1211253 Share on other sites More sharing options...
wright67uk Posted May 6, 2011 Author Share Posted May 6, 2011 Somthhing like; <?php $_POST['Phone'] = $Phone; $_POST['Email'] = $Email; $_POST['Postcode'] = $Postcode; $_POST['Website'] = $Website; ?> Ive tried putting this before and then after my validation functions, and also in the form fields themselves, but I cant get the desired effect. Where should I put this code for it to work properly? Quote Link to comment https://forums.phpfreaks.com/topic/235574-i-dont-want-all-of-my-form-fields-to-go-blank-just-the-incorrect-ones-perhaps/#findComment-1211308 Share on other sites More sharing options...
Drummin Posted May 6, 2011 Share Posted May 6, 2011 Try turning those around. $Phone=$_POST['Phone']; Quote Link to comment https://forums.phpfreaks.com/topic/235574-i-dont-want-all-of-my-form-fields-to-go-blank-just-the-incorrect-ones-perhaps/#findComment-1211313 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.