Segédletek.hu

Segédletek weblap szerkesztéshez!
ingyen letöltés

| Mind | PHP | HTML | CSS | Java |
|Legújabbak |Legtöbbször olvasottak|

grafikus látogató számláló:

Sorozat - ingyen számláló scriptek:

Ebben a segédletben egy grafikus számlálót készítünk.

Adott a feladat: készítsünk grafikus számlálót php és mysql segítségével.
Több megoldás is van, én most a gifekkel történő behelyettesítés módszerét írom le.

Működő demó
Forrás fájlok egyben

Első lépésként gondoljuk végig, hogy mi kell egy ilyen programohoz!

-Kell hozzá egy adatbázis
-Kell hozzá 10 db gif kép (A forrás fájlok mellett ottvan)

Ha megvan a 10 kép, (legyen a neve 1-10.gif) akkor lehet gondolkodni az adatbázison. Nekünk 3 mezőre lesz szükségünk egy új táblában.
A 3 mező: id,ip,datum. Az id egy automatán növekvő sorszám, az ip a látogató ip címe, a datum pedig a dátum, amikor itt volt.(ki gondolná.. :) ). Ez a gyakorlatban így néz ki:

DROP TABLE IF EXISTS latogatok;
CREATE TABLE latogatok(
id INT NOT NULL PRIMARY KEY AUTO_INCREMENT,
ip VARCHAR(30),
datum DATETIME
);

Ezt mentsük install.sql névvel.
Most, hogy megvan az adatbázis, mehetünk tovább. Nyissunk egy új dokumentumot, legyen a neve index.php

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
  <title>Grafikus számláló</title>
  <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-2" />
</head>
<body>
<?php
/*Konfiguráció*/
$dbhost = "localhost";
$dbuser = "root";
$dbpass = "";
$dbname = "db_név";
/*Kapcsolódás*/
$connect = mysql_connect($dbhost,$dbuser,$dbpass);
mysql_select_db($dbname) OR die(mysql_error());

Ezzel kapcsolódunk a mysql - hez. Ez az index.php most a weboldal gyökerét jelképezi. A kapcsolódási adatokat meg lehet adni akár a config.php - ben is, és akkor include("config.php"); !

Magát a számlálót külön fájlba tesszük, hogy bármelyik oldalba be lehessen később includolni.
Nyissunk új dokumentumot:
counter.php

Mielőtt elkezdenénk írni, át kell gondolni, pontosan mit is kell tudnia. Ezek:
-Kérdezze le és írja ki az eddigi látogatókat
-Tárolja az aktuális látogató adatait
-Ha már van, akkor ne

A 3. pontot részletezném:
Olyan számlálót írunk, ami véd a csalás ellen. Egy valakit csak egyszer számol a program, akárhányszor frissít. Ez az ellenőrzés ip cím alapján működik. Azt, hogy mennyi idő múlva számolja újra azt az ip - t, azt be lehet állítani.

Tehát a counter.php:

<?php
$sql = "SELECT ip, ";
$sql.= "INTERVAL 1 HOUR + datum AS datum ";
$sql.= "FROM latogatok ";
$sql.= "WHERE (ip ='".getip()."')";
$sql.= " ORDER BY datum DESC ";
$sql.= "limit 0,1";
$query = mysql_query($sql) or die(mysql_error());
$rs = mysql_fetch_array($query);
$legkozelebbi_hozzaadas$rs['datum'];

(A segédletnek nem célja az sql parancsok ismertetése, akit érdekel, ezzel a segédlettel párhuzamosan jelennek meg segédletek mysql_alapfokon címmel.)

Ezzel a kóddal lekérdezzük az adatbázisból azt a sort, ahol az ip cím megegyezik az éppen aktuális látogató ip címével, és megnézzük, hogy mikor volt itt utoljára, és ehhez egy órát hozzáadunk. Ez lesz az, amikor legközelebb felvesszük az adott ip - t. Ez a dátum a $legkozelebbi_hozzaadas változóban lesz. Persze nem muszály pont egy órát beírni, ez változtatható.(INTERVAL X HOUR).
Bizonyára feltűnt, hogy használok egy getip() nevű függvényt. Ez egy saját függvény, úgy includolom be az index.php - be.
Akkor egészítsük ki az index.php - t, írjuk a végére:

include("getip.php");
include("counter.php");
?>
</body>
</html>

A getip.php a következő:
<?php
/**
 * A felhasználó ip címét kérdezi le.
 *
 * @return string
 * @package www.segedletek.hu
 * @author Bogdán Bence
 */

function getip(){
if (@getenv("HTTP_X_FORWARDED_FOR")){
  $ip = @getenv("HTTP_X_FORWARDED_FOR");
}
else{
  $ip = @getenv("REMOTE_ADDR");
}
if (strstr( $ip, "," ) ){
  $elvalaszto = ",";
  $ip = strtok ($ip, $elvalaszto);
}
return $ip;
}
?>
Ez egy egyszrű függvény, az aktuális ip címmel tér vissza.

Most térjünk vissza a counter.php-re
Most, hogy már megvan, hogy mikor tároljuk újra az adatokat, írjunk rá egy feltételt
if($legkozelebbi_hozzaadas <= date("Y-m-d H:i:s")){
  $sql ="INSERT INTO latogatok ";
  $sql.="(`id`,`ip`,`datum`) ";
  $sql.="VALUES ('','".getip()."',NOW())";
  $query = mysql_query($sql);
}

Ezzel a kis kóddal azt érjük el, hogy ha a mostani idő [ date("Y-m-d H:i:s") ] nem kisebb annál az időnél, amikor újra rögzítünk, akkor beszúrunk egy új sort az aktuális látogató adataival. Azért kell ez a date, mert mysql - ben is ilyen formát ad a DATETIME típus.
Most, hogy így tárolni is tudja már a program az adatokat, jelenítsük is meg azokat!

$sql = "SELECT COUNT(id) AS darab ";
$sql.="FROM latogatok";
$query = mysql_query($sql);
$rs = mysql_fetch_assoc($query);
$latogatoszam = $rs['darab'];

$latogatoszam = sprintf("%06s", $latogatoszam);
for ($i = 0; $i<strlen($latogatoszam);$i++)
{
  print "<img src='kepek/".$latogatoszam[$i].".gif' />";
}
?>

Ezzel lekérdezzük a $latogatoszam változóba az eddigi látogatók számát. Ez egy sima szám, mint "5" vagy "1234" Ezt át kell alakítanunk 6 számjegyűvé (lehet több is, kevesebb is)
$latogatoszam = sprintf("%06s", $latogatoszam);
Ezzel 0-kat teszünk az elejére, ilyen számokat kapunk: "000005", "001234" Most ezek alapján egy for ciklussal végigjárjuk a számot, és a megfelelő képet beillesztjük.

egy kis magyarázat:
ha van egy változónk:
$gyumolcs = "alma";
akkor azt egy tömbkét is felfoghatjuk:

$gyumolcs [0] =>a
$gyumolcs [1] =>l
$gyumolcs [2] =>m
$gyumolcs [3] =>a

Ha ezzel megvagyunk, már van is egy cslásvédelemmel ellátot fullos grafikus látogatószámlálónk!

A segédletben felhasznált php függvények:
include
mysql_connect
mysql_select_db
mysql_query
mysql_fetch_array
date
sprintf
strlen
getnev
strstr
strtok

Írta: requiem - 2006-10-22 22:53:28

* Nem vagy bejelentkezve!
* Nem töltheted le a segédlet forrását egyben!
* Nem szavazhatsz a segédletre!
* Nem írhatsz a segédlethez tartozó fórum témába!


tbence 2009-06-14 07:56:13
Az a demó nem ?ködik ... :S
matek 2008-05-06 09:49:01
"Persze nem muszály pont egy órát beírni, ez változtatható.(INTERVAL X HOUR)."
És hogy lehet pl. 30 percet beírni? Próbálkoztam már mindenhogy, (csak a helyes verzióval nem, de arra nem jövök rá). Köszönöm.
Vegye meg álmai otthonát
Csak válassza ki a tökéletes lakást, a többit bízza az Erstére!
www.erstebank.hu

Önnek is jár évi 72 000 forint
állami támogatás lakás-előtakarékosság esetén. Válassza a Fundamentát!
www.fundamenta.hu

Miért fizetne többet?
Akciós élelmiszer, műszaki cikk, gyümölcs, bútor. Nézzen be, megéri!
www.tesco.hu

10.000 €-t keresni havonta
Hogyan keressünk pénzt könnyedén? Kezdjen pénzt keresni még ma!
www.penzt-keresni.net

Toyota készletakció
Auris Optimis modellek 1 000 000 Ft árelőnnyel! Részletek
www.toyota.hu

Hirdessen itt