Wiggins d Anconia wrote:
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;

It was just pseudo-code. I used the correct $sth->execute and then $sth->fetchrow_hashref in the actual code.


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.

By "bool", I mean that the value will only ever be '1' or '0'.


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

Just a simple example.


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

It did end up working for me. Thanks.


--
Andrew Gaffney
Network Administrator
Skyline Aeronautics, LLC.
636-357-1548


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