ANTICHAT.XYZ    VIDEO.ANTICHAT.XYZ    НОВЫЕ СООБЩЕНИЯ    ФОРУМ  
Баннер 1   Баннер 2
Antichat снова доступен.
Форум Antichat (Античат) возвращается и снова открыт для пользователей. Здесь обсуждаются безопасность, программирование, технологии и многое другое. Сообщество снова собирается вместе.
Новый адрес: forum.antichat.xyz
Вернуться   Форум АНТИЧАТ > Программирование > PHP, PERL, MySQL, JavaScript
   
Ответ
 
Опции темы Поиск в этой теме Опции просмотра

Не может найти константу в функции
  #1  
Старый 08.06.2008, 11:04
serg-php
Участник форума
Регистрация: 28.01.2008
Сообщений: 247
Провел на форуме:
205760

Репутация: 28
По умолчанию Не может найти константу в функции

Имеется функция:

Код:
function hwGetExtraOptions( )
{
	global $db;
	static $A_RES = NULL;
	if ( isset( $A_RES ) )
	{
		return $A_RES;
	}
	$sql = "";
	$a_v = array_keys( hwgetextraoptionids( ) );
	foreach ( $a_v as $k )
	{
		if ( defined( "ADMIN_AREA" ) || constant( "EN_AD_{$k}" ) )
		{
			$sql .= ",'{$k}'";
		}
	}
	$A_RES = array( );
	if ( !$sql )
	{
		return $A_RES;
	}
	$a_v = $db->select( "SELECT * FROM ".TBL_EXTRA_OPT." WHERE type IN(".substr( $sql, 1 ).") AND active=\"1\" ORDER BY type,price" );
	if ( hwismodeventallowed( "onExtraOptionsGet" ) )
	{
		$args = array(
			"A_EXTRA" => $a_v
		);
		hwmodevent( "onExtraOptionsGet", &$args );
		$a_v = $args['A_EXTRA'];
	}
	if ( $a_v )
	{
		$A_TRAN = hwlangphrase( );
		if ( $A_TRAN )
		{
			foreach ( $a_v as $k => $v )
			{
				if ( $A_TRAN["ex_opt-{$v['id']}"] )
				{
					$a_v[$k]['descr'] = $A_TRAN["ex_opt-{$v['id']}"];
				}
			}
		}
	}
	$a_v[] = false;
	$a_fee = $a_descr = array( );
	foreach ( $a_v as $v )
	{
		if ( isset( $p_v['type'] ) && $p_v['type'] != $v['type'] )
		{
			$id = "AD_{$p_v['type']}";
			$A_RES[$id] = array(
				"ID" => $id,
				"NAME" => "{ex_".$p_v['type']."}",
				"INPUT" => "menu",
				"EN_ORD" => 1,
				"DT" => EX_OPT_EXP * 86400,
				"FEE" => $a_fee,
				"DESCR" => $a_descr
			);
			$a_fee = $a_descr = array( );
		}
		$p_v = $v;
		$a_fee[$v['val']] = $v['price'];
		$a_descr[$v['val']] = $v['descr'];
	}
	return $A_RES;
}

Получаю сообщение об ошибке:

Цитата:
Warning: constant() [function.constant]: Couldn't find constant EN_AD_0 in Y:\home\localhost\www\mysite\inc\lib.inc.php on line 2134

Warning: constant() [function.constant]: Couldn't find constant EN_AD_1 in Y:\home\localhost\www\mysite\inc\lib.inc.php on line 2134

Warning: constant() [function.constant]: Couldn't find constant EN_AD_2 in Y:\home\localhost\www\mysite\inc\lib.inc.php on line 2134

Warning: constant() [function.constant]: Couldn't find constant EN_AD_3 in Y:\home\localhost\www\mysite\inc\lib.inc.php on line 2134

Проблема в строке:

Код:
if ( defined( "ADMIN_AREA" ) || constant( "EN_AD_{$k}" ) )

Какие будут соображения по устранению?
 
Ответить с цитированием

  #2  
Старый 08.06.2008, 11:20
etc
Постоянный
Регистрация: 16.02.2008
Сообщений: 724
Провел на форуме:
1025839

Репутация: 581


По умолчанию

А они вообще задефинены? Если нет то все правильно
 
Ответить с цитированием

  #3  
Старый 08.06.2008, 11:28
serg-php
Участник форума
Регистрация: 28.01.2008
Сообщений: 247
Провел на форуме:
205760

Репутация: 28
По умолчанию

Цитата:
задефинены

Ругается на это место:
Цитата:
constant( "EN_AD_{$k}" )
Мне непонятны слова:
Цитата:
Couldn't find constant EN_AD_0
?
 
Ответить с цитированием

  #4  
Старый 08.06.2008, 11:51
NOmeR1
Познавший АНТИЧАТ
Регистрация: 02.06.2006
Сообщений: 1,188
Провел на форуме:
6023777

Репутация: 2642


Отправить сообщение для NOmeR1 с помощью ICQ
По умолчанию

попробуй что-ли так
Код:
if ( defined( "ADMIN_AREA" ) || @constant( "EN_AD_{$k}" ) )
 
Ответить с цитированием

  #5  
Старый 08.06.2008, 11:56
etc
Постоянный
Регистрация: 16.02.2008
Сообщений: 724
Провел на форуме:
1025839

Репутация: 581


По умолчанию

Если они задефинены, то странновато это
Да и зачем используется такая конструкция?
Цитата:
constant() will return the value of the constant indicated by name.
 
Ответить с цитированием

  #6  
Старый 08.06.2008, 12:00
NOmeR1
Познавший АНТИЧАТ
Регистрация: 02.06.2006
Сообщений: 1,188
Провел на форуме:
6023777

Репутация: 2642


Отправить сообщение для NOmeR1 с помощью ICQ
По умолчанию

Ну так поэтому в операторе If оно и используется. Я дал вариант, чтоб не выдавалась ошибка, если константа не задефинена.

etc, а как по-другому в названии константы ты будешь использовать $k?

Последний раз редактировалось NOmeR1; 08.06.2008 в 12:08..
 
Ответить с цитированием

  #7  
Старый 08.06.2008, 12:32
etc
Постоянный
Регистрация: 16.02.2008
Сообщений: 724
Провел на форуме:
1025839

Репутация: 581


По умолчанию

Что если применить тот же defined ?
Цитата:
if ( defined( "ADMIN_AREA" ) || defined( "EN_AD_" . $k) )
 
Ответить с цитированием

  #8  
Старый 08.06.2008, 12:51
NOmeR1
Познавший АНТИЧАТ
Регистрация: 02.06.2006
Сообщений: 1,188
Провел на форуме:
6023777

Репутация: 2642


Отправить сообщение для NOmeR1 с помощью ICQ
По умолчанию

Смотри. К примеру дано такое:
Код:
	define("CONST_ONE", 0);
	define("CONST_TWO", 1);
Следи что вернут эти выражения:
Код:
	var_dump(defined("CONST_ONE"));
	var_dump(defined("CONST_TWO"));
Тут везде bool(true), поэтому выражения выполнятся если задефинено.
Далее пробуем
Код:
	var_dump((bool)constant("CONST_ONE"));
	var_dump((bool)constant("CONST_TWO"));
Здесь уже в первом случае bool(false), потому что при значение равном нулю (либо пустому значения) константы, выражение не выполнится.
Ну а последняя строчка вернёт bool(true) и выражение выполнится, так как значение константы положительно.

Последний раз редактировалось NOmeR1; 08.06.2008 в 12:54..
 
Ответить с цитированием

  #9  
Старый 08.06.2008, 13:12
etc
Постоянный
Регистрация: 16.02.2008
Сообщений: 724
Провел на форуме:
1025839

Репутация: 581


По умолчанию

в случае нуля с моим примером можно вообще не дефинить
 
Ответить с цитированием

  #10  
Старый 08.06.2008, 14:40
Isis
Флудер
Регистрация: 20.11.2006
Сообщений: 3,316
Провел на форуме:
16641028

Репутация: 2371


По умолчанию

NOmeR1, ошибки надо не скрывать, а исправлять
 
Ответить с цитированием
Ответ



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Мудрые уроки YoYo Factory Болталка 14 04.06.2008 09:21
кто может помочь с доставкой с e-bay alextoun Болталка 3 08.04.2008 12:14
Внедрение Sql кода с завязанными глазами, часть 2 k00p3r Чужие Статьи 0 12.06.2005 20:45
SQL Injection в Oracle k00p3r Чужие Статьи 0 12.06.2005 12:41
Методы взлома! SheFF Чаты 2 15.11.2004 13:30



Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
 


Быстрый переход




ANTICHAT.XYZ