Тема: Помогите в коде (WAP/WEB мастеру/PHP/MySQL) Кредитор (27 Mar 2015 в 12:06) начни с четкого плана для себя. 1. Нужно посчитать количество дневников у юзера и сделать где то запись, если такой записи еще нет. 2. Нужно при создании дневника снова пересчитывать все и сравнивать с записью. если разница равна 5, начислить баллы и обновить запись из пункта 1. код писать за тебя не буду. пробуй сам, выкладывай варианты твоих попыток и тогда я подскажу что ты не так делаешь. или бросай программирование и уходи с форума. халявщики - нелюди )) Sammy (27 Mar 2015 в 12:12) Тьфу. Создай в таблице user строку notes_c ( int(1) default \'0\'). В файле создания дневника, где идёт сохранение записи пробуй вписать это: <? if($user[\'notes_c\']==0){ if(mysql_num_rows(musql_query(\"select `id` from `notes` where `id_user`=\'\".$user[\'id\'].\"\'\"))==5){ mysql_query(\"update `user` set `notes_c`=\'1\', `balls`=\'\".($user[\'balls\']+300).\"\' where `id`=\'\".$user[\'id\'].\"\' limit 1\"); } } ?> Не уверен, что верно... Но пока что так. Sammy (27 Mar 2015 в 12:21) Аааа... Надо именно за создание каждый пяти дневников? Sammy (27 Mar 2015 в 12:27) 1. Создаём в таблице user строку notes_c (int(11) default \'0\'); 2. Ну и код примерный: <? $c = mysql_num_rows(musql_query(\"select `id` from `notes` where `id_user`=\'\".$user[\'id\'].\"\'\")); $count = $c - $user[\'notes_c\']; if($count == 5){ mysql_query(\"update `user` set `notes_c`=\'\".$c.\"\', `balls`=\'\".($user[\'balls\']+300).\"\' where `id`=\'\".$user[\'id\'].\"\' limit 1\"); } ?> Я бы сделал по другому, но придержусь. Скиталец (27 Mar 2015 в 12:57) --Цитата-- Sammy (27 Mar 2015 в 12:27): 1. Создаём в таблице user строку notes_c (int(11) default \'0\'); 2. Ну и код примерный: <? $c = mysql_num_rows(musql_query(\"select `id` from `notes` where `id_user`=\'\".$user[\'id\'].\"\'\")); $count = $c - $user[\'notes_c\']; if($count == 5){ mysql_query(\"update `user` set `notes_c`=\'\".$c.\"\', `balls`=\'\".($user[\'balls\']+300).\"\' where `id`=\'\".$user[\'id\'].\"\' limit 1\"); } ?> Я бы сделал по другому, но придержусь. ---------- Sammy, Что за бред? Ты очередной вредитель! Вот скажи ты наверно все счетчики в анкете в отдельные столбцы 3апихал? :D Кредитор (27 Mar 2015 в 13:14) Скиталец, ++ . еще и в таблицу юзер все пихают. все что под руку попадается Sammy (27 Mar 2015 в 13:14) Скиталец, Нет, конечно. А я халявно должен выдать ему идеальный код? Прочти внимательно: \"примерный код\". Уж, что улучшить или переписать, пусть сам думает. И ещё прочти : \"Я бы сделал по другому, но придержусь.\". Hack (27 Mar 2015 в 13:18) Чтобы не каждый дневник давало баллы, а каждые 5 дневников. Hack (27 Mar 2015 в 14:03) Котэ работает)) Hack (27 Mar 2015 в 14:03) Как сделать код проще? Чтобы не нужна была отдельная таблица. Сибирский (27 Mar 2015 в 14:12) --Цитата-- Hack (27 Mar 2015 в 14:03): Как сделать код проще? Чтобы не нужна была отдельная таблица. ---------- Hack, записывать в файл, но тогда на каждого юзверя будет по файлу, что так же неудобно Hack (27 Mar 2015 в 14:24) Сибирский, в смысле, это как? Сибирский (27 Mar 2015 в 14:31) Hack, при каждом создании проверяется количество созданных дневников данного пользователя, если количество дневников превышает критическое число 5, то в файл пользователя пишем дату просчета и начисляем ему баллы, и так далее, при повторном просчете опираемся уже от записанной даты создания Saint (27 Mar 2015 в 14:50) Можно конечно и в файл записывать ,но как по мне это идиотизм ради одного условия(если там файл настроек личный ,то да) Чуваки ,уже год как опубликовано как get_user() и его данные стерилизовать в фиере 2.5.0(если не ошибаюсь) ,антологично будет работать на других сборках ,и куча примеров на форуме была ,конечно в социале хранить в user хлам не рекомендую . если хотя б на сайте выборка умелая то есть смысл .так или иначе я думаю автора не спасёт одна ячейка ,так как там и без этого проблем хватает ,которые как я вижу не кому не нужны) так что автор вот тебе пример ) //Execute the query to the database -> alter table `user` add `notes_c` int(11) default \'0\'; if($user[\'notes_c\'] == 5) { $b = ($user[\'balls\'] + 5000); $c = 0; } else { $b = ($user[\'balls\'] + 100); $c = ($user[\'notes_c\'] + 1); } mysql_query(\"update `user` set `notes_c` = \'{$c}\' , `balls` = \'{$b}\' where `id` = \". $user[\'id\']); /* Если число дневников достигло 5 будет начислено 5000 баллов , и счёт чик обнулён . если условие не выполнено То за каждый созданный дневник будет начисляться 100 баллов и счёт чик будет прибавляться +1 */ Сибирский (27 Mar 2015 в 15:03) Saint, во во, так вы и пишите, и в массиве юзверя таскается по всему сайту все что надо и не надо Hack (27 Mar 2015 в 15:10) Saint, столько всего объяснил, что не совсем понимаю. Saint (27 Mar 2015 в 15:15) Сибирский, В моём случаи я с каждой страницу удаляю переменную ,а так же храню данные в файлах ,при этом почти всегда обновляю данные по изменению ,а не по времени ,в новых моих проектах (и некоторых существующих) . Но тут речь идёт о эффективности ,вот я примерно пол года рассказывал что все движки на dcms кроме моего можно взломать ,но я за это время не видел не одной темы по этому вопросу(на этом сайте) . у людей на первом месте новые модули или копирование других сайтов . соответственно какой смысл ставить в запорожец колесо от бентли? так что наверно ,не чё не изменит одна или десяток ячеек ) Saint (27 Mar 2015 в 15:20) --Цитата-- Hack (27 Mar 2015 в 15:10): Saint, столько всего объяснил, что не совсем понимаю. ---------- Hack, Я не только объяснил. я привёл рабочий и готовый код ,который надо прописать при создание нового дневника ,перед редиктом к примеру после его полного создания не чувак ты тут относительно давно ,такие вещи надо знать . поддержу слова ниже (вначале темы) ,пробуй ,экспериментируй . будет тяжело поможем . за всех тут не кто нечего делать не горит желанием ,тем более когда уже всё разложено по полочкам Сибирский (27 Mar 2015 в 15:25) Saint, ну по сути да, несколько байт в памяти никому не навредили, особенно с онлайном в 20 человек ))) Hack (27 Mar 2015 в 15:27) Saint, к твоему коду нужна какая-то доп. таблица? Или файл? :) Saint (27 Mar 2015 в 15:30) Hack, Видишь ты ленишься читать или вникать ,там же написано что это готовый код . с самого начала кода закомментирован запрос \"alter table `user` add `notes_c` int(11) default \'0\';\" Hack (27 Mar 2015 в 15:33) Saint, я давно сделал этот запрос и сделал так как мне написали ранее. Читай внимательно) Эта таблица ничего не нагружает? Ее можно свободно ставить, ну в смысле включать ее? Hack (27 Mar 2015 в 15:39) /* Если число дневников достигло 5 будет начислено 5000 баллов , и счёт чик обнулён . если условие не выполнено То за каждый созданный дневник будет начисляться 100 баллов и счёт чик будет прибавляться +1 */ Стоп, как оно может быть не выполнено, если человек все равно создаст 5 дневников? .дум. Сибирский (27 Mar 2015 в 15:41) Hack, может быть обрыв связи, перегрузка сервера и все что угодно, потому нечему тут удивляться Saint (27 Mar 2015 в 17:05) --Цитата-- Hack (27 Mar 2015 в 15:33): Saint, я давно сделал этот запрос и сделал так как мне написали ранее. Читай внимательно) Эта таблица ничего не нагружает? Ее можно свободно ставить, ну в смысле включать ее? ---------- Hack, уверяю тебя что у тебя на сайте примерно сотню мест которые грузят намного больше визуально ты нечего не нагрузишь . у тебя что в час 100000 дневников создают? нет конечно ,не упадёт у тебя сервер из-за этой ячейки ,хлама там хватает и без этого ,на фоне того что есть ты не заметишь . если есть варианты лучше вы их предложите ,но к примеру вызов счётчика с другой таблицы создает намного больше нагрузки ,чем мой вариант ,и повторюсь: нету смысла думать о нагрузки . Saint (27 Mar 2015 в 17:10) --Цитата-- Hack (27 Mar 2015 в 15:39): /* Если число дневников достигло 5 будет начислено 5000 баллов , и счёт чик обнулён . если условие не выполнено То за каждый созданный дневник будет начисляться 100 баллов и счёт чик будет прибавляться +1 */ Стоп, как оно может быть не выполнено, если человек все равно создаст 5 дневников? .дум. ---------- Hack, ты читаешь что я пишу?) как может быть не выполнено ,чем мой ответ тебе не ответ?) Может и не грамотно ,но уж и не тупо разъяснил ... Повторю чуток по другому : Идёт проверка на создание 5 дневников ,если они не созданы ,то счётчик будет прибавляться до того момента пока не будут созданы . после создания 5-го дневника счётчик будет обнулён и всё пойдёт по кругу . Бродяга (27 Mar 2015 в 17:11) Saint, Прочти почту) ==== Сорри за Оффтоп Но нужно срочно) Hack (27 Mar 2015 в 17:25) Saint, значит этот код нельзя использовать? Какой все-таки лучше? Твой или этот: <? $c = mysql_num_rows(musql_query(\"select `id` from `notes` where `id_user`=\'\".$user[\'id\'].\"\'\")); $count = $c - $user[\'notes_c\']; if($count == 5){ mysql_query(\"update `user` set `notes_c`=\'\".$c.\"\', `balls`=\'\".($user[\'balls\']+300).\"\' where `id`=\'\".$user[\'id\'].\"\' limit 1\"); } ?> Saint (27 Mar 2015 в 17:34) --Цитата-- Hack (27 Mar 2015 в 17:25): Saint, значит этот код нельзя использовать? Какой все-таки лучше? Твой или этот: <? $c = mysql_num_rows(musql_query(\"select `id` from `notes` where `id_user`=\'\".$user[\'id\'].\"\'\")); $count = $c - $user[\'notes_c\']; if($count == 5){ mysql_query(\"update `user` set `notes_c`=\'\".$c.\"\', `balls`=\'\".($user[\'balls\']+300).\"\' where `id`=\'\".$user[\'id\'].\"\' limit 1\"); } ?> ---------- Hack,Можно . Данный код выполнит действие только 1 раз и всё . и опять же тебе придётся создавать ячейку в какой то таблице если надо крутить по кругу ,потом выполнять либо count либо брать из массива ,что создаст нагрузку) нет конечно не лучше ,чем меньше запросов и больше кэша тем лучше) Hack (27 Mar 2015 в 17:37) Saint, вот почему не дается заново... уже по всякому пробовал.. Только твой код что-то не работает.. RuSInet (27 Mar 2015 в 17:40) ВЫведи через счетчик, потом +5 от старово счетчика что бы довали, и все Saint (27 Mar 2015 в 17:41) Hack, Проверь что содержит ячейка \"notes_c\" , может там уже число имеется больше 5? формат ячейки числовой? Int() и т.п? Hack (27 Mar 2015 в 17:41) Saint, еще кое что... вот нафига это? \"если условие не выполнено То за каждый созданный дневник будет начисляться 100 баллов и счёт чик будет прибавляться +1\". Мне нужно чтобы просто так не давалось, а только при создании 5 дневников, не более и не менее. Hack (27 Mar 2015 в 17:44) --Цитата-- Saint (27 Mar 2015 в 17:41): Hack, Проверь что содержит ячейка \"notes_c\" , может там уже число имеется больше 5? формат ячейки числовой? Int() и т.п? ---------- Saint, я должен каждый раз сам чистить что ли? Saint (27 Mar 2015 в 17:44) --Цитата-- Hack (27 Mar 2015 в 17:41): Saint, еще кое что... вот нафига это? \"если условие не выполнено То за каждый созданный дневник будет начисляться 100 баллов и счёт чик будет прибавляться +1\". Мне нужно чтобы просто так не давалось, а только при создании 5 дневников, не более и не менее. ---------- Hack, блин ну что за глупые вопросы? ну не нужно не прибавляй ,я же к примеру это сделал) я б вообще данный код по другому реализовал . тут же при желание накрутить валюту можно ) Hack (27 Mar 2015 в 17:47) Saint, вот еще в чем прикол случился. Сделал код таким: <? if($user[\'notes_c\'] == 5){ $b = ($user[\'rating\'] + 0.2); $c = 0; }else{ $b = ($user[\'rating\'] + 0.3); $c = ($user[\'notes_c\'] + 1); } mysql_query(\"update `user` set `notes_c` = \'{$c}\' , `rating` = \'{$b}\' where `id` = \". $user[\'id\']); ?> Теперь рейтинг прибавляется каждый дневник по 0.3 Пиндец. Saint (27 Mar 2015 в 17:54) --Цитата-- Hack (27 Mar 2015 в 17:44): Saint, я должен каждый раз сам чистить что ли? ---------- Hack, нет не должен ,блин чувак ,ты меня тролишь чтоль?) проверь таблицу user войди в ячейку notes_c (через структуру) если данные содержат другой формат смени на int() к примеру выполни запрос update `user` set `notes_c` = \'0\'; (данный запрос обнулит все дневники у всех юзеров и создай 5 дневников и это должно помочь ,если ты снова на морозе не будешь) Если всё норм в таблице выполни просто запрос выше и создай 5 дневников ,если не сработает ,то тогда ты что-то не так делаешь) дай мне файл где ты прописываешь ,прикрепи его в тему ,в том виде в котором он уже с этим кодом . я сам всё сделаю ,пока меня не накрыло) Hack (27 Mar 2015 в 17:57) Saint, ёпт, меня тоже уже одним словом... Возьми стандартный файл из социала /plugins/notes/add.php И там перед перенаправлением, перед Дневник успешно создан, и после запроса оптимизации таблы notes, я там все делаю.Примерно 76-78 строчка. Возьми и сделай, пожалуйста. Меня сейчас точно накроет разум.. Saint (27 Mar 2015 в 17:59) --Цитата-- Hack (27 Mar 2015 в 17:47): Saint, вот еще в чем прикол случился. Сделал код таким: <? if($user[\'notes_c\'] == 5){ $b = ($user[\'rating\'] + 0.2); $c = 0; }else{ $b = ($user[\'rating\'] + 0.3); $c = ($user[\'notes_c\'] + 1); } mysql_query(\"update `user` set `notes_c` = \'{$c}\' , `rating` = \'{$b}\' where `id` = \". $user[\'id\']); ?> Теперь рейтинг прибавляется каждый дневник по 0.3 Пиндец. ---------- Hack, ну правильно ,ты же прописал что б прибавлялся по 0.3 что должно было ещё быть? ты же понимаешь что ты прописал прибавление рейтинга 0.3 на то время когда 5 дневников не созданы . ну и конечно твой вариант будет бесконечно рейтинга ? блин чувак ,где у тебя логика?) ты мне скажи то что е понимаешь ,я тебе объясню как оно работает(если сам знаю). чувак ещё пару тупаков сообщений и я пропаду . люди наверно угорят уже с темы) Saint (27 Mar 2015 в 18:02) --Цитата-- Hack (27 Mar 2015 в 17:57): Saint, ёпт, меня тоже уже одним словом... Возьми стандартный файл из социала /plugins/notes/add.php И там перед перенаправлением, перед Дневник успешно создан, и после запроса оптимизации таблы notes, я там все делаю.Примерно 76-78 строчка. Возьми и сделай, пожалуйста. Меня сейчас точно накроет разум.. ---------- Hack,раз ты уверен что ты прав покажи свой файл с моим кодом , у меня нету социала на компе сейчас ,скорости нету скачивать ближайшие пару дней . Hack (27 Mar 2015 в 18:03) Saint, и опять пошло поехало... Каждый дневник прибавляется по 0.3 рейтинга. Почему не важные 5, а каждый? :( Saint (27 Mar 2015 в 18:08) --Цитата-- Hack (27 Mar 2015 в 18:03): Saint, и опять пошло поехало... Каждый дневник прибавляется по 0.3 рейтинга. Почему не важные 5, а каждый? :( ---------- Hack, ты реально нечего не читаешь)) я тебе объяснил почему так ниже сообщением) В личке ответил тебе ,там и разберёмся) Saint (27 Mar 2015 в 18:24) Ну всё вопрос решил за 1 минуту ,как я и думал код прописан не там где надо . тему закрывать?) Novichok (27 Mar 2015 в 19:21) Saint, Моей теме почему не помногил мне? Я же вам написал Скиталец (27 Mar 2015 в 19:24) --Цитата-- Saint (27 Mar 2015 в 14:50): Можно конечно и в файл записывать ,но как по мне это идиотизм ради одного условия(если там файл настроек личный ,то да) Чуваки ,уже год как опубликовано как get_user() и его данные стерилизовать в фиере 2.5.0(если не ошибаюсь) ,антологично будет работать на других сборках ,и куча примеров на форуме была ,конечно в социале хранить в user хлам не рекомендую . если хотя б на сайте выборка умелая то есть смысл .так или иначе я думаю автора не спасёт одна ячейка ,так как там и без этого проблем хватает ,которые как я вижу не кому не нужны) так что автор вот тебе пример ) //Execute the query to the database -> alter table `user` add `notes_c` int(11) default \'0\'; if($user[\'notes_c\'] == 5) { $b = ($user[\'balls\'] + 5000); $c = 0; } else { $b = ($user[\'balls\'] + 100); $c = ($user[\'notes_c\'] + 1); } mysql_query(\"update `user` set `notes_c` = \'{$c}\' , `balls` = \'{$b}\' where `id` = \". $user[\'id\']); /* Если число дневников достигло 5 будет начислено 5000 баллов , и счёт чик обнулён . если условие не выполнено То за каждый созданный дневник будет начисляться 100 баллов и счёт чик будет прибавляться +1 */ ---------- Saint, Да? а я бы сделал проще <?php //считаю колличество дневников $a=mysql_result(mysql_query(\"SELECT COUNT (*) FROM notes WHERE id_user = \'\".$user[\'id\'].\"\'\"),0); //делю все на 5 без остатка if($i % 5==0) // награждаю mysql_query(\"UPDATE user SET balls = balls+300 WHERE id = \'\".$user[\'id\'].\"\'\"); ?> Вот специально не стал сразу код давать чтоб посмотреть кто что навертит .гы. Saint (27 Mar 2015 в 19:28) Novichok, Во первых я журнал не читаю, если тему не вижу в обсуждаемых или новых ,на главной странице . у меня 2272 в журнале сообщений ,что говорит о том что много кому я могу не ответить ,в том числе и в своих сообщениях . Во вторых я не обязан не кому и не чего делать ,плати я буду чаще обращать на тебя внимания . Saint (27 Mar 2015 в 19:31) Скиталец, ты меня тоже разочаровать хочешь?) ему нужно на каждые 5 новых дневников давать по 5000 баллов) в твоём случаи после 5 дневников начисление остановится) Скиталец (27 Mar 2015 в 19:32) --Цитата-- Saint (27 Mar 2015 в 19:31): Скиталец, ты меня тоже разочаровать хочешь?) ему нужно на каждые 5 новых дневников давать по 5000 баллов) в твоём случаи после 5 дневников начисление остановится) ---------- Saint, Да ну? :) а ну попробуй .лол. Скиталец (27 Mar 2015 в 19:35) Saint, Вообще у меня в школе была 4 по алгибре но я как бы думал что бе3 остатка на 5 разделится и 10 и 15 и 100500 Novichok (27 Mar 2015 в 19:36) Saint, Ты дал о себе знать, желаю удачи! Saint (27 Mar 2015 в 19:39) --Цитата-- Скиталец (27 Mar 2015 в 19:32): Saint, Да ну? :) а ну попробуй .лол. ---------- Скиталец, Точняк ,тут затупил) ну тоже вариант) Скиталец (27 Mar 2015 в 19:42) --Цитата-- Кредитор (27 Mar 2015 в 13:14): Скиталец, ++ . еще и в таблицу юзер все пихают. все что под руку попадается ---------- Кредитор, А что тебя удивляет? Они сайты строят вместо того чтоб таблицу умножения учить, у них вон кроме 5 на 5 ниче не делится Saint (27 Mar 2015 в 19:42) --Цитата-- Скиталец (27 Mar 2015 в 19:35): Saint, Вообще у меня в школе была 4 по алгибре но я как бы думал что бе3 остатка на 5 разделится и 10 и 15 и 100500 ---------- Скиталец, Я б к примеру не стал бы использовать данный вариант к примеру по тому что я создал к примеру 4 дневника ,а к примеру по каким то причинам 2 удалил, и теперь мне надо будет снова создать 2 и ещё 1 ) имхо) Я вообще если вытянул 3-ку а год )))математические науки это не ко мне) Saint (27 Mar 2015 в 19:51) --Цитата-- Novichok (27 Mar 2015 в 19:36): Saint, Ты дал о себе знать, желаю удачи! ---------- Novichok, Давно дал ,я помогаю лишь тем кому это нужно ,а не тем кто меня к этому принуждает . Помогаю в меру своих сил ,потратил несколько лет что помогать людям ,трачу на подобные разъяснения часами ,вместо заработка . А ты ,наглый человек который думает только о себе и считает что вокруг тебя всё вертится . я тут написал про язвы ,а ты вместо того что б спросить в личке спрашиваешь о том что я тебе не помог с багом (или что там,не помню). чувак ты что положил на свой сайт прибор? или я кому то в личке думаешь не отвечаю?) помогаю бесплатно ,работаю платно . что тут странного? Чувак из-за таких как ты люди бегут с этого форума ,тебе же помогали на этом сайте кто-то? ты кому отзыв оставлял за это время ? Скиталец (27 Mar 2015 в 19:58) Saint, Да я года два назад тоже все в таблы пихал, пожалел в итоге, пришлось пол сайта переписать когда генерация стала 3 сек. Saint (27 Mar 2015 в 20:03) Скиталец, ниже пояснил этот момент) У меня к примеру с этим проблем нету) я посоветовал человеку как сделать ,что решило бы к примеру проблему с нагрузкой в разы ,связанные с пользовательскими данными ,из user. Hack (27 Mar 2015 в 20:21) Так и не решено.. :( Нужно чтобы не каждый раз при создании дневника зачислялись баллы, а каждые 5 дневников - 1 раз начисление. Код норм так и не дали, Saint дал, но по сути снова начисление при каждом создании. Как-будто тут все сдохли, кодеры есть нормальные, а лень зайти и помочь. :( Дайте уже нормальный код, или помогите! Я все выслушаю, просто не понимаю иногда. Объясняйте все одно за одним.. Hack (27 Mar 2015 в 20:31) Ну хорошо. Нашел норм код, и проверил его. Вот он: <? $c = mysql_num_rows(mysql_query(\"select `id` from `notes` where `id_user`=\'\".$user[\'id\'].\"\'\")); $count = $c - $user[\'notes_c\']; if($count == 5){ mysql_query(\"update `user` set `notes_c`=\'\".$c.\"\', `rating`=\'\".($user[\'rating\']+1).\"\' where `id`=\'\".$user[\'id\'].\"\' limit 1\"); } ?> Почему рейтинг не прибавляется? Мр. Форум (27 Mar 2015 в 20:34) [red]Тему закрыл Модератор Saint[/red] Saint (27 Mar 2015 в 20:40) Чуваки ,он несёт в личке бред . он поместил мой код в цикл рассылки в ленту ,при этом сказав что код не работает...Я исправил,далее он изменил код так что бы рейтинг бесконечно начислялся , и начал снова венить мои руки . ---------- задача была - баллы за каждые 5 дневников выдавать ,я ему всё вписал ,Скиталец дал более короткий код. ---------- Человек абсолютно точно положил прибор на свою вселенную. я ему если не ошибаюсь 7 раз сказал заменить 100 на 0 ,но он в танке . считает что я за него это должен сделать .... ------ так или иначе кроме как флуда тема не к чему не приведет ,ответ дан. закрыто . Источник: http://www.dcms-social.ru/forum/20/41/58321/