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>