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

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

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

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

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

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

Вам спасибо за краткий ликбез по поводу того как общаться с людьми на форуме чтобы не потерять "уважение". :) Помнится в далеком 2005-м вы были более терпимы и давали конкретные рекомендации в каком направлении шерстить документации.
 
damner2
Не мог бы ты пояснить, где ты видешь недостатки в коде и почему? Спасибо.
 
Я и сейчас даю.
Тем, кто их просит.
А не цепляется за свой говнокод, как за последнюю радость в жизни.
 
Ладно, тему я открою.
Но с тремя условиями.
1.Прекращаешь тупить и быковать. Если тебе сказали, что так делать не надо - соглашаешься, и спрашиваешь, как правильно.
2. Свое мнение, как нам тут общаться, держишь строго при себе.
3. Изучаешь ответ damner2, и реализуешь описанный там функционал.

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

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

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

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

Сначала я также следовал идее перечня идентификаторов пользователей в константе.
Функция генерации констант:
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. Позже выложу сколько конкретно.
И еще оффтоп для Фаната: скажите адрес, пришлю вам ромашковый чай. В штатах лекарства дорогие. ;) А если серьезно, я вас ни разу не оскорбил за время переписки, не понимаю почему вы так вызверились.
 
с одной стороны, конечно, нарушение пункта 2.
но с другой - косяк в реализации пункта 3 настолько прекрасный, что придётся наступить на горло собственной песне.

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

ну и позволю себе отдельную шпильку, поскольку такой код, по удивительному совпадению, всегда коррелирует с предложениями послать ромашкового чаю
PHP:
$userType=(mysql_num_rows($result)=='1')?true:false;
 
Фанат
попробуй-ка применить эту функцию последовательно сначала к менеджеру, а потом - к простому крестьянину. Ну, или наоборот.
Результат должен тебя удивить.
функция isManager() должна выдавать true,только на менеджера. любой другой тип пользователей выдаст - false. что собственно и требуется. Есть своя функция на каждое множество пользователей (клиенты\сотрудники(менеджеры,логисты, администраторы и т.п.)).
но намек я понял. если я хочу обработать перечень пользователей в своем скрипте, то после первой проверки пользователя, который даст значение true или false, это значение закрепится и на проверку всех последующих пользователей повторится. буду думать как это обойти.

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