Обращение по неправильному адресу

Discussion in 'PHP' started by serg-php, 10 Jun 2008.

  1. serg-php

    serg-php Elder - Старейшина

    Joined:
    28 Jan 2008
    Messages:
    313
    Likes Received:
    9
    Reputations:
    0
    Имею функцию:

    Code:
    function ShowDropDownCategoryList( $cat, $name = "cat", $f_opt = "", $hide_id = 0, $onCh = "", $fset = "_ALL_" )
    {
    	global $hwJsCats;
    	global $db;
    	$page = ( boolean )$_GET['page'];
    	$is_ams_page = ( $page == "add" || $page == "modify" || $page == "search" ) && PHP_SELF_BASE == "index.php";
    	if ( EN_CAT_MULTI && ( $is_ams_page || $EN_CAT_MULTI ) )
    	{
    		return showdropdownmulticategorylist( $cat, $fset, $hide_id );
    	}
    	$SEL = array( );
    	if ( is_array( $cat ) )
    	{
    		foreach ( $cat as $v )
    		{
    			$SEL[$v] = 1;
    		}
    	}
    	else
    	{
    		$SEL[$cat] = 1;
    	}
    	include_once( SITE_PATH."inc/class.categ_tree.php" );
    	$o_cat =& new HawkCategory( TBL_CAT );
    	$o_cat->CAT_ORDER = "c.weight DESC,name";
    	$o_cat->CAT_F = "fset";
    	if ( EN_FSETS && $fset != "_ALL_" )
    	{
    		$o_cat['SQL_CAT'] .= " AND fset='{$fset}'";
    	}
    	if ( $hide_id )
    	{
    		if ( !is_array( $hide_id ) )
    		{
    			$hide_id = array(
    				$hide_id
    			);
    		}
    		$hide_id = array_map( "intval", $hide_id );
    		$hide_id = $db->one_col_array( "SELECT id FROM ".TBL_CAT." WHERE id IN(".implode( ",", $hide_id ).")" );
    		if ( $hide_id )
    		{
    			$o_cat['SQL_CAT'] .= " AND c.id NOT IN(".get_daughter_cats( $hide_id ).")";
    		}
    	}
    	if ( defined( "TBL_CAT_EXTRA" ) && !defined( "ADMIN_AREA" ) && $is_ams_page && ( $page == "add" || $page == "modify" ) )
    	{
    		$no_ids = $db->one_col_array( "SELECT cid FROM ".TBL_CAT_EXTRA." WHERE type=\"H\"" );
    		if ( $no_ids )
    		{
    			$o_cat['SQL_CAT'] .= " AND c.id NOT IN(".implode( ",", $no_ids ).")";
    		}
    		unset( $no_ids );
    	}
    	$a_v = $o_cat->Get_CatFullPaths_Array( );
    	$cats = "";
    	$cnt = count( $a_v );
    	$i = 0;
    	for ( ;	$i < $cnt;	++$i	)
    	{
    		$v = $a_v[$i];
    		$cats .= "<OPTION ".( $v['pid'] ? "" : "class=root " )."VALUE=".$v['id'];
    		if ( isset( $SEL[$v['id']] ) )
    		{
    			$cats .= " SELECTED";
    		}
    		$cats .= ">".$v['cat_path']."\n";
    	}
    	$hwJsCats = "";
    	if ( EN_FSETS && $fset == "_ALL_" )
    	{
    		$A_FSET = array( );
    		reset( $o_cat->CAT_FDATA );
    		while ( list( $_id, $_fs ) = each( $o_cat->CAT_FDATA ) )
    		{
    			$A_FSET[$_fs['fset']][] = $_id;
    		}
    		foreach ( $A_FSET as $_fs => $v )
    		{
    			$hwJsCats .= "\"|".implode( "|", $v )."|\",";
    		}
    		if ( $hwJsCats )
    		{
    			$hwJsCats = substr( $hwJsCats, 0, -1 );
    		}
    	}
    	return "<select name=".$name." ".$onCh.">".$f_opt.$cats."\n</select>";
    }
    Запускаю, получаю ответ Fatal error: Cannot use object of type HawkCategory as array in Y:\home\localhost\www\mysite.com\inc\lib.inc.php on line 400


    Эта строка :
    Code:
    $o_cat['SQL_CAT'] .= " AND fset='{$fset}'";
    Что с ней не так - не пойму!
     
  2. NOmeR1

    NOmeR1 Everybody lies

    Joined:
    2 Jun 2006
    Messages:
    1,068
    Likes Received:
    783
    Reputations:
    213
    Ты используешь объект как массив. Как исправить - трудно сказать, одной функции не достаточно.