meomike2000 Posted January 22, 2009 Share Posted January 22, 2009 A am new to php and have been trying to create a form to collect information. I can get the form to post and can even validate the input, the problem comes when there is a failure in validation, how do you get the form to reload and display the error that needs to be fixed. All I seem to be able to do is let the script die and display the error. Here is a sample form that I have created to test this on: <html> <head></head> <body> <?php //check if form has been submitted if (!$_POST['submit']) { //if not display form ?> <form method="POST" action="<?=$_SERVER['PHP_SELF']?>"> Select from test1: <select name="state"> <option value="test1.1">test1.1</option> <option value="test1.2">test1.2</option> <option value="test1.3">test1.3</option> </select><br /> <br /> Select from test2: <select name="city"> <option value="test2.1">test2.1</option> <option value="test2.2">test2.2</option> <option value="test2.3">test2.3</option> </select><br /> <br /> Select from test3: <select name="cat"> <option value="test3.1">test3.1</option> <option value="test3.2">test3.2</option> <option value="test3.3">test3.3</option> </select><br /> Please enter a number between 1 and 10: <input type="text" name="num" size="2"> <br /> <input type="submit" name="submit" value="Select"> </form> <?php } else { //form has been submitted //items selected, check that number was entered, $num = (!isset($_POST['num']) || trim($_POST['num']) == " " || !is_numeric($_POST['num'])) ? die ('ERROR: Please enter a number between 1 and 10') : trim($_POST['num']); //check number range if ($num < 1 || $num >10) { die ('ERROR: The number must be between 1 and 10'); } //if so, display them $state = $_POST['state']; $city = $_POST['city']; $cat = $_POST['cat']; echo 'Here is your selections: <br />'; echo "<i>$state</i><br />"; echo "<i>$city</i><br />"; echo "<i>$cat</i><br />"; } ?> </body> </html> any help with this would be greatly appreciated...... mike Quote Link to comment Share on other sites More sharing options...
revraz Posted January 22, 2009 Share Posted January 22, 2009 Do you want a custom error screen after you submit, or do you what to put the error back on the same form you are on? Quote Link to comment Share on other sites More sharing options...
meomike2000 Posted January 23, 2009 Author Share Posted January 23, 2009 i would like to put the error on the same form that way it can be corrected and resubmitted. Quote Link to comment Share on other sites More sharing options...
haku Posted January 23, 2009 Share Posted January 23, 2009 Save the submitted values in a cookie (or session variable), then use a redirect to redirect the user back to the original page. Populate the form using the values that are saved in the cookie. Note: DONT do this with password fields - the password becomes visible in the HTML and can be a security risk. Quote Link to comment Share on other sites More sharing options...
meomike2000 Posted January 23, 2009 Author Share Posted January 23, 2009 could you show me an example against the sample script that i have included in the original post, i am very new at this, or at least give me a link to examples i can see. thanks mike Quote Link to comment Share on other sites More sharing options...
uniflare Posted January 23, 2009 Share Posted January 23, 2009 Ok so you already have a script which validates etc. Ideally you have one script: user.php (or something), This will be layed out something like: <?php // Check wether to show form or validate and log in user. if(isset($_POST['form_data'])){ // Check if there has been any errors etc, if there has: display the form with the errors. }else{ // Display the form. } ?> Now you could just have the html code for the form doubled in the script (so you have two copies), this is bad practice and can be easily sorted with a simple function. <?php Function DisplayForm($errors=null){ $error_string = $errors; // You could use $error_strring = implode("<br />",$errors); if you want to save performance by using an array instead. echo(' '.$error_string.'<Br /> <form method="POST" action="'.$_SERVER['PHP_SELF'].'"> Select from test1: <select name="state"> <option value="test1.1">test1.1</option> <option value="test1.2">test1.2</option> <option value="test1.3">test1.3</option> </select><br /> <br /> Select from test2: <select name="city"> <option value="test2.1">test2.1</option> <option value="test2.2">test2.2</option> <option value="test2.3">test2.3</option> </select><br /> <br /> Select from test3: <select name="cat"> <option value="test3.1">test3.1</option> <option value="test3.2">test3.2</option> <option value="test3.3">test3.3</option> </select><br /> Please enter a number between 1 and 10: <input type="text" name="num" size="2"> <br /> <input type="submit" name="submit" value="Select"> </form> '); } ?> To put this into perspective, you would modify your original code like so: <html> <head></head> <body> <?php Function DisplayForm($errors=null){ $error_string = $errors; // You could use $error_strring = implode("<br />",$errors); if you want to save performance by using an array instead. echo(' '.$error_string.'<Br /> <form method="POST" action="'.$_SERVER['PHP_SELF'].'"> Select from test1: <select name="state"> <option value="test1.1">test1.1</option> <option value="test1.2">test1.2</option> <option value="test1.3">test1.3</option> </select><br /> <br /> Select from test2: <select name="city"> <option value="test2.1">test2.1</option> <option value="test2.2">test2.2</option> <option value="test2.3">test2.3</option> </select><br /> <br /> Select from test3: <select name="cat"> <option value="test3.1">test3.1</option> <option value="test3.2">test3.2</option> <option value="test3.3">test3.3</option> </select><br /> Please enter a number between 1 and 10: <input type="text" name="num" size="2"> <br /> <input type="submit" name="submit" value="Select"> </form> '); } //check if form has been submitted if (!$_POST['submit']) { //if not display form DisplayForm(); } else { //form has been submitted $error = null; // Declare it so we dont get those notices 'undeclared variable' blah blah //check number range if (isset($_POST['num']) && is_numeric($_POST['num']) && $_POST['num'] < 1 || $_POST['num'] >10) { $error .= 'ERROR: The number must be between 1 and 10'; } // If there was an error, show it. if($error != null){ DisplayForm($error); }else{ // Otherwise carry on? $state = $_POST['state']; $city = $_POST['city']; $cat = $_POST['cat']; echo 'Here is your selections: <br />'; echo "<i>$state</i><br />"; echo "<i>$city</i><br />"; echo "<i>$cat</i><br />"; } } ?> </body> </html> I hope this helps, Quote Link to comment Share on other sites More sharing options...
meomike2000 Posted January 23, 2009 Author Share Posted January 23, 2009 yes it makes sense, thank you very very much. now i can test this out, and move on with my development. Quote Link to comment Share on other sites More sharing options...
meomike2000 Posted January 23, 2009 Author Share Posted January 23, 2009 i only had to change the validation part of your script to: //check number range if (!isset($_POST['num']) || !is_numeric($_POST['num'])) { $error .='ERROR: Please enter a number between 1 and 10'; } elseif ($_POST['num'] < 1 || $_POST['num'] > 10) { $error .='ERROR: The number must be between 1 and 10'; } //if there was an error, show it. from: //check number range if (isset($_POST['num']) && is_numeric($_POST['num']) && $_POST['num'] < 1 || $_POST['num'] >10) { $error .= 'ERROR: The number must be between 1 and 10'; } if i used the validation that you show here i could still leave the number input blank it would pass validation...... but still thanks for the help... now what if i wanted to make a selection in the first box affect my choices in the second box. say i wanted the first box to let me choose a state, well then my second box would be to choose a city within that state. how would something like that look..... can somebody please help with that..... thanks mike Quote Link to comment Share on other sites More sharing options...
apulmca Posted January 23, 2009 Share Posted January 23, 2009 First you learn some basics from http://www.tizag.com/phpT/ Quote Link to comment Share on other sites More sharing options...
meomike2000 Posted January 24, 2009 Author Share Posted January 24, 2009 I have read a book called "how to do everything with php&mysql" by Vakram Vaswani. very good book, explains most of the basics and gives good examples, that is how i learned how to write the script above and how to use validation to check the input. i will look at the site that you suggest, but i do how a good understanding of the basics. thanks for the info and the link. Quote Link to comment 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.