Prev: Disabling an extension on a perdir basis.
Next: How to handle a submitted form with no changes -- best practices sought
From: Jason Pruim on 11 Sep 2010 09:49 Hey everyone! Hope you are having a great weekend, and I'm hoping someone might be coherent enough to help me find a more elegant solution to a problem that I have... I have a form for submitting an event to a website, and if the form is not submitted successfully (such as they didn't fill out a required field) I want it to redisplay the form with inline errors as to what happened and display the values they selected... I have a working solution but was hoping for something a little more elegant. And something that would work better for a month selector as well... Here is the relevant code that I have that works: <?PHP if ($_POST['hidSubmit'] ==TRUE & $_POST['type'] == "meeting"): echo <<<HTML <select name="type" id="type"> <option value="0">-- select type --</option> <option value="meeting" selected>Meeting</option> <option value="event" >Event</option> </select> HTML; elseif ($_POST['hidSubmit'] == TRUE & $_POST['type'] == "event"): //if ($_POST['hidSubmit'] == TRUE & $_POST['type'] == "event") { echo <<<HTML <select name="type" id="type"> <option value="0">-- select type --</option> <option value="meeting">Meeting</option> <option value="event" selected>Event</option> </select> HTML; else: //if ($_POST['hidSubmit'] != TRUE): echo <<<HTML <select name="type" id="type"> <option value="0" selected>-- select type --</option> <option value="meeting">Meeting</option> <option value="event">Event</option> </select> HTML; endif; ?> which works BUT I don't want to have to have that for a month selector or a day selector :) Any ideas what I'm missing?
From: "=?utf-8?B?YXNoQGFzaGxleXNoZXJpZGFuLmNvLnVr?=" on 11 Sep 2010 10:58 For a month selector, using a loop to output the months is good, as you can then within the loop check for that value sent and set the selected html attribute for that select element. I should warn you that your code will throw a warning when no data has been posted to it. Consider using isset() instead to check for posted values rather than comparing a value (which might not exist) with true. Thanks, Ash http://www.ashleysheridan.co.uk ----- Reply message ----- From: "Jason Pruim" <lists(a)pruimphotography.com> Date: Sat, Sep 11, 2010 14:49 Subject: [PHP] Elegance is the goal... Sticky form submit help To: "PHP-General list" <php-general(a)lists.php.net> Hey everyone! Hope you are having a great weekend, and I'm hoping someone might be coherent enough to help me find a more elegant solution to a problem that I have... I have a form for submitting an event to a website, and if the form is not submitted successfully (such as they didn't fill out a required field) I want it to redisplay the form with inline errors as to what happened and display the values they selected... I have a working solution but was hoping for something a little more elegant. And something that would work better for a month selector as well... Here is the relevant code that I have that works: <?PHP if ($_POST['hidSubmit'] ==TRUE & $_POST['type'] == "meeting"): echo <<<HTML <select name="type" id="type"> <option value="0">-- select type --</option> <option value="meeting" selected>Meeting</option> <option value="event" >Event</option> </select> HTML; elseif ($_POST['hidSubmit'] == TRUE & $_POST['type'] == "event"): //if ($_POST['hidSubmit'] == TRUE & $_POST['type'] == "event") { echo <<<HTML <select name="type" id="type"> <option value="0">-- select type --</option> <option value="meeting">Meeting</option> <option value="event" selected>Event</option> </select> HTML; else: //if ($_POST['hidSubmit'] != TRUE): echo <<<HTML <select name="type" id="type"> <option value="0" selected>-- select type --</option> <option value="meeting">Meeting</option> <option value="event">Event</option> </select> HTML; endif; ?> which works BUT I don't want to have to have that for a month selector or a day selector :) Any ideas what I'm missing? -- PHP General Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php
From: tedd on 11 Sep 2010 11:55 At 9:49 AM -0400 9/11/10, Jason Pruim wrote: >Hey everyone! > >Hope you are having a great weekend, and I'm hoping someone might be >coherent enough to help me find a more elegant solution to a problem >that I have... > >I have a form for submitting an event to a website, and if the form >is not submitted successfully (such as they didn't fill out a >required field) I want it to redisplay the form with inline errors >as to what happened and display the values they selected... -snip- >Any ideas what I'm missing? Jason: I think what you are missing is that this data collection should be split between client-side and server-side operations. For client-side simply use javascript to monitor what they user enters and then immediately respond to the requirements imposed upon the user. After the user fills out the information correctly and clicks submit, then have your server-side scripts check the data again and respond accordingly. Here are a couple of examples: http://webbytedd.com/c/form-calc/ http://webbytedd.com/c/form-submit/ Cheers, tedd -- ------- http://sperling.com/
From: Tamara Temple on 11 Sep 2010 12:39 Rather than repeating all that code, I suggest the following: <select name="type" id="type> <option value="0">-- select type --</option> <option value="meeting" <?php echo (isset($_POST['hidSubmit'] && $_POST['hidSubmit'] == TRUE && $_POST['type'] == "meeting") ? "selected" : '' ?> <option value="event" <?php echo (isset($_POST['hidSubmit'] && $_POST['hidSubmit'] == TRUE && $_POST['type'] == "event") ? "selected" : '' ?> </select> For a month selector, try: <?php // assume current month number is in $curr_month $months = array(1 => "January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"); // will create an array of month names, with a starting base of 1 (instead of zero) echo "<select name=\"month\" id=\"month\">\n"; foreach ($months as $m => $mname) { echo "<option value=\"$m\""; if ($curr_month == $m) echo " selected "; echo ">$mname</option>\n"; } echo "</select>\n"; ?> There are other possiblities as well. One time, I didn't want to actually store the month names, perhaps allowing them to be localized. Instead I used strftime, which will return appropriate names based on locale: <?php // assume current month number is in $curr_month echo "<select name=\"month\" id=\"month\">\n"; for ($m = 1; $m <= 12; $m++) { echo "<option value=\"$m\""; if ($curr_month == $m) echo " selected "; echo ">"; $mname = strftime("%B", 0,0,0,2010, $m, 1); // time, year and day don't matter, all we're after is the appropriate month name set in the locale echo $mname; echo "</option>\n"; } echo "</select>\n"; ?> On Sep 11, 2010, at 8:49 AM, Jason Pruim wrote: > Hey everyone! > > Hope you are having a great weekend, and I'm hoping someone might be > coherent enough to help me find a more elegant solution to a problem > that I have... > > I have a form for submitting an event to a website, and if the form > is not submitted successfully (such as they didn't fill out a > required field) I want it to redisplay the form with inline errors > as to what happened and display the values they selected... > > I have a working solution but was hoping for something a little more > elegant. And something that would work better for a month selector > as well... Here is the relevant code that I have that works: > > <?PHP > if ($_POST['hidSubmit'] ==TRUE & $_POST['type'] == "meeting"): > echo <<<HTML > <select name="type" id="type"> > <option value="0">-- select type --</option> > <option value="meeting" selected>Meeting</option> > <option value="event" >Event</option> > </select> > HTML; > > elseif ($_POST['hidSubmit'] == TRUE & $_POST['type'] == "event"): > //if ($_POST['hidSubmit'] == TRUE & $_POST['type'] == "event") { > > echo <<<HTML > <select name="type" id="type"> > <option value="0">-- select type --</option> > <option value="meeting">Meeting</option> > <option value="event" selected>Event</option> > </select> > HTML; > > else: > //if ($_POST['hidSubmit'] != TRUE): > > > echo <<<HTML > <select name="type" id="type"> > <option value="0" selected>-- select type --</option> > <option value="meeting">Meeting</option> > <option value="event">Event</option> > </select> > HTML; > endif; > > ?> > > which works BUT I don't want to have to have that for a month > selector or a day selector :) > > Any ideas what I'm missing? > > > > -- > PHP General Mailing List (http://www.php.net/) > To unsubscribe, visit: http://www.php.net/unsub.php >
From: Tamara Temple on 11 Sep 2010 12:42
The debate on client-side vs. server-side form validation is ongoing. Client-side is more responsive, and attempts to keep bad data from ever reaching your application, but relies on javascript being enabled. Since this is something easily turned off by users, one can't always rely on it to do form validation. So server-side validation is needed as well to allow your full application to gracefully degrade in the absence of working javascript on the client's side. Coding defensively helps! On Sep 11, 2010, at 10:55 AM, tedd wrote: > At 9:49 AM -0400 9/11/10, Jason Pruim wrote: >> Hey everyone! >> >> Hope you are having a great weekend, and I'm hoping someone might >> be coherent enough to help me find a more elegant solution to a >> problem that I have... >> >> I have a form for submitting an event to a website, and if the form >> is not submitted successfully (such as they didn't fill out a >> required field) I want it to redisplay the form with inline errors >> as to what happened and display the values they selected... > > -snip- > >> Any ideas what I'm missing? > > Jason: > > I think what you are missing is that this data collection should be > split between client-side and server-side operations. > > For client-side simply use javascript to monitor what they user > enters and then immediately respond to the requirements imposed upon > the user. > > After the user fills out the information correctly and clicks > submit, then have your server-side scripts check the data again and > respond accordingly. > > Here are a couple of examples: > > http://webbytedd.com/c/form-calc/ > > http://webbytedd.com/c/form-submit/ > > > Cheers, > > tedd > > -- > ------- > http://sperling.com/ > > -- > PHP General Mailing List (http://www.php.net/) > To unsubscribe, visit: http://www.php.net/unsub.php > |