From: Jason Pruim on

On Sep 11, 2010, at 11: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.

Hey tedd,

Thanks for the response but for this particular project I'm avoiding
using anything but standard HTML since it will be used almost
exclusively by people using screen readers and other assistive
technology so I'm going a little old school with it to make sure it
all works for everyone else first.


>
> 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/

I will definitely be checking out your examples though! Some of the
cleanest, well documented, and easiest to read code I have seen in a
long time!

>

From: Jason Pruim on
Hey Ash,


On Sep 11, 2010, at 10:58 AM, ash(a)ashleysheridan.co.uk wrote:

> 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.

that's what I was thinking too... Now just to work out the logic :)
>
> 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.

I have other code that will catch it if it's empty but a good
suggestion none the less! If I stick with that code for some reason
I'll be updating it to use isset()

Thanks Ash!
>
> 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: Jason Pruim on
Hi Tamara,



On Sep 11, 2010, at 12:39 PM, Tamara Temple wrote:

> 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>
>

That's actually what I'm trying to get away from. I was hoping to do
it all in HEREDOC syntax. I've always thought it made it cleaner. But
that is a personal opinion :)
>
> 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";
> ?>

I'm actually doing something similar to that right now...

<?PHP
if (isset($_POST)) {
$date = date("n", $i);
echo $date;
$i++;
}
?>

Prints just the numeric reference to the month.


From: Jason Pruim on

On Sep 11, 2010, at 1:03 PM, Debbie . wrote:

> Jason,
> I don't really understand the responses you got to this email, I
> have attached the sticky form I made from a book called "PHP Visual
> Quickstart guide. It uses an if conditional to print a response if
> the field is empty.
> If I'm not helping, sorry, I'm new!
>
> Good luck!
>
> live, love and be happy!
>
> Deb

Hi Deb,

Welcome to the list! It will be the best and worse place you'll ever
come for help! :)

What you sent is helpful, but due to a personal preference I'm trying
to avoid going in and out of PHP like you do in there... Trying to use
HEREDOC for the entire page. It makes more sense to me that way :)

Thank you though! :)


From: Jim Lucas on
Jason Pruim wrote:
> Hi Tamara,
>
>
>
> On Sep 11, 2010, at 12:39 PM, Tamara Temple wrote:
>
>> 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>
>>
>
> That's actually what I'm trying to get away from. I was hoping to do it
> all in HEREDOC syntax. I've always thought it made it cleaner. But that
> is a personal opinion :)
>>
>> 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";
>> ?>
>
> I'm actually doing something similar to that right now...
>
> <?PHP
> if (isset($_POST)) {
> $date = date("n", $i);
> echo $date;
> $i++;
> }
> ?>
>
> Prints just the numeric reference to the month.
>
>
>

Here is a combination of Tamara's method and they way that I would do it
based off her example. Some of hers didn't work for me out of the box,
so I modified it to my liking. Then I included your request to do
HEREDOC syntax for outputting the list.

<?php

$o = array();
for ($m = 1; $m <= 12; $m++) {
$sel = ($curr_month == $m ? ' selected="selected"':'');
$mname = date('F', mktime(0,0,0,$m));

$o[] = ' <option value="'.(int)$m.'"'.$sel.'>'.
htmlspecialchars($mname).'</option>';
}
$select_month_options = join("\n", $o);

echo <<<HTML
<select name="month" id="month">
{$select_month_options}
</select>
HTML;

?>

Jim