OOP Counter

This commit is contained in:
2024-07-12 12:12:31 +02:00
parent 6bb19ad6b0
commit 49a65d4d1a
28 changed files with 297 additions and 89 deletions
+180
View File
@@ -0,0 +1,180 @@
<?php
require_once dirname(__FILE__) . "/../../../../base/database.php";
class Counter
{
/*
* Private members
*/
private PDO $db;
private string $siteID;
/*
* Constructor
*/
public function __construct(string $siteID = null)
{
$this->db = DB::openConnection();
if (empty($siteID)) {
$this->siteID = substr($_SERVER["REQUEST_URI"], strlen($_SERVER["REQUEST_URI"]) - 256);
} else {
$this->siteID = $siteID;
}
}
/*
* Render Component
*/
public function render()
{
$this->cleanupIPs();
$hasVisited = $this->hasVisited();
if (!$hasVisited) {
$this->addHit();
$this->addIp();
}
$ret =
<<<EOT
<style>
.span-v3Yq3 {
display: inline-block;
padding: 6px 6px 4px;
border-radius: 3px;
background: #cccccc;
margin-right: -2px;
}
.center-v3Yq3 {
display: flex;
justify-content: center;
gap: 5px;
width: 50%;
margin: 20px auto;
}
.message-v3Yq3 {
color: #aaaaaa;
font-size: 12px;
text-align: center;
}
</style>
<div>
<div class="center-v3Yq3">
EOT;
foreach (mb_str_split(($this->getHits()) . "") as $digit) {
$ret .=
<<<EOT
<span class="span-v3Yq3">$digit</span>
EOT;
}
$ret .=
<<<EOT
</div>
<div class="center-v3Yq3 message-v3Yq3">
Have visited this site.
EOT;
if (!$hasVisited) {
$ret .=
<<<EOT
<br />
This is your first visit tody
EOT;
}
$ret .=
<<<EOT
</div>
</div>
EOT;
echo $ret;
}
/*
* Implementation
*/
private function getHits()
{
$query = "
SELECT
hits
FROM
Counter
WHERE
siteID LIKE :SID";
$stmt = $this->db->prepare($query);
$stmt->bindValue(":SID", $this->siteID);
$stmt->execute();
$hits = $stmt->fetch(PDO::FETCH_COLUMN);
return $hits !== false ? $hits : 0;
}
private function addHit()
{
$query = "
INSERT INTO
Counter(siteID, hits)
VALUES
(:SID, 1)
ON DUPLICATE KEY UPDATE
hits = hits + 1";
$stmt = $this->db->prepare($query);
$stmt->bindValue(":SID", $this->siteID);
$stmt->execute();
}
private function addIP()
{
$query = "
INSERT INTO
CounterIP(siteID, ip, timestamp)
VALUES
(:SID, :IP, NOW())";
$stmt = $this->db->prepare($query);
$stmt->bindValue(":SID", $this->siteID);
$stmt->bindValue(":IP", $_SERVER['REMOTE_ADDR']);
$stmt->execute();
}
private function cleanupIPs()
{
$query = "
DELETE FROM
CounterIP
WHERE
TIMESTAMPDIFF(MINUTE, timestamp, NOW()) > 1";
$stmt = $this->db->prepare($query);
$stmt->execute();
}
private function hasVisited()
{
$query = "
SELECT
COUNT(*)
FROM
CounterIP
WHERE
siteID = :SID
AND
ip = :IP
AND
TIMESTAMPDIFF(MINUTE, timestamp, NOW()) <= 1";
$stmt = $this->db->prepare($query);
$stmt->bindValue(":SID", $this->siteID);
$stmt->bindValue(":IP", $_SERVER['REMOTE_ADDR']);
$stmt->execute();
$cnt = $stmt->fetch(PDO::FETCH_COLUMN);
return $cnt > 0;
}
}
+21
View File
@@ -0,0 +1,21 @@
<!DOCTYPE html>
<html lang="en">
<head>
<?php require_once "../../../base/meta.php" ?>
<title>FieldValidator Test</title>
</head>
<body>
<?php
require_once "../../../base/settings.php";
require_once "../../../base/headers.php";
require_once "../../../base/autoloader.php";
Headers::html();
(new Counter())->render();
?>
</body>
</html>
+4 -4
View File
@@ -2,19 +2,19 @@
<html lang="en">
<head>
<?php include_once "../../../base/meta.php" ?>
<?php require_once "../../../base/meta.php" ?>
<title>FieldValidator Test</title>
</head>
<body>
<?php
include_once "../../../base/settings.php";
include_once "../../../base/headers.php";
require_once "../../../base/settings.php";
require_once "../../../base/headers.php";
Headers::html();
//Testdatei für die Klasse FieldValidator
include_once "../classes/fieldValidator/fieldValidator.php";
require_once "../classes/fieldValidator/fieldValidator.php";
$validators = [
FieldValidator::create("Empty Valid", "", "string"),
+5 -5
View File
@@ -2,20 +2,20 @@
<html lang="en">
<head>
<?php include_once "../../../base/meta.php" ?>
<?php require_once "../../../base/meta.php" ?>
<title>FormValidator Test</title>
</head>
<body>
<?php
include_once "../../../base/settings.php";
include_once "../../../base/headers.php";
require_once "../../../base/settings.php";
require_once "../../../base/headers.php";
Headers::html();
//Testdatei für die Klasse FormValidator
include_once "../classes/fieldValidator/fieldValidator.php";
include_once "../classes/formValidator/formValidator.php";
require_once "../classes/fieldValidator/fieldValidator.php";
require_once "../classes/formValidator/formValidator.php";
$form = FormValidator::create(
FieldValidator::create("Empty Valid", "", "string"),
+4 -4
View File
@@ -2,19 +2,19 @@
<html lang="en">
<head>
<?php include_once "../../../base/meta.php" ?>
<?php require_once "../../../base/meta.php" ?>
<title>Person Test</title>
</head>
<body>
<?php
include_once "../../../base/settings.php";
include_once "../../../base/headers.php";
require_once "../../../base/settings.php";
require_once "../../../base/headers.php";
Headers::html();
//Testdatei für die Klasse Hyperlink
include_once "../classes/hyperlink/hyperlink.php";
require_once "../classes/hyperlink/hyperlink.php";
//Objektinstanzen
$link1 = new Hyperlink("https://www.google.de", "Google");
+4 -4
View File
@@ -2,18 +2,18 @@
<html lang="en">
<head>
<?php include_once "../../../base/meta.php" ?>
<?php require_once "../../../base/meta.php" ?>
<title>Person Test</title>
</head>
<body>
<?php
include_once "../../../base/settings.php";
include_once "../../../base/headers.php";
require_once "../../../base/settings.php";
require_once "../../../base/headers.php";
Headers::html();
include_once "../classes/person/person.php";
require_once "../classes/person/person.php";
$person = new Person("John Doe", 170, new DateTime("01-01-1970"));
echo $person;