<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>IT blog &#187; přihlášení uživatelé</title>
	<atom:link href="http://szj.cz/tag/prihlaseni-uzivatele/feed/" rel="self" type="application/rss+xml" />
	<link>http://szj.cz</link>
	<description>internet, linux, novinky, programování</description>
	<lastBuildDate>Sat, 12 Sep 2015 11:14:32 +0000</lastBuildDate>
	<language>cs-CZ</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=4.2.2</generator>
	<item>
		<title>Počet aktuálně přihlášených uživatelů v PHP</title>
		<link>http://szj.cz/pocet-aktualne-prihlasenych-uzivatelu-v-php/</link>
		<comments>http://szj.cz/pocet-aktualne-prihlasenych-uzivatelu-v-php/#comments</comments>
		<pubDate>Sat, 30 Jun 2012 13:42:25 +0000</pubDate>
		<dc:creator><![CDATA[fredomgc]]></dc:creator>
				<category><![CDATA[Programování]]></category>
		<category><![CDATA[MySQL]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[přihlášení uživatelé]]></category>

		<guid isPermaLink="false">http://szj.cz/?p=317</guid>
		<description><![CDATA[Nedávno jsem přemýšlel, jak vyřešit zobrazování počtu osob, které se na určitou stránku přihlásily do členské sekce. Mé první myšlenky směřovaly k ukládání záznamu do databáze. Pokud bych však vytvořil speciální sloupec například typu ENUM, kde bych ukládal dva stavy (PRIHLASEN, NEPRIHLASEN), dostal bych se záhy do problémů. Údaje bych totiž mohl měnit jen na [&#8230;]]]></description>
				<content:encoded><![CDATA[<p><a href="http://szj.cz/wp-content/uploads/2012/06/php.png"><img class="alignleft size-full wp-image-318" title="php" src="http://szj.cz/wp-content/uploads/2012/06/php.png" alt="PHP" width="128" height="128" /></a>Nedávno jsem přemýšlel, jak vyřešit zobrazování počtu osob, které se na určitou stránku přihlásily do členské sekce. Mé první myšlenky směřovaly k ukládání záznamu do databáze. Pokud bych však vytvořil speciální sloupec například typu <strong>ENUM</strong>, kde bych ukládal dva stavy (<strong>PRIHLASEN</strong>, <strong>NEPRIHLASEN</strong>), dostal bych se záhy do problémů. Údaje bych totiž mohl měnit jen na základě provedení vhodné činnosti ze strany uživatele. Lidé však pochopitelně nemusí vždy postupovat tak, jak zamýšlel programátor. Mluvím konkrétně o odhlášení ze systému. Pokud by někdo jednoduše stránku zavřel, nelze změnit stav na <strong>NEPRIHLASEN</strong> a počítadlo aktivních uživatelů postupně přestane zobrazovat reálná data. Na následujících řádcích vám proto představím mnohem lepší řešení, které se nastíněnou situací počítá.</p>
<h2>Úprava databáze</h2>
<p>Nejprve bude potřeba pozměnit lehce strukturu tabulky, která uchovává informace o uživatelích. Přidejte sloupec <strong>LastTimeSeen</strong> datového typu <strong>DATETIME</strong>.</p>
<h2>Poslední krok &#8211; PHP</h2>
<p>Nyní si napíšeme několik řádků kódu, které obstarají aktualizaci údaje v databázi. Uložíme si přitom aktuální datum i čas.</p>
<pre class="brush: php; title: ; notranslate">$sql = &quot;UPDATE uzivatele SET LastTimeSeen = NOW() WHERE id = &quot;.$_SESSION[&quot;id&quot;];

mysql_query($sql);</pre>
<p>S pomocí <strong>NOW()</strong> máme zajištěno aktuální časové razítko. Obměnu záznamu pochopitelně provedeme jen v případě konkrétního id.</p>
<p>Nyní již disponujeme všemi nezbytnostmi ke spočítání přihlášených uživatelů. Postačí nám přitom jediný dotaz, jehož výsledek jen vypíšeme:</p>
<p>SELECT COUNT(*) FROM uzivatele WHERE LastTimeSeen > DATE_SUB(NOW(), INTERVAL 5 MINUTE)</p>
<p>Pojďme se blíže zaměřit na klauzuli WHERE. Hledáme jen ty řádky, v nichž sloupec LastTimeSeen je větší než čas před pěti minutami. Právě <strong>DATE_SUB</strong> slouží k odečtení vybraného intervalu. V našem případě provádíme rozdíl aktuálního časového razítka <strong>NOW()</strong> od pěti minut (<strong>INTERVAL 5 MINUTE</strong>).</p>
<p>Názorný příklad bude patrně jasnější. V 14:00 nám <strong>DATE_SUB(NOW(), INTERVAL 5 MINUTE)</strong> vrátí např. 2012-06-27 <strong>13:55</strong>:24.</p>
<p>Agregační funkce <strong>COUNT</strong> poté spočítá vyhovující záznamy. Právě toto číslo představuje momentálně aktivní uživatele.</p>
]]></content:encoded>
			<wfw:commentRss>http://szj.cz/pocet-aktualne-prihlasenych-uzivatelu-v-php/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
	</channel>
</rss>
