> Wiggins d'Anconia wrote:
> > Andrew Gaffney wrote:
> > 
> >> Wiggins d'Anconia wrote:
> >>
> >>> Andrew Gaffney wrote:
> >>>
> >>>> I have a Perl CGI script that runs a query against a MySQL table. I 
> >>>> have about 20 boolean values that I want shown as checkboxes in the 
> >>>> produced HTML, but I don't want to have to do something like the 
> >>>> below for every value.
> >>>>
> >>>
> >>> The key to this is contriving good names for the check boxes, usually 
> >>> such that they can be looped over...
> >>
> >>
> >>
> >> That's not an option. The values have been defined months and months 
> >> ago and are hard-coded in a number of places.
> >>
> > 
> > Ah the power of poor planning....
> 
> It was planned pretty well at first...about 2 years ago, but things
change. The table has 
> over doubled in number of fields since then.
> 

Right but at some point, aka around the fourth checkbox being added,
someone should have realized that there would be more and added a loop
just as you are doing now at around 20.  In which case it was option 2
aka that refactoring wasn't being done as the system evolved, which just
as they predict that means something major will have to be done to
correct the situation at a later time, and that time has come....

> >>>> [code]
> >>>> if($ref->{somevalue}) {
> >>>>   print "<input type=checkbox name=somevalue value=1 checked>";
> >>>> } else {
> >>>>   print "<input type=checkbox name=somevalue value=1>";
> >>>> }
> >>>> [/code]
> >>>>
> >>>
> >>> foreach my $index (1 .. 20) {
> >>>    print "<input type=checkbox name=somevalue$index " . 
> >>> ($ref->{"somevalue$index"} ? ' checked=checked' : '') . ">";
> >>> }
> >>>
> >>> The (exp ? string : string) is called the ternary operator, perldoc 
> >>> perlop for more.
> >>
> >> Will this work in a here doc?
> > 
> > Don't know... god I hate here docs... give it a shot but I doubt it.
> 
> Apparently, that's a big fat NO. Although, there is something else
that would probably work:
> 
> [code]
> my $ref = $sth->execute;

'execute' (assuming we are talking DBI) returns a bool for success or
failure, not a hashref. (Not sure if this was meant to be pseudo-code
based on your statement below.)  You will likely need a

$ref = $sth->fetchrow_hashref;

> my $bools = {val1 => '', val2 => '', val3=> '', ... };
> foreach $bool (keys $bools) {
>    $bools->{$bool} = "checked" if($ref->{$bool} eq '1');
> }

If these are truly 'bools' then it is cleaner to check true/false rather
than string equals to 1, true may not always be represented by 1 and
undef will produce a warning rather than just being false.

> ...
> print <<EOF;
> <input type=hidden name=val1 $bools->{val1}>
> <input type=hidden name=val2 $bools->{val2}>
> EOF
> [/code]

I suspect this isn't really all that is contained in your heredoc,
otherwise why not put the input generation into the loop above?

> 
> Does this look like it might work? I think my syntax may be a bit off.
> 

Your syntax is a bit off (don't know if you wanted response on that),
but your idea should work...

http://danconia.org


-- 
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]
<http://learn.perl.org/> <http://learn.perl.org/first-response>


Reply via email to