Mysql
 sql >> база данни >  >> RDS >> Mysql

Как да преброя уникалните посетители на моя сайт?

Ето един хубав урок, това е, от което се нуждаете. (Източник: coursesweb.net/php-mysql )

Регистрирайте и покажете онлайн потребители и посетители

Пребройте онлайн потребители и посетители с помощта на MySQL таблица

В този урок можете да научите как да се регистрирате, да броите и да показвате на вашата уеб страница броя онлайн потребители и посетители. Принципът е следният:всеки потребител/посетител се регистрира в текстов файл или база данни. Всеки път, когато се осъществи достъп до страница от уебсайта, php скриптът изтрива всички записи, по-стари от определено време (напр. 2 минути), добавя текущия потребител/посетител и взема броя на записите, останали за показване.

Можете да съхранявате онлайн потребителите и посетителите във файл на сървъра или в MySQL таблица. В този случай смятам, че използването на текстов файл за добавяне и четене на записите е по-бързо от съхраняването им в MySQL таблица, което изисква още заявки.

Първо е представен методът със запис в текстов файл на сървъра, а след това методът с MySQL таблица.

За да изтеглите файловете със скриптовете, представени в този урок, щракнете -> Брой онлайн Потребители и посетители .

• И двата скрипта могат да бъдат включени в ".php" файлове include() ) , или в „ .html" файлове <script> ) , както можете да видите в примерите, представени в долната част на тази страница; но сървърът трябва да изпълнява PHP.

Съхранение на онлайн потребители и посетители в текстов файл

За да добавите записи във файл на сървъра с PHP, трябва да зададете разрешения CHMOD 0766 (или CHMOD 0777) към този файл, така че PHP да може да записва данни в него.

  1. Създайте текстов файл на вашия сървър (например с име userson.txt ) и му дайте CHMOD 0777 разрешения (във вашето FTP приложение щракнете с десния бутон върху този файл, изберете Properties, след това изберете Read , Write и Execute опции).
  2. Създайте PHP файл (с име usersontxt.php ) като имате кода по-долу, след което копирайте този php файл в същата директория като userson.txt .

Кодът за usersontxt.php ;

<?php
// Script Online Users and Visitors - http://coursesweb.net/php-mysql/
if(!isset($_SESSION)) session_start();        // start Session, if not already started

$filetxt = 'userson.txt';  // the file in which the online users /visitors are stored
$timeon = 120;             // number of secconds to keep a user online
$sep = '^^';               // characters used to separate the user name and date-time
$vst_id = '-vst-';        // an identifier to know that it is a visitor, not logged user

/*
 If you have an user registration script,
 replace $_SESSION['nume'] with the variable in which the user name is stored.
 You can get a free registration script from:  http://coursesweb.net/php-mysql/register-login-script-users-online_s2
*/

// get the user name if it is logged, or the visitors IP (and add the identifier)

    $uvon = isset($_SESSION['nume']) ? $_SESSION['nume'] : $_SERVER['SERVER_ADDR']. $vst_id;

$rgxvst = '/^([0-9\.]*)'. $vst_id. '/i';         // regexp to recognize the line with visitors
$nrvst = 0;                                       // to store the number of visitors

// sets the row with the current user /visitor that must be added in $filetxt (and current timestamp)

    $addrow[] = $uvon. $sep. time();

// check if the file from $filetxt exists and is writable

    if(is_writable($filetxt)) {
      // get into an array the lines added in $filetxt
      $ar_rows = file($filetxt, FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES);
      $nrrows = count($ar_rows);

            // number of rows

  // if there is at least one line, parse the $ar_rows array

      if($nrrows>0) {
        for($i=0; $i<$nrrows; $i++) {
          // get each line and separate the user /visitor and the timestamp
          $ar_line = explode($sep, $ar_rows[$i]);
      // add in $addrow array the records in last $timeon seconds
          if($ar_line[0]!=$uvon && (intval($ar_line[1])+$timeon)>=time()) {
            $addrow[] = $ar_rows[$i];
          }
        }
      }
    }

$nruvon = count($addrow);                   // total online
$usron = '';                                    // to store the name of logged users
// traverse $addrow to get the number of visitors and users
for($i=0; $i<$nruvon; $i++) {
 if(preg_match($rgxvst, $addrow[$i])) $nrvst++;       // increment the visitors
 else {
   // gets and stores the user's name
   $ar_usron = explode($sep, $addrow[$i]);
   $usron .= '<br/> - <i>'. $ar_usron[0]. '</i>';
 }
}
$nrusr = $nruvon - $nrvst;              // gets the users (total - visitors)

// the HTML code with data to be displayed
$reout = '<div id="uvon"><h4>Online: '. $nruvon. '</h4>Visitors: '. $nrvst. '<br/>Users: '. $nrusr. $usron. '</div>';

// write data in $filetxt
if(!file_put_contents($filetxt, implode("\n", $addrow))) $reout = 'Error: Recording file not exists, or is not writable';

// if access from <script>, with GET 'uvon=showon', adds the string to return into a JS statement
// in this way the script can also be included in .html files
if(isset($_GET['uvon']) && $_GET['uvon']=='showon') $reout = "document.write('$reout');";

echo $reout;             // output /display the result
?>
  1. Ако искате да включите скрипта по-горе във файл „.php“, добавете следния код на мястото, където искате да покажете броя на онлайн потребителите и посетителите:

4. За да покажете броя на онлайн посетителите/потребителите във файл „.html“, използвайте този код:

<script type="text/javascript" src="usersontxt.php?uvon=showon"></script>

Този скрипт (и другият, представен по-долу) работи с $_SESSION. В началото на PHP файла, в който го използвате, трябва да добавите:session_start();.Брой онлайн потребители и посетители, използващи MySQL таблица

За да регистрирате, преброите и покажете броя на онлайн посетителите и потребителите в MySQL таблица, изисквайте да изпълните три SQL заявки:Изтрийте записите, по-стари от определено време. Вмъкнете ред с новия потребител/посетител или, ако вече е вмъкнато, Актуализирайте клеймото за време в неговата колона. Изберете останалите редове. Ето кода за скрипт, който използва MySQL таблица (наречена „userson“) за съхраняване и показване на онлайн потребители и посетители.

  1. Първо създаваме таблицата „userson“ с 2 колони (uvon, dt). В колоната "uvon" се съхранява името на потребителя (ако е влязъл) или IP на посетителя. В колоната „dt“ се съхранява число с клеймото за време (Unix време), когато страницата е достъпна.
  • Добавете следния код в php файл (например с име "create_userson.php"):

Кодът за create_userson.php :

<?php
header('Content-type: text/html; charset=utf-8');

// HERE add your data for connecting to MySQ database
$host = 'localhost';           // MySQL server address
$user = 'root';                // User name
$pass = 'password';            // User`s password
$dbname = 'database';          // Database name

// connect to the MySQL server
$conn = new mysqli($host, $user, $pass, $dbname);

// check connection
if (mysqli_connect_errno()) exit('Connect failed: '. mysqli_connect_error());

// sql query for CREATE "userson" TABLE
$sql = "CREATE TABLE `userson` (
 `uvon` VARCHAR(32) PRIMARY KEY,
 `dt` INT(10) UNSIGNED NOT NULL
 ) CHARACTER SET utf8 COLLATE utf8_general_ci"; 

// Performs the $sql query on the server to create the table
if ($conn->query($sql) === TRUE) echo 'Table "userson" successfully created';
else echo 'Error: '. $conn->error;

$conn->close();
?>
  1. Сега създаваме скрипта, който вмъква, изтрива и избира данни в userson таблица (За обяснения относно кода вижте коментарите в скрипта).
  • Добавете кода по-долу в друг php файл (с име usersmysql.php ):И в двата файла трябва да добавите вашите лични данни за свързване към базата данни MySQL, в променливите:$host , $user , $pass и $dbname .

Кодът за usersmysql.php:

<?php
// Script Online Users and Visitors - coursesweb.net/php-mysql/
if(!isset($_SESSION)) session_start();         // start Session, if not already started

// HERE add your data for connecting to MySQ database
$host = 'localhost';           // MySQL server address
$user = 'root';                // User name
$pass = 'password';            // User`s password
$dbname = 'database';          // Database name

/*
 If you have an user registration script,
 replace $_SESSION['nume'] with the variable in which the user name is stored.
 You can get a free registration script from:  http://coursesweb.net/php-mysql/register-login-script-users-online_s2
*/

// get the user name if it is logged, or the visitors IP (and add the identifier)
$vst_id = '-vst-';         // an identifier to know that it is a visitor, not logged user
$uvon = isset($_SESSION['nume']) ? $_SESSION['nume'] : $_SERVER['SERVER_ADDR']. $vst_id;

$rgxvst = '/^([0-9\.]*)'. $vst_id. '/i';         // regexp to recognize the rows with visitors
$dt = time();                                    // current timestamp
$timeon = 120;             // number of secconds to keep a user online
$nrvst = 0;                                     // to store the number of visitors
$nrusr = 0;                                     // to store the number of usersrs
$usron = '';                                    // to store the name of logged users

// connect to the MySQL server
$conn = new mysqli($host, $user, $pass, $dbname);

// Define and execute the Delete, Insert/Update, and Select queries
$sqldel = "DELETE FROM `userson` WHERE `dt`<". ($dt - $timeon);
$sqliu = "INSERT INTO `userson` (`uvon`, `dt`) VALUES ('$uvon', $dt) ON DUPLICATE KEY UPDATE `dt`=$dt";
$sqlsel = "SELECT * FROM `userson`";

// Execute each query
if(!$conn->query($sqldel)) echo 'Error: '. $conn->error;
if(!$conn->query($sqliu)) echo 'Error: '. $conn->error;
$result = $conn->query($sqlsel);

// if the $result contains at least one row
if ($result->num_rows > 0) {
  // traverse the sets of results and set the number of online visitors and users ($nrvst, $nrusr)
  while($row = $result->fetch_assoc()) {
    if(preg_match($rgxvst, $row['uvon'])) $nrvst++;       // increment the visitors
    else {
      $nrusr++;                   // increment the users
      $usron .= '<br/> - <i>'.$row['uvon']. '</i>';          // stores the user's name
    }
  }
}

$conn->close();                  // close the MySQL connection

// the HTML code with data to be displayed
$reout = '<div id="uvon"><h4>Online: '. ($nrusr+$nrvst). '</h4>Visitors: '. $nrvst. '<br/>Users: '. $nrusr. $usron. '</div>';

// if access from <script>, with GET 'uvon=showon', adds the string to return into a JS statement
// in this way the script can also be included in .html files
if(isset($_GET['uvon']) && $_GET['uvon']=='showon') $reout = "document.write('$reout');";

echo $reout;             // output /display the result
?>
  1. След като сте създали тези два php файла на вашия сървър, стартирайте "create_userson.php" във вашия браузър, за да създадете таблицата "userson".

  2. Включете usersmysql.php файл в php файла, в който искате да покажете броя на онлайн потребителите и посетителите.

  3. Или, ако искате да го вмъкнете във файл ".html", добавете този код:

Примери за използване на тези скриптове

• Включване на "usersontxt.php` в php файл:

Брояч на онлайн потребители и посетители

• Включване на "usersmysql.php" в html файл:

<!doctype html>
<html>
<head>
 <meta charset="utf-8" />
 <title>Counter Online Users and Visitors</title>
 <meta name="description" content="PHP script to count and show the number of online users and visitors" />
 <meta name="keywords" content="online users, online visitors" />
</head>
<body>

<!-- Includes the script ("usersontxt.php", or "usersmysql.php") -->
<script type="text/javascript" src="usersmysql.php?uvon=showon"></script>

</body>
</html>

И двата скрипта (със съхраняване на данни в текстов файл на сървъра или в MySQL таблица) ще покажат резултат като този:Онлайн:5

Посетители:3Потребители:2

  • MarPlo
  • Мариус


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. python odo sql AssertionError:формата на данните трябва да е тип запис, има 0 * {...}

  2. PHP:mysql_connect не връща FALSE

  3. Сортиране на множество полета в MySQL

  4. Как да групирам поле за дата, за да получа тримесечни резултати в MySQL?

  5. Просто въведение в използването на MySQL на терминала на Linux