doloto 7 Опубликовано 6 мая, 2023 Доброе утро. Может кто нить написать код вывода на сайт топ 10 игроков? я не шарю.(гуглил... готовых решений не нашел.... могу пару сотен заплатить. Больше не могу сам х без соли доедаю..) сервер pwsoft interlude Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
Formatter 14 Опубликовано 6 мая, 2023 <?php class TopPvp { const PREFIX = 'top_pvp_'; function getPrefix() { return self::PREFIX; } function getPath() { return "./cache"; } private function getOrSave() { $path = $this->getPath(); $files = glob($path.'/'. $this->getPrefix() . '*'); if(count($files) > 0 && file_exists($files[0])) { $a = explode("_", $files[0]); $time = intval($a[count($a) - 1]); //echo "diff: " . (time() - $time); if(time() - $time >= 180) { unlink( $files[0] ); return $this->loadDb(); } else { return file_get_contents($files[0]); } } else { return $this->loadDb(); } } private function loadDb() { require "db.php"; $sql = 'SELECT characters.char_name, characters.pvpkills, characters.pkkills, characters.onlinetime, clan_subpledges.name, char_templates.ClassName, character_subclasses.class_id, clan_data.crest, ally_data.crest as ally_crest, clan_data.ally_id, clan_data.clan_id '. 'FROM characters '. 'LEFT JOIN `clan_subpledges` ON characters.clanid = clan_subpledges.clan_id AND clan_subpledges.type = 0 '. 'LEFT JOIN character_subclasses ON character_subclasses.char_obj_id = characters.obj_Id AND character_subclasses.active = 1 '. 'LEFT JOIN `char_templates` ON char_templates.ClassId = character_subclasses.class_id '. 'LEFT JOIN `clan_data` ON clan_data.clan_id = characters.clanid '. 'LEFT JOIN `ally_data` ON ally_data.ally_id = clan_data.ally_id '. 'ORDER BY pvpkills DESC LIMIT 10;'; $result = mysqli_query($db, $sql); $content = ""; if(mysqli_num_rows($result) > 0) { foreach($result as $row) { //var_dump($row); $content .= "<tr>"; $content .= '<td>' . $row['char_name'] . '</td>'; $content .= '<td style="font-weight: bold;">' . $row['pvpkills'] . '</td>'; $content .= '<td>' . $row['pkkills'] . '</td>'; if(empty($row['name'])) { $content .= '<td>-</td>'; } else { $crest1 = base64_encode($row['crest']); $crest2 = base64_encode($row['ally_crest']); $content .= '<td><img src="/php/dds.php?data=' . $crest2 . '&id=' . $row['ally_id'] . '"><img src="/php/dds.php?data=' . $crest1 . '&id=' . $row['clan_id'] . '"> ' . $row['name'] . '</td>'; } $content .= '<td>' . $row['ClassName'] . '</td>'; $online = intval($row['onlinetime']); $content .= '<td>'; $hours = floor($online / 3600); $minutes = floor(($online / 60) % 60); $seconds = $online % 60; $content .= "$hours ч. $minutes мин. $seconds сек."; $content .= '</td>'; $content .= "</tr>"; //$content .= '<div class="quote">' . $row['char_name'] . ' - ' . $row['pvpkills'] . ' PVP</div>' . "\n"; } } else { $content .= "<tr><td>-</td><td>-</td><td>-</td><td>-</td></tr>"; } $result->close(); file_put_contents($this->getPath() . "/" . $this->getPrefix() . "" . time(), $content); return $content; } function get() { $data = $this->getOrSave(); //foreach (explode("\n", $data) as $s) { // echo $s; //} return $data; } } ?> 1 Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
SteveDogs 1077 Опубликовано 6 мая, 2023 29 минут назад, doloto сказал: Доброе утро. Может кто нить написать код вывода на сайт топ 10 игроков? я не шарю.(гуглил... готовых решений не нашел.... могу пару сотен заплатить. Больше не могу сам х без соли доедаю..) сервер pwsoft interlude Возьми stressweb самый простой вариант для начинающих, и регистрация и полноценная статистика со всеми выводами. 1 Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
doloto 7 Опубликовано 6 мая, 2023 2 часа назад, SteveDogs сказал: Возьми stressweb самый простой вариант для начинающих, и регистрация и полноценная статистика со всеми выводами. не получается ее активировать как только не пробовал... скорее всего у меня старые апач пшп и тд.. Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
doloto 7 Опубликовано 10 мая, 2023 (изменено) короче я в шоке))) GPTchat мне бесплатно сделал то что я хотел.... Ваше мнение по этому поводу? =))) Это полностью его код)))) Спойлер <?php // Подключение к базе данных MySQL $servername = "localhost"; // Имя сервера базы данных $username = "username"; // Имя пользователя базы данных $password = "password"; // Пароль пользователя базы данных $dbname = "dbname"; // Имя базы данных // Создание подключения с указанием кодировки UTF-8 $conn = new mysqli($servername, $username, $password, $dbname); $conn->set_charset("utf8"); // Установка кодировки соединения // Проверка подключения if ($conn->connect_error) { die("Ошибка подключения: " . $conn->connect_error); } // Определяем номер страницы $page = isset($_GET['page']) ? intval($_GET['page']) : 1; $page = max(1, $page); // Номер страницы должен быть не меньше 1 // Определяем количество строк на странице $rows_per_page = 50; // Вычисляем смещение для текущей страницы $offset = ($page - 1) * $rows_per_page; // Запрос к базе данных с сортировкой по убыванию chat_filter_count $sql = "SELECT char_name AS Игрок, chat_filter_count AS Рейтинг FROM characters WHERE chat_filter_count BETWEEN 0 AND 999999 ORDER BY CAST(chat_filter_count AS UNSIGNED) DESC LIMIT $offset, $rows_per_page"; $result = $conn->query($sql); if ($result->num_rows > 0) { // Создаем таблицу для вывода данных echo "<table>"; echo "<tr><th align='left' style='padding-right: 100px;'>Игрок:</th><th align='left'>Рейтинг:</th></tr>"; // Вывод данных каждой строки while ($row = $result->fetch_assoc()) { echo "<tr><td align='left'>" . $row["Игрок"] . "</td><td align='left'>" . $row["Рейтинг"] . "</td></tr>"; } echo "</table>"; // Создаем ссылки на страницы $sql_count = "SELECT COUNT(*) as count FROM characters WHERE chat_filter_count BETWEEN 0 AND 999999"; $result_count = $conn->query($sql_count); $row_count = $result_count->fetch_assoc(); $total_rows = $row_count['count']; $total_pages = ceil($total_rows / $rows_per_page); // Выводим ссылки на страницы echo "<div class='pagination'>"; for ($i = 1; $i <= $total_pages; $i++) { if ($i == $page) { echo "<span class='current-page'>$i</span>"; } else { echo "<a href='?page=$i'>$i</a>"; } } echo "</div>"; } else { echo "Нет данных"; } // Закрытие подключения $conn->close(); ?> Изменено 10 мая, 2023 пользователем doloto Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
Saltfire 89 Опубликовано 10 мая, 2023 2 часа назад, doloto сказал: Ваше мнение по этому поводу? Лютый, Поповский говнокод. за такое отрывают руки по плечи. 2 часа назад, doloto сказал: BETWEEN 0 AND 999999 Вощпе убило. 1 Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
doloto 7 Опубликовано 10 мая, 2023 43 минуты назад, Saltfire сказал: Лютый, Поповский говнокод. за такое отрывают руки по плечи. Вощпе убило. это я его попросил об этом))) Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
doloto 7 Опубликовано 10 мая, 2023 16 часов назад, Saltfire сказал: Лютый, Поповский говнокод. за такое отрывают руки по плечи. Вощпе убило. А как правильно сделать запрос? Если можно полную строчку.. а я сам ни бум бум) Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
Saltfire 89 Опубликовано 11 мая, 2023 (изменено) 12 часов назад, doloto сказал: А как правильно сделать запрос? Если можно полную строчку.. а я сам ни бум бум) $sqlsTops = [ 'topPvp' => 'SELECT `char_name`,`pvpkills` AS `kills` FROM `characters` WHERE `accesslevel` = 0 AND `pvpkills` > 0 ORDER BY `pvpkills` DESC LIMIT 10', 'topPk' => 'SELECT `char_name`,`pkkills` AS `kills` FROM `characters` WHERE `accesslevel` = 0 AND `pkkills` > 0 ORDER BY `pkkills` DESC LIMIT 10', 'topClans' => 'SELECT `clan_name` AS `char_name`,`reputation_score` AS `kills` FROM `clan_data` WHERE `accesslevel` = 0 AND `reputation_score` > 0 ORDER BY `reputation_score` DESC LIMIT 10' ]; Ну и дальше банальный while цикл на какой хочешь запрос, я просто сразу 3 сделал по обычному post запросу какой нужно меняем топ и все, а цикл всегда один будет. Изменено 11 мая, 2023 пользователем Saltfire 1 Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
doloto 7 Опубликовано 11 мая, 2023 10 часов назад, Saltfire сказал: $sqlsTops = [ 'topPvp' => 'SELECT `char_name`,`pvpkills` AS `kills` FROM `characters` WHERE `accesslevel` = 0 AND `pvpkills` > 0 ORDER BY `pvpkills` DESC LIMIT 10', 'topPk' => 'SELECT `char_name`,`pkkills` AS `kills` FROM `characters` WHERE `accesslevel` = 0 AND `pkkills` > 0 ORDER BY `pkkills` DESC LIMIT 10', 'topClans' => 'SELECT `clan_name` AS `char_name`,`reputation_score` AS `kills` FROM `clan_data` WHERE `accesslevel` = 0 AND `reputation_score` > 0 ORDER BY `reputation_score` DESC LIMIT 10' ]; Ну и дальше банальный while цикл на какой хочешь запрос, я просто сразу 3 сделал по обычному post запросу какой нужно меняем топ и все, а цикл всегда один будет. Сори я сказал полную... имел ввиду готовую)) Ты мне дал запрос в котором я вижу кучю не понятных символос... незнаю как применить это к моему коду (GPT) мне всего лишь нужны столбцы "char_name" и " chat_filter_count".... Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
Saltfire 89 Опубликовано 11 мая, 2023 В вашем случае - это примерно так: $pageTop = filter_input(INPUT_GET, 'top') ?: 'pvp'; // ?top=pvp $sqlsTops = [ 'pvp' => 'SELECT `char_name`,`pvpkills` AS `kills` FROM `characters` WHERE `accesslevel` = 0 AND `pvpkills` > 0 ORDER BY `pvpkills` DESC LIMIT 10', 'pk' => 'SELECT `char_name`,`pkkills` AS `kills` FROM `characters` WHERE `accesslevel` = 0 AND `pkkills` > 0 ORDER BY `pkkills` DESC LIMIT 10', 'clans' => 'SELECT `clan_name` AS `char_name`,`reputation_score` AS `kills` FROM `clan_data` WHERE `accesslevel` = 0 AND `reputation_score` > 0 ORDER BY `reputation_score` DESC LIMIT 10' ]; if(isset($sqlsTops[$pageTop])) { $result = $conn->query($sqlsTops[$pageTop]); if ($result->num_rows > 0) { while ($row = $result->fetch_assoc()) { var_dump($row['char_name'], $row['kills']); } } } Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
doloto 7 Опубликовано 12 мая, 2023 1 час назад, Saltfire сказал: В вашем случае - это примерно так: $pageTop = filter_input(INPUT_GET, 'top') ?: 'pvp'; // ?top=pvp $sqlsTops = [ 'pvp' => 'SELECT `char_name`,`pvpkills` AS `kills` FROM `characters` WHERE `accesslevel` = 0 AND `pvpkills` > 0 ORDER BY `pvpkills` DESC LIMIT 10', 'pk' => 'SELECT `char_name`,`pkkills` AS `kills` FROM `characters` WHERE `accesslevel` = 0 AND `pkkills` > 0 ORDER BY `pkkills` DESC LIMIT 10', 'clans' => 'SELECT `clan_name` AS `char_name`,`reputation_score` AS `kills` FROM `clan_data` WHERE `accesslevel` = 0 AND `reputation_score` > 0 ORDER BY `reputation_score` DESC LIMIT 10' ]; if(isset($sqlsTops[$pageTop])) { $result = $conn->query($sqlsTops[$pageTop]); if ($result->num_rows > 0) { while ($row = $result->fetch_assoc()) { var_dump($row['char_name'], $row['kills']); } } } если б вы мне дали готовый код всей страницы. Я вообще ноль в этом всем) Потому рад был неслыхано когда мне GPT выдал результат который я ему на пальцах обьяснил) Сам я не понимаю что делать с вашим кусочком кода) Если вм сложно. То не утруждайтесь с помощью. Решение GPT меня устраивает на 101 процент) Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
Saltfire 89 Опубликовано 12 мая, 2023 (изменено) 15 часов назад, doloto сказал: если б вы мне дали готовый код всей страницы. Я вообще ноль в этом всем) Потому рад был неслыхано когда мне GPT выдал результат который я ему на пальцах обьяснил) Сам я не понимаю что делать с вашим кусочком кода) Если вм сложно. То не утруждайтесь с помощью. Решение GPT меня устраивает на 101 процент) Ну да ладно, как говорится, хозяин Барин! Если нужно было не ТОП 10, а постраничная навигация (некий Пагинатор), то так и нужно было писать! Мне нужно вывод по страничный, а не ТОП 10 писать. Ко всему я бы использовал LIMIT :limit OFFSET :start, но опять-же, о чем тут можно писать, если вы все равно не понимаете ничего. И да, как вы думаете, BETWEEN 0 AND 999999, что если станет больше 999999 ? И Будет уже 2040503 например? Думаю догадаетесь. BETWEEN - на сколько помнится ищит между значениями столбика, не понимаю логику использования его в данном контексте, когда уже есть лимит. Изменено 12 мая, 2023 пользователем Saltfire 1 Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты