You are here: Re: [SMARTY] Re: Nested queries/nested arrays « Smarty Templates Posts « IT news, forums, messages
Re: [SMARTY] Re: Nested queries/nested arrays

Posted by Matthew Weier O'Phinney on 08/13/05 18:30

* Amanda Hemmerich <ahemmeri@indiana.edu>:
> I've changed the code again, but I'm still getting an error. I was
> getting an error on this line:
>
> $id = $project[$key]['project_id'];
>
> but I added a check $project[$key]['project_id'], and that got rid of
> the following error:
>
> *Notice*: Undefined offset: 6 in
> */data/web/www.cgb/devel/includes/code/welcome.php* on line *56

Good to see you're developing with error reporting set to E_ALL.... now
look at line 56. I've got a comment on that below.

> *Once I uncomment this line:
>
> //$sub = $db-> getAssoc($query, false, array($id));
>
> I get this error:
>
> *Warning*: Smarty error: unable to read resource: "welcome/Array.tpl" in
> */usr/local/lib/php/Smarty/Smarty.class.php* on line *1088
>
> *I don't think it's any sort of set-up or permissions problem with the
> templates because we've been using this page for over a year for other
> queries and it works until I uncomment that one line.

Are you using an {include} call in your template? and, if so, are you
dynamically pulling it? The reason I ask is that 'Array.tpl' looks like
you were trying to do someting like

{include file="welcome/$variable.tpl"}

Basically, the above error I've only ever seen when the template file is
missing or unreadable.

> Here is the code as it is now, which produces no errors and displays the
> other stuff on the page correctly, but doesn't give me any sub-projects
> (obviously!):
>
> $query ="SELECT * FROM projects WHERE parent_project_id is NULL OR
> parent_project_id = ''";
>
> $projects = $db->getAssoc($query, DB_FETCHMODE_ASSOC);

Check the syntax for the getAssoc() method. What DB abstraction layer
are you using -- PEAR::DB, PEAR::MDB, PEAR::MDB2, ADODB...? As I've
mentioned before, if you're using PEAR::DB, the syntax is:

getAssoc($query, $force_array, $params, $fetchmode)

Typically, when using getAssoc, there should be no reason to set the
fetchmode (it's returning an associative array already) -- and, besides,
you'd need two more parameters between the $query and the $fetchmode.
You probably only need:

$projects = $db->getAssoc($query);

> foreach ($projects as $key => $project) {
> if (!empty($project[$key]['project_id'])){
>
> $id = $project[$key]['project_id'];

The above should be:

if (!empty($project['project_id'])) {
$id = $project['project_id'];

> $query ="SELECT * FROM projects WHERE parent_project_id = ? ";
>
> //$sub = $db-> getAssoc($query, false, array($id));

Remove the space in the above statement: "$db->getAssoc()" instead of
"$db-> getAssoc()".

> //$projects[$key]['subs'] = $sub;
> }
> }
>
> $tpl->assign('projects', $projects);
>
> Any ideas what I can do now? I've searched on that error, but I haven't
> been able to find anything that pertains to me.

If you continue to have problems, you should probably create a dump of
the DB schema and then post a link to that and the PHP source you're
working with -- at this point, the suggestions myself and others have
made should give you something to work with, but there are many
assumptions we're having to make -- what DB abstraction layer you're
using, where files are located, etc.


> Matthew Weier O'Phinney wrote:
>
> > * Gary Smith <gts@tsu.biz> :
> >
> >
> > > I'm no expert but I think if you
> > >
> > > change this:
> > > $query ="SELECT * FROM projects WHERE parent_project_id =
> > > $projects[$key]['project_id']";
> > > to this
> > >
> > >
> >
> >
> >
> > > $id = $projects['parent_project_id'];
> > >
> > >
> >
> > The above should be:
> > $id = $projects[$key]['parent_project_id'];
> >
> >
> >
> > > $query ="SELECT * FROM projects WHERE parent_project_id = ? ";
> > >
> > > And this:
> > > $sub = $db-> getAssoc($query, DB_FETCHMODE_ASSOC);
> > > to this
> > > $sub = $db-> getAssoc($query, array($id));
> > >
> > >
> >
> > getAssoc(), in PEAR::DB at least expects
> > ($sql (string), force (boolean), parameters (array)) as its arguments:
> >
> > $sub = $db-> getAssoc($query, false, array($id));
> >
> >
> >
> > > Thanks to Matthew Weier O'Phinney
> > >
> > >
> >
> > Thanks.... I think... :-)
> >
> > I think the problem causing the notice the OP is receiving is more
> > likely to do with file location and/or permissions, and I've responded
> > to that under separate cover. However, the above is definitely an issue
> > as well.
> >
> >
> >
> > > in article 42FB988A.8030002@indiana.edu, Amanda Hemmerich at
> > > ahemmeri@indiana.edu wrote on 8/11/05 8:27 AM:
> > >
> > >
> > >
> > > > Hello!
> > > >
> > > > I'm using PHP and Smarty to try to build an array of arrays using the
> > > > results from nested queries. I am just learning about nested arrays,
> > > > and I'm not sure what I'm doing wrong.
> > > >
> > > > I am hoping someone can give me a hint as to what I am doing wrong.
> > > >
> > > > If I remove the PHP foreach loop, it works fine, except, of course, no
> > > > sub projects show up. :) The error must be in there, but I'm just not
> > > > seeing it.
> > > >
> > > > I get the following error with the code below:
> > > >
> > > > Warning: Smarty error: unable to read resource: "welcome/Object.tpl" in
> > > > /usr/local/lib/php/Smarty/Smarty.class.php on line 1088
> > > >
> > > > PHP STUFF
> > > > $query ="SELECT * FROM projects WHERE parent_project_id is NULL OR
> > > > parent_project_id = ''";
> > > >
> > > > $projects = $db-> getAssoc($query, DB_FETCHMODE_ASSOC);
> > > >
> > > > foreach ($projects as $key => $project) {
> > > > $query ="SELECT * FROM projects WHERE parent_project_id =
> > > > $projects[$key]['project_id']";
> > > > $sub = $db-> getAssoc($query, DB_FETCHMODE_ASSOC);
> > > > $projects[$key]['subs'] = $sub;
> > > > }
> > > > $tpl-> assign('projects', $projects);
> > > >
> > > > SMARTY STUFF
> > > > {foreach from=$projects item='entry'}
> > > > <b> {$entry.short_name}</b> <br />
> > > > <ul>
> > > > {foreach from=$entry.subs item='sub'}
> > > > <li> {$sub.short_name}</li>
> > > > {foreachelse}
> > > > <li> No subs for this project</li>
> > > > {/foreach}
> > > > </ul>
> > > > {foreachelse}
> > > > <b> No projects found</b>
> > > > {/foreach}
> > > >
> > > > Can anyone point me in the right direction?
> > > >
> > > >
> >
> >
> >


--
Matthew Weier O'Phinney
Zend Certified Engineer
http://weierophinney.net/matthew/

 

Navigation:

[Reply to this message]


Удаленная работа для программистов  •  Как заработать на Google AdSense  •  England, UK  •  статьи на английском  •  PHP MySQL CMS Apache Oscommerce  •  Online Business Knowledge Base  •  DVD MP3 AVI MP4 players codecs conversion help
Home  •  Search  •  Site Map  •  Set as Homepage  •  Add to Favourites

Copyright © 2005-2006 Powered by Custom PHP Programming

Сайт изготовлен в Студии Валентина Петручека
изготовление и поддержка веб-сайтов, разработка программного обеспечения, поисковая оптимизация