HALLOWEEN JE TADY: Získej 66 % extra kreditů zdarma při nákupu od 1199 kreditů s promo kódem NEBOJSEIT66. Zjisti více:
NOVINKA: Začni v IT jako webmaster s komplexním akreditovaným online kurzem Tvůrce WWW stránek. Zjisti více:

Diskuze – Lekce 12 - Objektové počítadlo návštěv v PHP a PDO

Zpět

Upozorňujeme, že diskuze pod našimi online kurzy jsou nemoderované a primárně slouží k získávání zpětné vazby pro budoucí vylepšení kurzů. Pro studenty našich rekvalifikačních kurzů nabízíme možnost přímého kontaktu s lektory a studijním referentem pro osobní konzultace a podporu v rámci jejich studia. Toto je exkluzivní služba, která zajišťuje kvalitní a cílenou pomoc v případě jakýchkoli dotazů nebo projektů.

Komentáře
Avatar
Pavel Bališ
Člen
Avatar
Pavel Bališ:22.8.2023 19:28

Já si teda nejsem jistý, ale zatím jsem se v kurzu nesetkal s lekcí na PHP MyAdmin, natož s vytvořením tabulky v databázi.
Jestli budou další lekce navazovat na tuto tak jsem úplně mimo.

 
Odpovědět
22.8.2023 19:28
Avatar
Radim Štross
Tvůrce
Avatar
Radim Štross:6.10.2023 10:28

Ahoj všem, děkujeme za zpětnou vazbu k lekci. Vaše podněty jsem předal ke zpracování.

 
Odpovědět
6.10.2023 10:28
Avatar
Tomáš Rozkydal:4.11.2023 17:49

... pochopení problematiky pouze z textu a obrázků zdrojového kódu je asi možné ale určitě by pomohla i nějaká schémata vazeb mezi jednotlivými objekty s popisem metod, podmínek apod.

 
Odpovědět
4.11.2023 17:49
Avatar
Kevin Král
Člen
Avatar
Kevin Král:6.2.2024 10:18

nikde v seriálu nebyly doposud databáze vůbec vysvětleny a najednou je požadováno jejich použití bez jakéhokoliv vysvětlení. Tento článek byl pro mě absolutně bezhodnotný a jediné co mi přinesl je zmatení a demotivace

 
Odpovědět
6.2.2024 10:18
Avatar
Jan Drahota
Člen
Avatar
Jan Drahota:26.6.2024 21:46

Jedete strašně rychle dopředu bez pořádnýho vysvětlení.

 
Odpovědět
26.6.2024 21:46
Avatar
Odpovídá na Pavel Bališ
Tomas Friedrich:25.7.2024 17:02

mě asi už jebne...

 
Odpovědět
25.7.2024 17:02
Avatar
Tomas Friedrich:25.7.2024 17:19

PhpMyAdmin vidím poprvé v životě a mám v něm něco vytvářet...tak určitě -.- z komentářů (z roku 2021) v diskuzi vidím že nejsem jediný s tímto problémem...

 
Odpovědět
25.7.2024 17:19
Avatar
Radim Jankovský:25. dubna 20:07

Vysvětlení za mě absolutně nedostatečné. Mám pracovat s databází, kterou ale vidím jen jako screen obrazovky? Bez žádného popisu? Jak to mám nastavit? A bude se s tím i dál pokračovat? Protože pokud ano, tak nemůžu nic dělat. Podle mě je tahle lekce hodně špatná.

 
Odpovědět
25. dubna 20:07
Avatar
Tano7
Člen
Avatar
Tano7:30. srpna 5:52

Jednoduchý, rychlý a plně funkční návod pro zobrazení na webu online uživatelů, otestováno, zprovozněno za 10 minut.

MySQL

CREATE TABLE online_users (
  session_id CHAR(128) NOT NULL PRIMARY KEY,
  last_activity INT(11) NOT NULL
);

online_users.php

<?php
session_start();

// 1. Database connection (Production-ready)
$host = "localhost";      // Database host
$user = "root";           // Database user
$pass = "password";       // Database password
$dbname = "test";         // Database name

$conn = new mysqli($host, $user, $pass, $dbname);
if ($conn->connect_error) {
    die("Database connection failed: " . $conn->connect_error);
}

// 2. Configurable session timeout (in seconds)
$timeout = 300; // 5 minutes

// 3. Get current session ID and timestamp
$session_id = session_id();
$current_time = time();
$expire_time = $current_time - $timeout;

// 4. Insert or update current session
$stmt = $conn->prepare("INSERT INTO online_users (session_id, last_activity)
                        VALUES (?, ?)
                        ON DUPLICATE KEY UPDATE last_activity = ?");
$stmt->bind_param("sii", $session_id, $current_time, $current_time);
$stmt->execute();

// 5. Delete old sessions (inactive users)
$stmt = $conn->prepare("DELETE FROM online_users WHERE last_activity < ?");
$stmt->bind_param("i", $expire_time);
$stmt->execute();

// 6. Count online users
$result = $conn->query("SELECT COUNT(*) AS total_online FROM online_users");
$row = $result->fetch_assoc();
$total_online = $row['total_online'];

// 7. Display result on frontend
echo "<div class='highlight'><b>Users Online: </b>" . $total_online . "</div>";

$conn->close();
?>

Uveď, kde chceš zobrazit počítadlo:

<?php include_once 'online_users.php'; ?>

1. Sezení
Každý návštěvník obdrží jedinečné ID relace . Toto ID používáme ke sledování, zda je uživatel online nebo zda již web navštívil.

2. Aktualizace poslední aktivity
Pokaždé, když uživatel načte stránku, aktualizujeme jeho last_activityčasové razítko. Pokud již uživatel v tabulce je, aktualizujeme pouze čas.

3. Odebrání neaktivních uživatelů
Definujeme časový limit (například 5 minut). Pokud je uživatel neaktivní déle, odstraníme jeho relaci z tabulky.

4. Počítání online uživatelů
COUNT(*)Pro získání celkového počtu online uživatelů stačí spustit jednoduchý dotaz v naší tabulce.

Krok 5: Scénáře z reálného světa
✅ Pokud webovou stránku otevřou 2 uživatelé současně, oba se zobrazí jako online.
✅ Pokud uživatel zavře prohlížeč, bude po uplynutí časového limitu (např. 5 minut) odstraněn.
✅ Pokud uživatel obnoví stránku, automaticky se aktualizuje čas jeho poslední aktivity.

Zabezpečení a osvědčené postupy
✅ Připravené příkazy se používají k prevenci SQL injection.
✅ ID relací jsou jedinečná a bezpečně uložená, žádné osobní údaje se neukládají.
✅ Pro rychlejší výkon se místo COUNT(*) používá .SELECT *
✅ Hodnota časového limitu je konfigurovatelná , takže si můžete nastavit 1 minutu, 10 minut atd.

Škálování pro webové stránky s vysokou návštěvností
Pro velmi rušné webové stránky s tisíci uživatelů:

Používejte InnoDB se správným indexováním na session_ida last_activity.
Snižte DELETE frekvenci pomocí úlohy cron, která každých pár minut vymaže staré relace.
Ukládejte počet online uživatelů do mezipaměti pomocí Redis nebo Memcached, abyste snížili zatížení databáze.

Závěr
S tímto skriptem nyní máte bezpečný a produkční online počítadlo uživatelů v PHP a MySQL. Snadno zvládne malé webové stránky a s několika optimalizacemi jej lze škálovat i pro větší návštěvnost.

Odpovědět
30. srpna 5:52
Život by byl mnohem snazší, kdybychom k němu měli zdrojový kód.
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 9 zpráv z 39.