Re: Form helper issues "Invalid argument supplied for foreach()"
am 30.03.2008 17:16:57 von mejparkOn Mar 30, 2:47 pm, Jerry Stuckle
> mejpark wrote:
> > On 29 Mar, 22:44, mejpark
> >> On 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!
>
> > When the script is executed on my production web server, the following
> > notices are logged:
> > PHP Notice: Undefined index: _submit_check in /home/fhlinux150/s/swf-
> > games.net/user/htdocs/portfolio/phpscripts/forms.php on line 48
> > PHP Notice: Undefined index: _submit_check in /home/fhlinux150/s/swf-
> > games.net/user/htdocs/portfolio/phpscripts/forms.php on line 78
> > PHP Notice: Undefined index: name in /home/fhlinux150/s/swf-
> > games.net/user/htdocs/portfolio/phpscripts/formhelpers.php on line 8
> > PHP Notice: Undefined index: sweet in /home/fhlinux150/s/swf-
> > games.net/user/htdocs/portfolio/phpscripts/formhelpers.php on line 73
> > PHP Notice: Undefined index: puff in /home/fhlinux150/s/swf-
> > games.net/user/htdocs/portfolio/phpscripts/formhelpers.php on line 78
> > PHP Notice: Undefined index: square in /home/fhlinux150/s/swf-
> > games.net/user/htdocs/portfolio/phpscripts/formhelpers.php on line 78
> > PHP Notice: Undefined index: cake in /home/fhlinux150/s/swf-
> > games.net/user/htdocs/portfolio/phpscripts/formhelpers.php on line 78
> > PHP Notice: Undefined index: ricemeat in /home/fhlinux150/s/swf-
> > games.net/user/htdocs/portfolio/phpscripts/formhelpers.php on line 78
> > PHP Notice: Undefined index: stomach in /home/fhlinux150/s/swf-
> > games.net/user/htdocs/portfolio/phpscripts/formhelpers.php on line 78
> > PHP Notice: Undefined index: taro in /home/fhlinux150/s/swf-
> > games.net/user/htdocs/portfolio/phpscripts/formhelpers.php on line 78
> > PHP Notice: Undefined index: giblets in /home/fhlinux150/s/swf-
> > games.net/user/htdocs/portfolio/phpscripts/formhelpers.php on line 78
> > PHP Notice: Undefined index: abalone in /home/fhlinux150/s/swf-
> > games.net/user/htdocs/portfolio/phpscripts/formhelpers.php on line 78
> > PHP Notice: Undefined index: comments in /home/fhlinux150/s/swf-
> > games.net/user/htdocs/portfolio/phpscripts/formhelpers.php on line 32
>
> > ?
>
> You never posted the script as requested, so we have no idea what's
> going on.
>
> If you want help, you need to post enough information for us to help
> you. We're not a library or a book store, and very few of us have any
> specific book.
>
> --
> ==================
> Remove the "x" from my email address
> Jerry Stuckle
> JDS Computer Training Corp.
> jstuck...@attglobal.net
> ==================
I've only modified the defaults array--the rest of the code is in
tact. Here it is:
==================
/*
* formhelpers.php
*/
//print a text box
function input_text($element_name, $values) {
print '';
}
//print a submit button
function input_submit($element_name, $label) {
print '';
}
//print a textarea
function input_textarea($element_name, $values) {
print '';
}
//print a radio button or checkbox
function input_radiocheck($type, $element_name, $values,
$element_value) {
print '
value="' . $element_value . '" ';
if ($element_value == $values[$element_name]) {
print ' checked="checked"';
}
print '/>';
}
//print a