Помогите исправить собственное быдлокодерство

gray

Новичок
AmdY, вот спасибо тебе, мил человек. Низкий тебе поклон. Именно этого я и ждал. Я ж говорил что все просто должно решаться.
Еще раз тебе огромное человеческое спасибо. :)
 

Фанат

oncle terrible
Команда форума
Мне не нужна помощь в переделки этой функции.
Нужна, чувак. Нужна.
И то, что ты этого не понимаешь, НО продолжаешь стоять на своём - самое печальное.
Так делают ламеры.
Ламеров здесь не любят.
Допустим, ты выпросишь сейчас свой говнокод. Но потеряешь уважение, и никакой действительно серьёзной помощи впредь уже не получишь.
isClient вызывается на некоторых страницах сотни раз.
а вот врать совсем нехорошо.
Откуда у тебя сотни возьмутся? И сколько из этих сотен с повторяющимися клиентами?
Если клиенты повторяются - у тебя что-то не так с логикой.
Если не повторяются - значит, все эти сотни таскать мертвым грузом даже на тех страницах, на которых ни одного клиента.

Снова вопрос. ДОПУСТИМ, даже твои говноконстанты. почему тогда не массив с ключами, а этот говнокод с сотнями експлодов и сотни In_array по массивам с сотнями елементов?
Не поменял ли ты шило на мыло, дружочек? Ты точно уверен, что твои сотни оборотов говнокода будут быстрее обращения к базе?
А если клиентов будут тысячи? все так же будешь сосать всю базу в код? Чтобы быстрее работало? А у тебя сейчас работает медленно?

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

Фанат

oncle terrible
Команда форума
впрочем, даже тысяч не понадобится - всё сломается на первых сотнях, хе хе :)
 

gray

Новичок
Фанат Видимо вы тут большой авторитет и считаете что правильно общаетесь с людьми. Слов нет. Говорить по этому поводу ничего не хочу.

По вашей логике, сейчас все должны наброситься на AmdY и заклеймить его как "страшного нарушителя устоев форума".

Ладно, Фанат, спасибо вам за деструктивную критику, есть над чем подумать, что освоить и что переделать.
В данном случае Эмди мне действительно помог, указав на вполне очевидную вещь и за это я ему очень благодарен. Выспался бы, сам бы увидел очевидное решение.

Вам спасибо за краткий ликбез по поводу того как общаться с людьми на форуме чтобы не потерять "уважение". :) Помнится в далеком 2005-м вы были более терпимы и давали конкретные рекомендации в каком направлении шерстить документации.
 

gray

Новичок
damner2
Не мог бы ты пояснить, где ты видешь недостатки в коде и почему? Спасибо.
 

Фанат

oncle terrible
Команда форума
Я и сейчас даю.
Тем, кто их просит.
А не цепляется за свой говнокод, как за последнюю радость в жизни.
 

Фанат

oncle terrible
Команда форума
Ладно, тему я открою.
Но с тремя условиями.
1.Прекращаешь тупить и быковать. Если тебе сказали, что так делать не надо - соглашаешься, и спрашиваешь, как правильно.
2. Свое мнение, как нам тут общаться, держишь строго при себе.
3. Изучаешь ответ damner2, и реализуешь описанный там функционал.

ПОСЛЕ этого можешь показать свой код и попросить указать на его недостатки.
 

AmdY

Пью пиво
Команда форума
спасибо тебе мил человек. очередному идиоту дал соску пососать.
Не понял претензий. Человек пришёл с готовым, пускай и индокодом, но всё же РАБОТАЮЩИМ, потому что понимал что что-то делает не так. Я выдал ему кусок всевдокода, который показал в каком направлении двигаться, но никак НЕ ГОТОВЫЙ код.

Так что не надо ровнять его с твоми клиентами, которые не знают основ, не могут написать двух строчек кода, а ты их кормишь советами из теории струн.
 

Фанат

oncle terrible
Команда форума
Я выдал показал в каком направлении двигаться
Проблема в том, что это направление - тупиковое.
Дело не в ГОТОВОСТИ кода.
Дело в том, что получать айдишники всех юзеров в строку, а потом проверять по ней права - идиотизм.
Именно это ему пытались объяснить все присутствующие, перед тем, как выехал ты, весь в белом.
 

Фанат

oncle terrible
Команда форума
Впрочем, решение damner2 в этом смысле тоже не торт, если он имеет в виду всех пользователей, а не кэширование информации о тех, которых уже в этом сеансе запрашивали.
Там сложно понять из контекста.
 

damner2

Новичок
Впрочем, решение damner2 в этом смысле тоже не торт, если он имеет в виду всех пользователей, а не кэширование информации о тех, которых уже в этом сеансе запрашивали.
Там сложно понять из контекста.
Ну так всё зависит от предполагаемого кол-ва пользователей и от характера запросов информации о нахождении пользователей в группах в рамках одного запуска скрипта :)
 

Фанат

oncle terrible
Команда форума
Ну так всё зависит от предполагаемого кол-ва пользователей и от характера запросов информации о нахождении пользователей в группах в рамках одного запуска скрипта :)
Ну, если исходить из опыта, то по модераторам и одминам вопросов нет - там можно даже и строкой с експлодом.
но вот по простым юзерам такой подход не годится от слова совсем.

У чувака в постановке задачи подмена понятий: он, ради (пусть даже сотен) показываемых на одной странице, собирается жрать в память ВООБЩЕ ВСЕХ.
И это говнокэширование представляется совсем уж дичью на любой мало-мальски живой, а не воображаемой системе.

Плюс у меня вопрос к этой цифре, как таковой. откуда возьмутся сотни проверок?
Я могу понять сотню - скажем, выводим сто тем в форуме. Но мы ВСЁ РАВНО лезем в базу юзеров при этом. То есть, имеем группу сразу, безо всяких говнофункций.
Я знаю, у нас много любителей высосать из пальца воображаемую ситуацию, которая оправдает любой бредовый вопрос. Вот мне даже интересно - родит ли кто-нибудь такую для этого случая? Когда у нас есть сто юзеров, но, ВНЕЗАПНО, у них нету их прав, лежащих в той же таблице?
 

damner2

Новичок
Фанат
Судя по названиям его групп (из первого поста), пользователей с группами не должно быть много.
У чувака в постановке задачи подмена понятий: он, ради (пусть даже сотен) показываемых на одной странице, собирается жрать в память ВООБЩЕ ВСЕХ.
И это говнокэширование представляется совсем уж дичью на любой мало-мальски живой, а не воображаемой системе.
Не факт, что у него будет мало-мальски живая система :) Наилучший способ понять ему, что написанный код будет тормозить (сильно жраться память) - это дождаться, когда он начнёт тормозить... Тогда пусть и переписывает этот кусок ещё, а в данный момент ему просто сложно представить себе, что конкретно и на сколько будет тормозить.
Урок извлекается гораздо лучше, когда сам сталкиваешься с проблемами, а не пытаешься их предугадать.
 

gray

Новичок
По существу вопроса.
После того как ветка была превращена в балаган и закрыта, добрые люди отозвались на мои просьбы о помощи и написали в личку о недостатках моего кода, что помогло мне трансформировал код

Сначала я также следовал идее перечня идентификаторов пользователей в константе.
Функция генерации констант:
PHP:
function defineCostants(){
		$query="SELECT GROUP_CONCAT(CAST(`t1`.`id` AS CHAR)) as isCoworcker FROM `users` `t1` WHERE `t1`.`group_id` >'0' AND `t1`.`client_id` <'1' GROUP BY `t1`.`client_id`;";
		$result=mysql_query($query) or die ("Ошибка выполнения запроса к БД: ".mysql_error());
		while ($row = mysql_fetch_assoc($result)) define("_ID_COWORKERS_", $row['isCoworcker']);
	
		$query="SELECT GROUP_CONCAT(CAST(`t1`.`id` AS CHAR)) as isClient FROM `users` `t1` WHERE `t1`.`client_id`>'0' AND `t1`.`group_id`<'1' GROUP BY `t1`.`group_id`;";
		$result=mysql_query($query) or die ("Ошибка выполнения запроса к БД: ".mysql_error());
		while ($row = mysql_fetch_assoc($result)) define("_ID_CLIENTS_", $row['isClient']);
	
		$query="SELECT `t2`.`sysName`, GROUP_CONCAT(CAST(`t1`.`id` AS CHAR)) as groupName FROM `users` `t1`, `groups` `t2` WHERE `t1`.`group_id`=`t2`.`id` AND`t1`.`group_id`>'0' GROUP BY `t1`.`group_id`";
		$result=mysql_query($query) or die ("Ошибка выполнения запроса к БД: ".mysql_error());
		while($row = mysql_fetch_assoc($result)) define('_ID_'.strtoupper($row['sysName']).'S_', $row['groupName']);
	}
Одна из проверочных функций в этом случае выглядела так:
PHP:
function isManager($id){
		return in_array($id, explode(',',_ID_MANAGERS_));
}
Далее, развивая мысль о потенциально большом кол-ве пользователей ( сейчас их около 40, будет до 1000 думается) и небезопасности хранения идентификаторов пользователей в константах была сделана такая функция:
PHP:
function isManager($id){
		static $userType;
		if ($userType === null) {
			$query="SELECT 1 FROM `users` `t1`, `groups` `t2` WHERE `t1`.`id`='".mysql_real_escape_string($id)."' AND `t2`.`sysName`='manager' AND `t1`.`group_id`=`t2`.`id`;";
			$result=mysql_query($query) or die ("Ошибка выполнения запроса к БД: ".mysql_error());
			$userType=(mysql_num_rows($result)=='1')?true:false;
		}
		return $userType;
}
В этом случае и функция генерации констант не нужна и сами константы. Вот как-то так. Может быть кому-нибудь пригодится.

Оффтоп для Фаната: В админском разделе системы функция isAdmin() вызывается 31 раз. Клиентскую не мерил, но в рабочей части пользователя должно быть не меньше 70-100. Позже выложу сколько конкретно.
И еще оффтоп для Фаната: скажите адрес, пришлю вам ромашковый чай. В штатах лекарства дорогие. ;) А если серьезно, я вас ни разу не оскорбил за время переписки, не понимаю почему вы так вызверились.
 

Фанат

oncle terrible
Команда форума
с одной стороны, конечно, нарушение пункта 2.
но с другой - косяк в реализации пункта 3 настолько прекрасный, что придётся наступить на горло собственной песне.

попробуй-ка применить эту функцию последовательно сначала к менеджеру, а потом - к простому крестьянину. Ну, или наоборот.
Результат должен тебя удивить.

ну и позволю себе отдельную шпильку, поскольку такой код, по удивительному совпадению, всегда коррелирует с предложениями послать ромашкового чаю
PHP:
$userType=(mysql_num_rows($result)=='1')?true:false;
 

gray

Новичок
Фанат
попробуй-ка применить эту функцию последовательно сначала к менеджеру, а потом - к простому крестьянину. Ну, или наоборот.
Результат должен тебя удивить.
функция isManager() должна выдавать true,только на менеджера. любой другой тип пользователей выдаст - false. что собственно и требуется. Есть своя функция на каждое множество пользователей (клиенты\сотрудники(менеджеры,логисты, администраторы и т.п.)).
но намек я понял. если я хочу обработать перечень пользователей в своем скрипте, то после первой проверки пользователя, который даст значение true или false, это значение закрепится и на проверку всех последующих пользователей повторится. буду думать как это обойти.

ну и позволю себе отдельную шпильку, поскольку такой код, по удивительному совпадению, всегда коррелирует с предложениями послать ромашкового чаю
PHP:
$userType=(mysql_num_rows($result)=='1')?true:false;
Я так понимаю здесь намекаете на то, что конструкция кривая? Что в ней смущает? Я к сожалению не телепат, чтобы понять вашу мысль. Проясните, пожалуйста.
 
Сверху