|
WWW Web интерфейс для MaNGOS |
|
Опции темы | Поиск в этой теме | Опции просмотра |
08.03.2010, 07:27 | #1 |
Умный
Регистрация: 07.03.2010
Адрес: Северный Урал (60°сш, 60°вд)
Сообщений: 330
Сказал(а) спасибо: 82
Поблагодарили 399 раз(а) в 120 сообщениях
Записей в дневнике: 30
|
[control panel] ACP - Панель управления учетными записями.
Описание
ACP (Account Control Panel) – предназначена для управления игроками аккаунтами и персонажами. (Он же личный кабинет). Написана на PHP. Главный девиз программы «чем проще - тем лучше». Но некоторой "паранойи", в виде подтверждений по емайлу, не помешает. Функционал * регистрация нового аккаунта * восстановление пароля к аккаунту по средствам электронной почты * просмотр информации об аккаунте и персонажах * смена пароля, * смена емайла, * смена типа аккаунта (wow, tbc, wotlk) * lock / unlock аккаунта * вытаскивание персонажа из застреваний * переименование персонажа * перенос персонажа на другой аккаунт * телепортация персонажа в дружественную столицу * просмотр информации о банах * просмотр доступных команд сервера * просмотр объявлений autobroadcast-a * логирование всех важных операций Требования * PHP 4.x - 5.3.3 * MySQL 4.x и выше * Mangos 3.1.3 сборка 8072 или выше * Патч Autobroadcast (не обязателен). * register_globals = Off * safe mode off Установка Установка проходит в 2 этапа: 1. Импортируйте SQL/acp.sql в БД acp(lk) 2. Отредактируйте config/config.php (все пояснения для настройки есть в самом файле.) 3. Внести данные о реалмах в config/realmlist.php Заметки Это мой первый полный проект. До этого ограничивался подгонкой под себя того что уже есть. Но в определенный момент понял, что нормального, в моем особом понимании этого дела, личного кабинета не существует. Со всем уважением к TIMzs, но его кабинет не давал мне того, чего хотелось. Вот я и решил сделать всё сам. Понимаю, что некоторые участки кода можно переделать и оптимизировать, но познания в PHP растут вместе с этим маленьким проектом…. Большое количество шкурок вызвано моим интересом «а как ACP будет смотреться в дизайне вон того сайта?»… Забыл добавить, что в файле английского интерфейса(include/text.en.php) залиты русские тексты в utf-8. Кому понадобиться, тот переведёт. Последняя версия - 2.33 (2 - версия движка, 33 - ревизия). ВНИМАНИЕ! Первая версия движка никогда мной не была доведена до ума и полной работоспособности. На определенном этапе разработки АСР, был написан с нуля движок 2-ой версии. Работы по первой версии были полностью и бесповоротно прекращены. Те администраторы, которые используют старый движок должны знать, что в нем есть куча дыр, неисправностей и прочих косяков. За утрату информации сервера, при использовании АСР-1, вы сами несете ответственность. -------- Послесловие Выражаю огромную благодарность Камекадзе, TIMzs, Antimatrix и другим участникам форума, из чьих работ я брал идеи для своего проекта. ---------------------------- tempura Автор очередного вопроса на тему "что дальше?", "когда будет?" и т.п. - автоматически вылетает в Рид-Онли на пару недель. В соответствии с общепринятым правилом "сначала читайте шапку, потом всю ветку". Последний раз редактировалось Кот ДаWINчи; 26.07.2012 в 20:05. |
81 пользователя(ей) сказали cпасибо: | Alehander (11.03.2010), angelShlesser (25.03.2010), anvd24 (11.05.2010), blackmanos (18.07.2010), Chaosua (18.04.2010), CruncH (15.05.2010), DeusModus (08.03.2010), dikabraz (31.08.2012), ExC0tiC (08.03.2010), Fedia22 (11.06.2010), Feel the Power (02.06.2010), Hantet (16.03.2010), KiriX (08.03.2010), Konctantin (08.03.2010), labor (05.05.2010), Lightunit (17.06.2010), lina (01.04.2012), Lurker (10.03.2010), Mayss (07.04.2010), Medivh (09.03.2010), mozilla (13.03.2010), Neggod (08.03.2010), ObeDve (17.12.2010), PSZ (23.03.2010), Rave (19.02.2011), rootor (08.03.2010), selector (22.04.2010), Sergey (14.04.2010), SergZ (15.01.2011), sven (19.04.2010), Viste (10.03.2010), _PARADOX_ (02.06.2010), Дмитрий "Айдин" (05.06.2010) |
06.03.2012, 04:20 | #281 | |
Умный
Регистрация: 07.03.2010
Адрес: Северный Урал (60°сш, 60°вд)
Сообщений: 330
Сказал(а) спасибо: 82
Поблагодарили 399 раз(а) в 120 сообщениях
Записей в дневнике: 30
|
Цитата:
Вот так: Код:
$res = mysql_query("update `characters` set `at_login` = `at_login` | 64, `money` = `money` - " . $PayMoney . " where `guid` = " . (int) $_POST['character']); |
|
29.03.2012, 13:43 | #283 |
Умный
Регистрация: 07.03.2010
Адрес: Северный Урал (60°сш, 60°вд)
Сообщений: 330
Сказал(а) спасибо: 82
Поблагодарили 399 раз(а) в 120 сообщениях
Записей в дневнике: 30
|
Спасибо пользователям, что иногда, очень редко, но тыкают меня в старые, забытые мной и богом, модули.
Сегодня подсказали дыру в modules/static.php Как всегда, я старый маразматик, в этом на первый взгляд безобидном модуле забыл проверить $_GET на вшивость. Вот новый вариант модуля. Всего-то надо вставить 2 раза (int) и дырка прикрыта. Код:
<?php if (isset($_GET['id']) and ((int)$_GET['id'] > 0)) { $k_connect = mysql_connect($k_ip, $k_userdb, $k_pw); mysql_select_db($k_db, $k_connect); mysql_query("SET NAMES 'utf8'"); $res = mysql_query("SELECT * FROM `static` where `id` = " . (int)$_GET['id'] . " limit 1"); if (mysql_num_rows($res) > 0) { $nres = mysql_fetch_array($res); echo '<table width="90%" border="0" cellspacing="0" cellpadding="5">'; echo '<tr><td align="left" class="NewsLogo">'; if ($nres['type'] == 2) echo '<img src="images/no.png" align="absmiddle">'; elseif ($nres['type'] == 1) echo '<img src="images/yes.png" align="absmiddle">'; else echo '<img src="images/admin.png" align="absmiddle">'; echo '</td>'; echo '<td align="left" class="'; if ($nres['type'] == 2) echo 'NewsTitleGM'; elseif ($nres['type'] == 1) echo 'NewsTitlePlayer'; else echo 'NewsTitleAll'; echo '">' . $nres['title'] . ' </td>'; echo '<td align="right" class="NewsDate">' . $nres['date'] . '</td>'; echo '</tr>'; echo '<tr><td colspan=3 class="NewsContent">' . $nres['text'] . '</td></tr>'; echo '</table>'; } else echo $txt['234']; } else { echo $txt['234']; } ?> И огромное спасибо что подсказали. Последний раз редактировалось Кот ДаWINчи; 29.03.2012 в 13:46. |
29.03.2012, 15:31 | #284 |
Умный
Старожил
Регистрация: 06.03.2010
Сообщений: 886
Сказал(а) спасибо: 698
Поблагодарили 433 раз(а) в 181 сообщениях
Записей в дневнике: 4
|
Хм... Зачем два раза? Вроде, одного достаточно, ведь проверка в первом условии:
((int)$_GET['id'] > 0) может и не пройти, если там что-то не так будет. Если я юзаю $_GET - всегда в функциях есть минипроверочка данной переменной: PHP код:
|
29.03.2012, 16:17 | #285 | |
Умный
Регистрация: 07.03.2010
Адрес: Северный Урал (60°сш, 60°вд)
Сообщений: 330
Сказал(а) спасибо: 82
Поблагодарили 399 раз(а) в 120 сообщениях
Записей в дневнике: 30
|
KiriX, ты и прав, и не прав одновременно. В общем плане - ПРАВ. А В конкретно данном случае - нет. т.к. здесь по $_GET должно (но не обязано ) приходить ЦЕЛОЕ ЧИСЛО. а значит самым быстрым, простым и эффективным способом проверить поступившие данные - это банальное преобразование к целому.
а два раз вот зачем. Допустим вместо "4" приходит строка "4 or ....... и тут инъекция" в сравнении if некоторые версии пхп вернут 0 (и проблем нет), а некоторые 4 .... но сама переменная $_GET['id'] останется с инъекцией ps: Не забывайте, что АСР - это очень бородатый проект 2009 года. Это по сути мой первый проект, где я всё писал сам (почти не подглядывал у других, за исключением мелочей). И с высоты прошедшего времени, я скажу так. "Там много чего написано по-дилетантски ... сейчас я бы написал совершенно по другому" ps2:
|
|
Пользователь сказал cпасибо: | KiriX (29.03.2012) |
29.03.2012, 16:32 | #286 |
Пользователь
Регистрация: 06.01.2012
Сообщений: 98
Сказал(а) спасибо: 12
Поблагодарили 33 раз(а) в 21 сообщениях
|
Код:
if (isset($_GET['id']) and is_numeric($_GET['id']) and ((int)$_GET['id'] > 0 )) |
29.03.2012, 20:28 | #287 |
Умный
Старожил
Регистрация: 06.03.2010
Сообщений: 886
Сказал(а) спасибо: 698
Поблагодарили 433 раз(а) в 181 сообщениях
Записей в дневнике: 4
|
Кот ДаWINчи, спасибо, вот про сравнение-то мне и было интересно услышать
Ну и функция проверки всё-таки не лишней будет P.S: Проект твой весьма неплох, лёгок очень, прост, удобен и достаточно функционален. Но вот чего ему не хватает, так это скриптов и аякса, в некоторые места он так и просится |
09.04.2012, 13:08 | #289 |
Умный
Регистрация: 07.03.2010
Адрес: Северный Урал (60°сш, 60°вд)
Сообщений: 330
Сказал(а) спасибо: 82
Поблагодарили 399 раз(а) в 120 сообщениях
Записей в дневнике: 30
|
Добрый день. После выходных, во время которых я просмотрел и проанализировал большую часть проекта, родилась куча бесценных мыслей. По сему, перед тем как их начать воплощать, я решил "зарелизить" текущее положение вещей.
И так ... Внеплановая рева проекта: 2.33. Это обновление содержит совсем немного доработок. А именно: 1. коррекцию modules/static.php (из поста выше) 2. доработку modules/events.php (из поста выше) 3. шкурку АСР (ее я использовал при разработке предыдущей ревы, но забыл включить) На вопрос "зачем нужна эта версия?" отвечу так: Это логический конец АСР-2. Далее что-то делать не изменив основы движка не вижу ни малейшей перспективы. Вот по этому и ставлю эту точку в конце абзаца. Теперь берусь за модернизацию и нововведения. Главное что я собираюсь сделать - это ввести классы в движок. И начну с класса по работе с базой данных и класса аккаунта. Для этого мне придется внести изменения практически во все пхп-файлы проекта. в 2.34 будет всё тоже самое, но через новый способ подключения к базе данных. и так ... ждите mysqli и класс доступа к данным. |
09.04.2012, 15:05 | #291 |
Умный
Старожил
Регистрация: 06.03.2010
Сообщений: 886
Сказал(а) спасибо: 698
Поблагодарили 433 раз(а) в 181 сообщениях
Записей в дневнике: 4
|
Хорошее начинание перейти на классы
После первого же моего опыта работы с ними я не понял, как я делал что-то без них раньше Класс ДБ - зачем??? Чем не устраивает библиотека DBSimple? Ведь в неё уже по умолчанию залито множество защит от инъекций. Элементарных, конечно, но всё же сразу чутка безопаснее |
09.04.2012, 19:05 | #292 | |
Умный
Регистрация: 07.03.2010
Адрес: Северный Урал (60°сш, 60°вд)
Сообщений: 330
Сказал(а) спасибо: 82
Поблагодарили 399 раз(а) в 120 сообщениях
Записей в дневнике: 30
|
Цитата:
Вот я заранее и перестраиваюсь. А то потом такой комок проблем навалит, что придется в срочном порядке проводить тонну работы. а я этого не хочу. |
|
09.04.2012, 19:24 | #293 |
Новичок
Регистрация: 02.05.2010
Сообщений: 28
Сказал(а) спасибо: 5
Поблагодарили 8 раз(а) в 2 сообщениях
|
юзай PDO
|
09.04.2012, 20:32 | #294 |
Умный
Регистрация: 07.03.2010
Адрес: Северный Урал (60°сш, 60°вд)
Сообщений: 330
Сказал(а) спасибо: 82
Поблагодарили 399 раз(а) в 120 сообщениях
Записей в дневнике: 30
|
Что последний пост прочел по диагонали и отвечаешь? Извини, но мы тут обсуждали mysqli, если не заметил. Так вот, я для своей работы уже выбрал mysqli. И даже класс для работы с ним написал. Переубедить меня в сторону ПДО - дохлый номер. А те кто хотят познать в чем разница - милости прошу на официальный сайт.
Тема по выбору АПИ закрыта. Последний раз редактировалось Кот ДаWINчи; 09.04.2012 в 20:34. |
10.04.2012, 07:54 | #295 | |
Умный
Старожил
Регистрация: 06.03.2010
Сообщений: 886
Сказал(а) спасибо: 698
Поблагодарили 433 раз(а) в 181 сообщениях
Записей в дневнике: 4
|
Цитата:
Можно пожелание на будущее? Больше javascript и ajax |
|
11.04.2012, 17:26 | #296 |
Новичок
Регистрация: 17.10.2010
Сообщений: 24
Сказал(а) спасибо: 10
Поблагодарили 0 раз(а) в 0 сообщениях
|
Присоединяюсь к пожеланиям, хоть и не пользуюсь системой (так как нет поддержки 2.4.3), но было бы куда удобней если бы были официальные обновления в виде патчей отдельных а не сразу всем сайтом по 5 мб. А так же вносить изминения и поддерживать актуальность в первом посте (cейчас там например ссылка на 32 реву).
|
11.04.2012, 19:10 | #297 |
RMDC Donator
Регистрация: 07.03.2010
Сообщений: 78
Сказал(а) спасибо: 48
Поблагодарили 32 раз(а) в 7 сообщениях
|
Кстати да. Давно бы уже пора на Git переехать
|
12.04.2012, 17:46 | #298 |
Новичок
Регистрация: 02.05.2010
Сообщений: 28
Сказал(а) спасибо: 5
Поблагодарили 8 раз(а) в 2 сообщениях
|
Продолжу холивар.
API supports client-side Prepared Statements No Yes Одна эта возможность перекрывает плюсы mysqli, т.к. можно забыть про инъекции |
12.04.2012, 19:51 | #299 |
Умный
Регистрация: 07.03.2010
Адрес: Северный Урал (60°сш, 60°вд)
Сообщений: 330
Сказал(а) спасибо: 82
Поблагодарили 399 раз(а) в 120 сообщениях
Записей в дневнике: 30
|
холивара не будет. Я не склонен, как школоло, "меряться письками". Если кто не понял смысл постов №289 и 290, то суть такая: ВСЯ работа с базой будет реализована через один единственный класс. Кто хочет, тот переписывает его под mysql, pdo или еще что там, вплоть до mssql и oracle. ... и ваш сайт будет работать так, как вам это надо. так что главная задача отделения мух от котлет будет выполнена. а остальное - это уже ваша необходимость или "хотелка".
|
Пользователь сказал cпасибо: | tempura (13.04.2012) |
13.04.2012, 02:51 | #300 |
Новичок
Регистрация: 02.05.2010
Сообщений: 28
Сказал(а) спасибо: 5
Поблагодарили 8 раз(а) в 2 сообщениях
|
Вы видимо не поняли то, что я хотел сказать. PDO это уже готовый класс для работы с бд, и там не важно какой драйвер, хоть mysql, postger, sqlite и т.д и т.п. То есть вы по сути пишете тот же пдо для mysql поверх mysqli, вопрос, зачем? Производительность голого PDO сравнима с mysqli, но все, что в прилепленном вами класе уже реализовано в PDO.
Рассмотрим PDO::query(), это голый запрос. Возвращает обьект запроса или ложь в случае ошибки. Желаете узнать текст ошибки? Пожалуйста, PDO::errorInfo. Ну а если желаете узнать к-во колонок или строчек, PDOStatement::columnCount или PDOStatement::rowCount. Зачем изобретать велосипед? тем более что что mysqli это библиотека для доступа к скулю, а чистый PDO это уровень абстракции. |
13.04.2012, 12:42 | #301 | |
Умный
Регистрация: 07.03.2010
Адрес: Северный Урал (60°сш, 60°вд)
Сообщений: 330
Сказал(а) спасибо: 82
Поблагодарили 399 раз(а) в 120 сообщениях
Записей в дневнике: 30
|
Еще раз перечитал кучу статей в инете про mysqli и pdo ... Разобрал кучу примеров. Много думал. Но Убеждение относительно АСР осталось прежним. В этом проекте останется всё так как я задумал. (Если он еще кому-нибудь нужен.) А вот в новых проектах буду уже решать что использовать.
Наткнулся на хорошее мнение: Цитата:
и еще... Где-то ранее читал, но сегодня подтверждения не нашел. Но мысль была такая: разработчики PHP в 6-й версии делают ставку на развитие именно MySQLi, а не PDO. Что скоро по своему функционалу MySQLi сравняется и даже обгонит PDO. ... Но увы сегодня подтверждения этой мысли не нашел. Может за эти месяцы что поменялось в умах разработчиков? или та статейка была фейком? Последний раз редактировалось Кот ДаWINчи; 13.04.2012 в 12:48. |
|
21.03.2013, 19:44 | #302 |
Умный
Регистрация: 07.03.2010
Адрес: Северный Урал (60°сш, 60°вд)
Сообщений: 330
Сказал(а) спасибо: 82
Поблагодарили 399 раз(а) в 120 сообщениях
Записей в дневнике: 30
|
Привет всем. Давно не писал о проекте. Дела в нем топчутся на одном месте. Ибо времени на него после работы, халтуры и семейной жизни не остается ни сколько.
Наработки есть. Но мало. Думаю, что 34 рева будет, и будет к лету. отпишусь здесь и в своем блоге. Хотел еще добавить, что раз я всё же сел за проект, то готов выслушать ваши "хотелки" ... вдруг какие из них реализую. Последний раз редактировалось NeatElves; 21.03.2013 в 22:17. |
|
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
[10288] Unsummon pet if pet direct control spell expire out of visibility range from owner. | newsbot | CMaNGOS Commits | 0 | 30.07.2010 04:14 |
[10186] Fixed visibility constant refresh problem with pet direct control spells. | newsbot | CMaNGOS Commits | 0 | 13.07.2010 01:26 |
[patch] Mind Control | PSZ | Отвергнутые патчи | 3 | 14.06.2010 10:54 |
[10053] Use UNIT_STAT_CONTROLED for mark unit state under direct player control. | newsbot | CMaNGOS Commits | 0 | 14.06.2010 09:30 |