Re: Form helper issues "Invalid argument supplied for foreach()"
am 29.03.2008 22:44:36 von mejparkOn 22 Mar, 18:21, Mike Placentra II
> On Mar 21, 1:32 pm, mejpark
>
>
>
> > Hello,
>
> > I'm working my way through O'Reilly's "Learning PHP 5", and I've hit a
> > brick wall. There are two files involved: the first contains some
> > helper functions to print HTML forms (form_helpers.php). The second
> > file (form_meals.php) calls these functions to print an HTML form with
> > various inputs.
>
> > The error I'm getting is "( ! ) Warning: Invalid argument supplied for
> > foreach() in form_helpers.php on line 80". This line is inside the
> > function input_select, specifically the foreach statement, which is
> > used to determine which elements are selected by default when the form
> > is displayed.
>
> > I think the error relates to the code that calls the input_select
> > function:
> >
> > $GLOBALS['main_dishes'], $multiple = true) ?>
> > This program is taken directly from the ebook, so I cannot see why it
> > doesn't work.
>
> > Any pointers much appreciated.
>
> > Thanks
>
> It works for me in PHP (cli) 5.2.3 as well as PHP (cgi) 4.4.8. Are you
> sure that's the exact code you were trying? Could you copy and paste
> the code from your post and try it again? (there will be some problems
> that need to be corrected in form_meal.php because when it was posted
> the lines were word-wrapped so one-line comments were broken into
> two).
>
> This is unrelated to your problem, but since you're learning PHP5
> anyway you can benefit from using...
> echo "abc", $def, "ghi";
> ...instead of...
> print "abc" . $def . "ghi";
> ...since using echo with commas in PHP5 tells it to output each string
> consecutively instead of concatenating it and then outputting it all
> as one (concatenating takes a little extra time, more significant in a
> loop). This doesn't apply if you're not outputting the string, though,
> such as when you are returning it. This would be useful for that line
> in the input_select() function definition (form_helpers.php) in the
> foreach loop...
> print '
> ...which could be rewritten as...
> echo '
>
> --
> Michael Placentra II
It turns out that the problem lies with the array of default values
named, suprisingly, $defaults. There were no default values for the
main_dish, which must have caused the error. I managed to get it
working by adding two selections for the main_dish to the $defaults
array:
//right
$defaults = array('delivery' => 'yes',
'size' => 'medium',
'main_dish' => array('cuke', 'tripe',
'checkbox' => 'yes'));
var_dump($defaults);
echo "
";
echo "
";
Thanks for the PHP 5 pointers, by the way. Much appreciated!