From: Jason Pruim on
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
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
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
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
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
>