Таблица лидеров
Популярный контент
Показан контент с высокой репутацией 01/10/18 во всех областях
-
3 баллаВсем доброго времени суток! В этом уроке мы с вами будем учиться использовать mysqli_prepare который сделает наш скрипт куда современнее + защитит от простых SQL инъекций. Что это и зачем это нужно Начнем с того, что MySQL перестал поддерживаться уже давным давно, на смену ему пришел MySQLi. Он стал куда сочнее и функциональнее да и пользоваться в целом им стало удобнее. Мы с вами остановимся конкретно на mysqli_prepare. Последнее что я выделил жирным это очень замечательно. Таким образом если наш зловредный школохакер захочет дропнуть нашу базу прописав в форму регистрации что то вроде : "; DROP TABLE l2jserver; # У него ничего не получится, ведь подготовленный запрос должен состоять из одного SQL выражения! Рассмотрим на конкретном примере Давайте представим что у нас стоит обычный MySQL и перед регистрацией аккаунта наш скрипт проверяет наличие аккаунта перед тем как его добавить (или вернуть ошибку что аккаунт существует). В таком случае PHP код регистрации будет выглядеть примерно так: <?php $connect=mysql_connect($host, $user, $password); // иницилизируем подключение mysql_select_db($connect, $dbname); // выбираем нужную бд $query='SELECT * FROM accounts WHERE login="'.$login.'"'; // объявляем переменную с запросом $result=mysql_query($query); // выполняем запрос $rows=mysql_num_rows($result); // получаем кол-во строк из результата if($rows) { // если строки найдены // аккаунт уже есть, выдаем ошбку; } else { // если строки не найдены // аккаунта нет, можем регистрировать; } mysql_close($connect); // закрываем подключение ?> А теперь давайте представим что мы школохакеры и хотим дропнуть базу сервера зная её название. Тогда вместо логина я должен указать: "; DROP DATABASE l2jserver; # # - нужна чтобы MySQL игнорировал всё что идёт после неё. Таким образом $query будет выглядеть следующим образом: $query='SELECT * FROM accounts WHERE login=""; DROP DATABASE l2jserver; #"'; За ним последует выполнение функции mysql_query и как следствие дроп базы сервера. Как этого избежать? - Юзай MySQLi! Теперь предлагаю рассмотреть код регистрации который мы привели выше с использованием MySQLi (без prepare). <?php $connect=new mysqli($host, $user, $password, $db); // иницилизируем подключение к бд $query='SELECT * FROM accounts WHERE login="'.$_POST['login'].'"'; // объявляем переменную с запросом $result=$connect->query($query); // выполняем запрос $rows=$result->num_rows; // получаем кол-во строк в полученном результате из запроса if($rows) { // если строки найдены // такой аккаунт уже найден выводим ошибку; } else { // если строки не найдены // аккаунт не найден, регистрируем; } $result->free(); // очищаем результат $connect->close(); // закрываем подключение ?> Но этот скрипт до сих пор не безопасен, поскольку мы так же легко выполним два запроса одной функцией. Чтобы этого избежать будем использовать mysqli_prepare. Поехали!) <?php $connect=new mysqli($host, $user, $password, $db); // иницилизируем подключение к бд $query='SELECT * FROM accounts WHERE login=?'; // объявляем переменную с запросом $stmt = $connect->prepare($query); // подготавливаем наш запрос $stmt->bind_param('s', $_POST['login']); // присваеваем первому ? в запросе параметр с типом данных s (string) $stmt->execute(); // выполняем подготовленный запрос $result=$stmt->get_result(); // получаем результат из подготовленного запроса $rows=$result->num_rows; // получаем кол-во строк в полученном результате из запроса if($rows) { // если строки найдены // такой аккаунт уже найден выводим ошибку; } else { // если строки не найдены // аккаунт не найден, регистрируем; } $result->free(); // очищаем результат $stmt->close(); // закрываем подготовленный запрос $connect->close(); // закрываем подключение ?> // P.S. Я сам только сейчас осваиваю эту функцию и поэтому для усвоения решил написать этот мануал. Поэтому если что то не так - поправьте. Теперь давайте по порядку. Мы можем забиндить (функция bind_param) сколько угодно параметров любого типа данных. Главное чтобы мы их объявляли по порядку исходя из нашего запроса. В $query где login=? мы даем понять коду что мы хотим вместо ? подставить параметры которые мы присвоили ниже функцией bind_param. Таким образом мы можем строить куда более сложные запросы и использовать разные типы данных. Как в примере ниже: <?php $accesslevel=0; $stmt = $mysqli->prepare( "INSERT INTO accounts ( login, password, accesslevel ) VALUES (?,?,?)" ); $stmt->bind_param( "ssi", $_POST['char_name'], $_POST['password'], $accesslevel ); $stmt->execute(); $stmt->close(); ?> Что у нас получается. В наш запрос будут подставлены данные из переменных с тем типом данных которые мы указали перед первой запятой в кавычках. i - int (целое число) s - string (строковое значение) Теперь когда наш школохакер захочет выполнить sql инъекцию система просто не даст ему это сделать, поскольку подготовленный запрос может быть только один. Для подстраховки вы можете так же использовать функцию экранирования mysqli->real_escape_string($string); перед тем как подставить эти данные в запрос, но это для супер параноиков т.к. prepare автоматически экранирует данные. Надеюсь урок будет полезен и расширит ваш кругозор!) Не откажусь от благодарности. Всем спасибо за внимание!
-
2 баллаПравильно, тут происходит растягивание полос .server_line (т.е. всех полос). С цветом это никак не связано. Но именно в этом месте можно добавить установку цвета для каждой полосы. if(index == 0) { // Заполнит полоску сервера НОЛЬ по счету $(el).find('.server-line').css('background', 'url(../images/server-line_НУЖНЫЙ_ЦВЕТ_ИЗ_СУЩЕСТВУЮЩЕГО_СТИЛЯ.png) no-repeat left'); } Нужно добавить туда такие проверки для каждой по счету полосы. Для новых цветов создать стили по примеру трех существующих (в начале темы были), а изображения для них закрасить в пеинте.
-
1 баллSkype: Support_La2-Pro ICQ: 634024371 Личные сообщения. Любые наработки для Lineage 2 на заказ.
-
1 баллПросмотр файла Чистый Билд Acis Всем Доброе время суток . Выкладываю чистый билд , для пользователей forummaxi.ru Сборка нормальная , стабильная . Не однократно стояла на проектах , не разу не в чём не подвела . Так же иметься её исходный код , если кому интересно выслушаю ваши предложения в лс . Ну и буду благодарен за ваши ++ . Добавил Feyk Добавлено 08.01.2018 Категория Сборки Автор Feyk Хроники Interlude
-
1 баллПересмотрен вариант клиентки: с этого дня клиентка вечная и нету срока годности. Для восстановления клиентки нужно заплатить 1500 руб за обновления на месяц и 500 руб за восстановление. Возможность предоставляется всем и даже старым клиентам.
-
1 балл
-
1 баллНазвание: Antibot: PWsoft Добавил: gvb Добавлен: 08 Jun 2017 Категория: Серверные дополнения Автор: ncs.SpawN Хроники: Interlude Шара антибота, без привязок. Нажмите здесь, чтобы скачать файл
-
1 балл
-
1 балл
-
1 балл
-
1 баллПишу вот такую вещицу, тока начал. на финише будет редактить все и одновременно в сервере и клиенте по 1 клику все компилить и засовывать как надо куда надо. Пишу для проекта новой игры на базе линейки. (хроники взяты за основу линдвиор) Если есть желающие пишите в вк расскажу пару слов об задумке и об уже набравшемся коллективе. vk.com/ner0os
-
1 балл
-
1 баллЯ уже увидел все что мне нужно было, дыра есть. Готов дать доказательства. Бывший свн: http://svn3.xp-dev.com/svn/L2J-Xtreme/branches/ Как же он красиво съезжает, да бы не делать фикс.
-
1 балл
-
1 балл
-
1 баллЕсли нужно, чтобы и сервер на 100% грузился и стиль менялся, то надо вместе писать... $(el).find('.server-line').css('background','url(images/server-line_blue.png) no-repeat left'); $(el).find('.server-line').width('100%'); В первую очередь нужно понимать что делаешь, тогда можно искать ошибки. Если самому интересно решить проблему, то информации более чем предостаточно. Если же нужно чтобы кто-то за тебя сделал, ну дай хотя бы ссылку на сайт и скажи на каком этапе застрял.
-
1 балл
-
1 баллага, выпавший в осадок скорее какой разработчик?) Почитай мои посты выше) я скорее выпавший в осадок технопараноик)
-
1 баллУ тебя рип под св, а шаблон как я полагаю изначально не под св делался или же просто в html где можно было задать цвет для каждого статуса в ручную. В СВ статус выводится по шаблону, один шаблон для всех. Поэтому из тех кусков что я увидел тут 2 варианта: Первый это псевдоклассы: server:nth-child(1) .server-line { background: url(../images/server-line_blue.png) no-repeat left !important; } server:nth-child(2) .server-line { background: url(../images/server-line_gold.png) no-repeat left !important; } server:nth-child(3) .server-line{ background: url(../images/server-line_fiolet.png) no-repeat left !important; } server:nth-child(4) .server-line { background: url(../images/server-line_fiolet.png) no-repeat left!important; } Второй это через javascript, опять же, если тот скрипт что ты выложил работает так как заявлено: $('.server').each(function(index, el) { $(el).find('.server-line').width($(el).data('online')/5000*100 + '%'); if(index == 0) { // Заполнит полоску сервера 1 по счету $(el).find('.server-line').css('background','url(images/имя_картинки.png) no-repeat left'); } if(index == 1) { // Заполнит полоску сервера 2 по счету $(el).find('.server-line').css('background','url(images/имя_картинки.png) no-repeat left'); } if(index == 2) { // Заполнит полоску сервера 3 по счету $(el).find('.server-line').css('background','url(images/имя_картинки.png) no-repeat left'); } //$(el).append('<div class="show-online">0</div>'); }); var showOnlineTimeout;
-
1 баллТак вроде продавец нигде и не пишет, что сборка "Уникальная, все дополнения приватные" и так далее. Цена 1500 рублей, что в целом стоит "Работы" над "Готовой" сборкой.
-
1 баллЯ не особо разбираюсь в php, в общих чертах знаю про mysql и mysqli, поэтому эта информация очень даже полезна. Не знаю что скажут гуру php, но от меня +
-
1 балл
-
1 баллС css то все понятно, ищите, где в html используются стили .server-line_fiolet, .server-line_gold, .server-line_blue.
-
1 балл
-
1 баллНазвание: Rebellion-Team 761 Добавил: SmokiMo Добавлен: 01 May 2016 Категория: Сборки Автор: SmokiMo, 4ipolino Хроники: High Five Сайт команды: Rebellion-Team.ru После шары 843 версии, решил продолжить работу над 700 сурсами. Было сделано много работы по обновлению сборки и по переходу на новые библиотеки. Фикс лист:
-
-1 балл
-
-1 баллПросмотр файла Интерфейс Lineage II Classic HF5 Изменения интерфейса: Таргет - показывает профу, статус Экспа + Адена + Растягивание рюкзака Классик Виталити - растянуто на всю длину окошка Системное меню стилизовано Классик Добавлена возможность растягивать систем чат Сохранение вкл/выкл окна невита. Окна продажи у НПЦ и примерка Классик, для склада добавлена кнопочка сортировки У макросов обновлен выбор иконки, макросы при сворачивании становятся панелькой, как у шоткатов. Кол-во иконок макросов увеличено Классик Вывод урона на экран (справа) Вывод каста цели (того, на кого стоит таргет) Вывод каста скилов на персонажа Расширена информация в окне пати, а также переписан и расширен выбор вариантов бафов, денсов, сонгов, дебафов Добавлена 5 панелька шоткатов Добавлено отображение локации сереньким цветом и кол-во пвп, пк Переработка окна аугментации с автоматизацией части действий вставки/удаления ЛС Частичная автоматизация заточки Частичная автоматизация вставки АТТ Добавлена настройка прозрачности чата (основного + системного) Добавлено сворачивание системного меню на нижнюю панель. Alt+ДаблКлик в меню покупки\продажи работают так-же, как Drag'n'Drop с зажатым альтом - перетаскивает все предметы. В настройках добавлена вкладка "Интерфейс" Регулировка кол-во добавочных справа ячеек в растянутом состоянии (1-6) Включить вывод урона на экран Включить отображение каста скилов у тагета Включить отображение каста скилов на персонажа Окно таргета: Клик Правой кнопкой мыши - взять ассист. Alt+Клик Левой кнопкой мыши - Ставит метку на карте (где находится цель), над головой персонажа появляется стрелка, указывающая на отметку на карте. Shift+Клик Правой кнопки мыши - в чате появляется "%имя_цели% Окно чата Alt+Клик Левой кнопкой мыши по имени отправителя сообщения - Ставит метку на карте (где находится отправитель сообщения), над головой персонажа появляется стрелка, указывающая на отметку на карте. Скрытое для дальнейшей разработки: возможно добавить для предметов красный и синий цвета Добавил Akumuru Добавлено 24.12.2017 Категория Клиентские дополнения Автор edKith Хроники High Five