esoteric Posted November 5, 2011 Share Posted November 5, 2011 I have a form page (referred to as form.php) which is then processed via a submit button, the script then processes the data from the form.php and if it discovers an error it then sets a variable containing the error message my process page contains if (empty($b_addr)) { $b_addr_error = "Address is required"; $check_failed = TRUE;} header("Location: form.php"); then my form.php contains $b_addr_error = safe($_GET['b_addr_error']); if (isset($_POST['$b_addr_error'])) { echo "<div class='errorfont' align='center'>'".$b_addr_error."';</div>"; } but the variables do not get passed back to form.php from the process page, any ideas? Thank you. Quote Link to comment https://forums.phpfreaks.com/topic/250516-return-variables/ Share on other sites More sharing options...
watsmyname Posted November 5, 2011 Share Posted November 5, 2011 well your process page doesnot redirects user to form.php with query string. Your process page should be <?php if (empty($b_addr)) { $b_addr_error = "Address is required"; $check_failed = TRUE;} header("Location: form.php?b_addr_error=".$b_addr_error); ?> it is just a noob approach. It would be better you put errors in session and show them in form.php page upon redirection from process page Quote Link to comment https://forums.phpfreaks.com/topic/250516-return-variables/#findComment-1285284 Share on other sites More sharing options...
Pikachu2000 Posted November 5, 2011 Share Posted November 5, 2011 Variables are cleared when redirecting. You should do the form processing in the same script as the form, and display any errors to the user as well as repopulating the form with their responses so all they have to do is make corrections instead of filling out the entire form again. Quote Link to comment https://forums.phpfreaks.com/topic/250516-return-variables/#findComment-1285285 Share on other sites More sharing options...
Pikachu2000 Posted November 5, 2011 Share Posted November 5, 2011 Here's a basic example using an array to store errors, with field validation and some added CSS to highlight errors. Feel free to paste it to a script and play with it. <?php if( isset($_POST['submitted']) && $_POST['submitted'] == 'yes' ) { //check for hidden field value to indicate form has been submitted $errors = array(); // initialize an array to hold validation errors $_POST = array_map('trim', $_POST); // trim all $_POST array values if( !empty($_POST['name']) ) { // validate the name field if( !ctype_alpha($_POST['name']) ) { $errors['name'][] = 'Name must be alphabetic characters only.'; // if name has non alpha chars, store error } if( strlen($_POST['name']) < 3 || strlen($_POST['name'] > 20) ) { $errors['name'][] = 'Name must be from 3 to 20 characters.'; // if name has too many/few chars, store error } } else { $errors['name'][] = 'Name is a required field.'; // if name is empty, store error } if( !empty($_POST['number']) ) { // same validations as in name, above. if( !ctype_digit($_POST['number']) ) { $errors['number'][] = 'Number must be numeric.'; } if( strlen($_POST['number']) < 5 || strlen($_POST['number']) > 10 ) { $error = 'Number must be from 3 to 20 digits. It is currently ' . strlen($_POST['number']) . ' digit'; $error .= strlen($_POST['number']) == 1 ? '.' : 's.'; $errors['number'][] = $error; } } else { $errors['number'][] = 'Number is a required field.'; } if( !empty($errors) ) { // if the $errors array is not empty, display the errors to allow the user to correct them and resubmit the form $echo = array(); foreach( $errors as $v ) { if( is_array($v) ) { $echo[] = implode('<br>', $v ); } else { $echo[] = $v; } } $err_echo ="<font color=\"red\">The following errors were detected:<br>"; $err_echo .= implode("<br>\n", $echo); $err_echo .= '</font>'; } } if( (isset($_POST['submitted']) && !empty($errors)) || !isset($_POST['submitted']) ) { ?> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html;charset=utf-8" > <style type="text/css" media="screen"> body { font-family: helvetica, arial, sans-serif; font-size: 0.85em; line-height: 1.25em; letter-spacing: -0.5px; } input { border: 1px solid #336699; padding: 0.1em; margin: 5px; color: #113366; } input.error { background-color: #F2BDCA; color: #850310; border: 1px solid red; } input.good { background-color: #D3F5D3; border: 1px solid #156B15; color: #156B15; } input.submit { background-color: #CCCCCC; border: 1px solid #888888; color: #333333; padding: 2px; margin: 0; font: 0.9em helvetica, arial sans-serif; } </style> <title> Work In Progress</title> </head> <body> <?php echo !empty($err_echo) ? $err_echo : ''; ?> <form method="post" action=""> Name (3-20 letters): <input type="text" class="<?php if( isset($_POST['submitted']) ) { echo !empty($errors['name']) ? 'error' : 'good'; } ?>" name="name" value="<?php echo isset($_POST['name']) ? $_POST['name'] : ''; ?>"> <br> Number (5-10 numbers): <input type="text" class="<?php if( isset($_POST['submitted']) ) { echo !empty($errors['number']) ? 'error' : 'good'; } ?>" name="number" value="<?php echo isset($_POST['number']) ? $_POST['number'] : ''; ?>"> <br> <input type="hidden" name="submitted" value="yes"> <input class="submit" type="submit" name="submit" value=" <?php echo !empty($errors) ? 'Re-Submit' : 'Submit'; ?> "> </form> <?php } else { // Form was submitted, and validated with no errors. OK to run db insert, display success message, etc. echo "Successful submission!"; } ?> </body> </html> Quote Link to comment https://forums.phpfreaks.com/topic/250516-return-variables/#findComment-1285286 Share on other sites More sharing options...
RussellReal Posted November 5, 2011 Share Posted November 5, 2011 also, 2 redirects is frustrating to users who use their back buttons lol <- back.. oh damn redirected.. Lets try that again <- back!!!!.. damnit redirected like pikachu said, you should process the query information WITH the same file it redirects to, upon COMPLETION it should redirect to a complete page or the destination page for the form.. to use information the way you're doing it this way, you'd need to throw the errors into a php session $_SESSION['errors'][] = 'Could Not Do Dat Stuff'; then on the page you redirect to, initialize the session again session_start(); and loop through $_SESSION['errors'] and display the information Quote Link to comment https://forums.phpfreaks.com/topic/250516-return-variables/#findComment-1285287 Share on other sites More sharing options...
esoteric Posted November 5, 2011 Author Share Posted November 5, 2011 That was really useful info, especially the script, so thank you very much. The only thing i need to know now is how to have the script continue to my processing page if there are no errors else { // Form was submitted, and validated with no errors. OK to run db insert, display success message, etc. echo "Successful submission!"; // continue to process page here?? } i tried to set the header but i cant because it was already sent Quote Link to comment https://forums.phpfreaks.com/topic/250516-return-variables/#findComment-1285301 Share on other sites More sharing options...
Pikachu2000 Posted November 5, 2011 Share Posted November 5, 2011 You should be able to use a header() redirect there without any problems, unless you've added something that outputs anything to the browser prior to that point. Quote Link to comment https://forums.phpfreaks.com/topic/250516-return-variables/#findComment-1285331 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.