Jump to content

Foreach and list/menu


maziagha

Recommended Posts

Hello all!

I'm using php mysql databse to creat a list/menu drop down.
In my category database i also have child categories.
with my script i can pull the categories and child categories.
the problem i have is that the child categories are placed in the list as they wish and not directly under the main category.
Can anyone help me? here is the part of that script.
[code]/*
Generate combo box options containing the categories we have.
if $catId is set then that category is selected
*/
function buildCategoryOptions($catId = 0)
{
$sql = "SELECT cat_id, cat_parent_id, cat_name
FROM tbl_category
ORDER BY cat_id";
$result = dbQuery($sql) or die('Cannot get Product. ' . mysql_error());

$categories = array();

while($row = dbFetchArray($result)) {
list($id, $parentId, $name) = $row;


if ($parentId = 0) {
// we create a new array for each top level categories
$categories[$id] = array('name' => $name, 'children' => array());
} else {
// the child categories are put int the parent category's array
$categories[$parentId]['children'][] = array('id' => $id, 'name' => $name);

}
}

// build combo box options

$list = '';
foreach ($categories as $key => $value) {

//$name    = $value['name'];
$children = $value['children'];

$list .="<option value=\"$parentId\"> $name";

foreach ($children as $child) {
$list .= "<option value=\"{$child['id']}\"";
if ($child['id'] == $catId) {
$list.= " selected";
}

$list .= ">{$child['name']}</option>\r\n";
}

$list .= "</optgroup>";
}

return $list;
}
[/code]
Link to comment
Share on other sites

i tryed that but it messes the thing up. Note that have removed this part
[code]//$name    = $value['name'];[/code]

if i out that back it really mess thing up. I can get it work then but i use the same  list menu and if i want to add products to my database they all get recorded in wrong category.
Link to comment
Share on other sites

OK it work almost fine now except the main category gets wrong ID when choosen. no mather what main category i choose it is the same cat-id all the time. Work fine with child categories.
someone can tell why?
looks like this now:

[code]/*
Generate combo box options containing the categories we have.
if $catId is set then that category is selected
*/
function buildCategoryOptions($catId = 0)
{
$sql = "SELECT cat_id, cat_parent_id, cat_name
FROM tbl_category
ORDER BY cat_id";
$result = dbQuery($sql) or die('Cannot get Product. ' . mysql_error());

$categories = array();
while($row = dbFetchArray($result)) {
list($id, $parentId, $name) = $row;

if ($parentId == 0) {
// we create a new array for each top level categories
$categories[$id] = array('name' => $name, 'children' => array());
} else {
// the child categories are put int the parent category's array
$categories[$parentId]['children'][] = array('id' => $id, 'name' => $name);
}
}

// build combo box options
$list = '';
foreach ($categories as $key => $value) {
$name     = $value['name'];
$children = $value['children'];

$list .= "<option value=\"$parentId\"> $name";

foreach ($children as $child) {
$list .= "<option value=\"{$child['id']}\"";
if ($child['id'] == $catId) {
$list.= " selected";
}

$list .= ">{$child['name']}</option>\r\n";
}

$list .= "</optgroup>";
}

return $list;
}[/code]
Link to comment
Share on other sites

This thread is more than a year old. Please don't revive it unless you have something important to add.

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.