lkarch.org/tools/pacman/data/db-handler.php
Lucas Kent e39465ad2f Changes to be committed:
new file:   Files/flashplayer_32_sa.exe
	new file:   favicon.ico
	new file:   globe.gif
	new file:   imgs/download.png
	new file:   imgs/zuck.jpg
	new file:   index.html
	new file:   other.ico
	new file:   script.js
	new file:   site.webmanifest
	new file:   sitemap.html
	new file:   styles/backround.css
	new file:   styles/border.css
	new file:   styles/fonts/Titillium_Web/OFL.txt
	new file:   styles/fonts/Titillium_Web/TitilliumWeb-Black.ttf
	new file:   styles/fonts/Titillium_Web/TitilliumWeb-Bold.ttf
	new file:   styles/fonts/Titillium_Web/TitilliumWeb-BoldItalic.ttf
	new file:   styles/fonts/Titillium_Web/TitilliumWeb-ExtraLight.ttf
	new file:   styles/fonts/Titillium_Web/TitilliumWeb-ExtraLightItalic.ttf
	new file:   styles/fonts/Titillium_Web/TitilliumWeb-Italic.ttf
	new file:   styles/fonts/Titillium_Web/TitilliumWeb-Light.ttf
	new file:   styles/fonts/Titillium_Web/TitilliumWeb-LightItalic.ttf
	new file:   styles/fonts/Titillium_Web/TitilliumWeb-Regular.ttf
	new file:   styles/fonts/Titillium_Web/TitilliumWeb-SemiBold.ttf
	new file:   styles/fonts/Titillium_Web/TitilliumWeb-SemiBoldItalic.ttf
	new file:   styles/fonts/webfontkit-20221027-163353/generator_config.txt
	new file:   styles/fonts/webfontkit-20221027-163353/specimen_files/grid_12-825-55-15.css
	new file:   styles/fonts/webfontkit-20221027-163353/specimen_files/specimen_stylesheet.css
	new file:   styles/fonts/webfontkit-20221027-163353/stylesheet.css
	new file:   styles/fonts/webfontkit-20221027-163353/titilliumweb-extralight-demo.html
	new file:   styles/fonts/webfontkit-20221027-163353/titilliumweb-extralight-webfont.woff
	new file:   styles/fonts/webfontkit-20221027-163353/titilliumweb-extralight-webfont.woff2
	new file:   styles/fonts/webfontkit-20221027-165950/generator_config.txt
	new file:   styles/fonts/webfontkit-20221027-165950/specimen_files/grid_12-825-55-15.css
	new file:   styles/fonts/webfontkit-20221027-165950/specimen_files/specimen_stylesheet.css
	new file:   styles/fonts/webfontkit-20221027-165950/stylesheet.css
	new file:   styles/fonts/webfontkit-20221027-165950/titilliumweb-bold-demo.html
	new file:   styles/fonts/webfontkit-20221027-165950/titilliumweb-bold-webfont.woff
	new file:   styles/fonts/webfontkit-20221027-165950/titilliumweb-bold-webfont.woff2
	new file:   styles/style.css
	new file:   tools/2048/.gitignore
	new file:   tools/2048/.jshintrc
	new file:   tools/2048/CONTRIBUTING.md
	new file:   tools/2048/LICENSE.txt
	new file:   tools/2048/README.md
	new file:   tools/2048/Rakefile
	new file:   tools/2048/favicon.ico
	new file:   tools/2048/index.html
	new file:   tools/2048/js/animframe_polyfill.js
	new file:   tools/2048/js/application.js
	new file:   tools/2048/js/bind_polyfill.js
	new file:   tools/2048/js/classlist_polyfill.js
	new file:   tools/2048/js/game_manager.js
	new file:   tools/2048/js/grid.js
	new file:   tools/2048/js/html_actuator.js
	new file:   tools/2048/js/keyboard_input_manager.js
	new file:   tools/2048/js/local_storage_manager.js
	new file:   tools/2048/js/tile.js
    new file:   tools/2048/meta/apple-touch-icon.png
	new file:   tools/webretro/cores/neocd_libretro.js
	new file:   tools/webretro/cores/neocd_libretro.wasm
	new file:   tools/webretro/cores/nestopia_libretro.js
	new file:   tools/webretro/cores/nestopia_libretro.wasm
	new file:   tools/webretro/cores/o2em_libretro.js
	new file:   tools/webretro/cores/o2em_libretro.wasm
	new file:   tools/webretro/cores/opera_libretro.js
	new file:   tools/webretro/cores/opera_libretro.wasm
2022-11-02 08:40:01 -04:00

118 lines
3.3 KiB
PHP

<?php header('Content-Type: application/json');
/* IMPORTANT:
* change this to the main url of where you host the application, otherwise, every entry will be marked as a cheater
*/
$hostdomain = 'pacman.platzh1rsch.ch';
if (isset($_POST['action'])) {
switch ($_POST['action']) {
case 'get':
if(isset($_POST['page'])) {
echo getHighscore($_POST['page']);
} else {
echo getHighscore();
}
break;
case 'add':
if(isset($_POST['name']) || isset($_POST['score']) || isset($_POST['level']))
echo addHighscore($_POST['name'],$_POST['score'], $_POST['level']);
break;
case 'reset':
echo resetHighscore();
break;
}
} else if (isset($_GET['action'])) {
if ($_GET['action'] == 'get') {
if(isset($_GET['page'])) {
echo getHighscore($_GET['page']);
} else {
echo getHighscore();
}
}
} else echo "define action to call";
function getHighscore($page = 1) {
$db = new SQLite3('pacman.db');
createDataBase($db);
$results = $db->query('SELECT name, score FROM highscore WHERE cheater = 0 AND name != "" ORDER BY score DESC LIMIT 10 OFFSET ' . ($page-1)*10);
while ($row = $results->fetchArray()) {
$tmp["name"] = htmlspecialchars($row['name']);
$tmp["score"] = strval($row['score']);
$response[] = $tmp;
}
if (!isset($response) || is_null($response)) {
return "[]";
} else {
return json_encode($response);
}
}
function addHighscore($name, $score, $level) {
$db = new SQLite3('pacman.db');
$date = date('Y-m-d h:i:s', time());
createDataBase($db);
$ref = isset($_SERVER[ 'HTTP_REFERER']) ? $_SERVER[ 'HTTP_REFERER'] : "";
$ua = isset($_SERVER[ 'HTTP_USER_AGENT']) ? $_SERVER[ 'HTTP_USER_AGENT'] : "";
$remA = isset($_SERVER[ 'REMOTE_ADDR']) ? $_SERVER[ 'REMOTE_ADDR'] : "";
$remH = isset($_SERVER[ 'REMOTE_HOST']) ? $_SERVER[ 'REMOTE_HOST'] : "";
// some simple checks to avoid cheaters
$ref_assert = preg_match('/http(s)?:\/\/.*' . $hostdomain . '/', $ref) > 0;
$ua_assert = ($ua != "");
$cheater = 0;
if (!$ref_assert || !$ua_assert) {
$cheater = 1;
}
$maxlvlpoints_pills = 104 * 10;
$maxlvlpoints_powerpills = 4 * 50;
$maxlvlpoints_ghosts = 4 * 4 * 100;
// check if score is even possible
if ($level < 1) {
$cheater = 1;
} else if (($score / $level) > (1600 + 1240)) {
$cheater = 1;
}
$name_clean = htmlspecialchars($name);
$score_clean = htmlspecialchars($score);
$db->exec('INSERT INTO highscore (name, score, level, date, log_referer, log_user_agent, log_remote_addr, log_remote_host, cheater) '
. 'VALUES ("'
. $name . '", '
. $score . ', '
. $level . ', "'
. $date . '", "'
. $ref .'", "'
. $ua . '", "'
. $remA .'", "'
. $remH . '", "'
. $cheater
.'")'
);
$response['status'] = "success";
$response['level'] = $level;
$response['name'] = $name;
$response['score'] = $score;
$response['cheater'] = $cheater;
return json_encode($response);
}
function resetHighscore() {
$db = new SQLite3('pacman.db');
$date = date('Y-m-d h:i:s', time());
$db->exec('DROP TABLE IF EXISTS highscore');
createDataBase($db);
}
function createDataBase($db) {
$db->exec('CREATE TABLE IF NOT EXISTS highscore(name VARCHAR(60),score INT, level INT, date DATETIME, log_referer VARCHAR(200), log_user_agent VARCHAR(200), log_remote_addr VARCHAR(200), log_remote_host VARCHAR(200), cheater BOOLEAN)');
}
?>