Michael Sims wrote:
Jochem Maas wrote:
trlists@xxxxxxxxxx wrote:
If one must check the value and not just the existence of the
checkbox entry, or for other uses, e.g. where a flag may or may not
be present, one is saddled with clumsy constructs like:
if (($isset($array['index']) && ($array['index'] == 1)) ...
okay, I get where your coming from - indeed nasty business
them checkboxes.
Here's an approach that I like which I think cuts down on the clumsy
constructs.
On a "controller" page (the C in MVC) that handles form submissions I create
an array which defines what form variables are available and their default
values if not entered. I then use array_merge() to combine that array with
$_POST (or $_GET, as the case may be) and the result is an array that
contains all of my form variables with each guaranteed to be set and contain
a sane default. array_merge() works in such a way that values in the first
default array will only be replaced if they actually exist in $_POST, which
is what I want. (Contrived) example:
$formVars = array_merge(array(
'firstName' => '',
'lastName' => '',
'contactMethod' => 'email',
'flags' => array('one' => 0, 'two' => 0, 'three' => 0)
), $_POST);
Its a good idea - although to make this example work I believe you would
need to use array_merge_recursive() - which does what you mean ;-)
The above handles the case where you have:
<input type="checkbox" name="flags[one]" value="1">
<input type="checkbox" name="flags[two]" value="1">
<input type="checkbox" name="flags[three]" value="1">
Now, I do:
if (!empty($_POST)) {
if (trim($formVars['firstName']) == '') {
//complain that first name is required
}
if ($formVars['flags']['one']) {
//handle the case where the first checkbox is checked
}
...
}
This way I can safely reference anything in $formVars under E_ALL without
throwing notices. I think it's a lot cleaner than the constant
(!isset($_POST['var']) || $_POST['var'] == '') stuff...YMMV
--
PHP General Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php