Re: Form helper issues "Invalid argument supplied for foreach()"
am 30.03.2008 17:52:29 von George MaicovschiOn Mar 30, 6:16 pm, mejpark
> On 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 hi=
t a
> > >>>> brick wall. There are two files involved: the first contains some
> > >>>> helper functions to print HTML forms (form_helpers.php). The secon=
d
> > >>>> file (form_meals.php) calls these functions to print an HTML form w=
ith
> > >>>> 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 f=
orm
> > >>>> is displayed.
> > >>>> I think the error relates to the code that calls the input_select
> > >>>> function:
> > >>>>
> > >>>> $GLOBALS['main_dishes'], $multiple =3D 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 y=
ou
> > >>> 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 proble=
ms
> > >>> that need to be corrected in form_meal.php because when it was poste=
d
> > >>> 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 stri=
ng
> > >>> 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, thoug=
h,
> > >>> such as when you are returning it. This would be useful for that lin=
e
> > >>> 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 =3D array('delivery' =3D> 'yes',
> > >> 'size' =3D> 'medium',
> > >> 'main_dish' =3D> ar=
ray('cuke', 'tripe',
> > >> 'checkbox' =3D> 'ye=
s'));
>
> > >> 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 htmlentities($values[$element_name]) . '">';}
>
> //print a submit button
> function input_submit($element_name, $label) {
> print '
;
> print htmlentities($label) .'"/>';}
>
> //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=3D"' . $element_value . '" ';
> if ($element_value == $values[$element_name]) {
> print ' checked=3D"checked"';
> }
> print '/>';}
>
> //print a