I am going through practice, they gave me a task to make a statistics counter (the simplest one). I did it, now I was asked to do it so that they would show the total amount of "views" for a certain period of time (in this case for a year). I have been sitting and puzzling over it for 4 days, although the solution is probably easier than the easiest one, but I can’t kill it. Help me please. Here is the table structure.
Here is the code for the two main files (just in case)
<?php include '../inc/db.php'; ?> <html> <head> <meta charset = "utf-8" /> <body> <style> body { background-color: #F9F2E3; } h2 { background-color: rgb(214,86,43); color: rgba(255,255,255,.9); padding: 10px; } p { color: green; } div { background-color: hsl(60,100%,25%); color: hsla(120,100%,50%,0.1); } </style> </head> </body> </html> <h2>Статистика</h2> <p><a href="?interval=1">За сегодня</a></p> <p><a href="?interval=7">За последнюю неделю</a></p> <p><a href="?interval=30">За послединий месяц</a></p> <p><a href="?interval=183">За последнюю пол года</a></p> <p><a href="?interval=365">За последний год</a></p> <table style="border: 1px solid silver;"> <tr> <td style="border: 1px solid silver;">Дата</td> <td style="border: 1px solid silver;">Уникальных посетителей</td> <td style="border: 1px solid silver;">Просмотров</td> </tr> <?php // Если в массиве GET есть элемент interval (т.е. был клик по одной из ссылок выше) if ($_GET['interval']) { $interval = $_GET['interval']; // Если в качестве параметра передано не число if (!is_numeric ($interval)) { echo '<p><b>Недопустимый параметр!</b></p>'; } // Указываем кодировку, в которой будет получена информация из базы @mysqli_query ($db, 'set character_set_results = "utf8"'); // Получаем из базы данные, отсортировав их по дате в обратном порядке в количестве interval штук $res = mysqli_query($db, "SELECT * FROM `visits` ORDER BY `date` DESC LIMIT $interval"); // Формируем вывод строк таблицы в цикле while ($row = mysqli_fetch_assoc($res)) { echo '<tr> <td style="border: 1px solid silver;">' . $row['date'] . '</td> <td style="border: 1px solid silver;">' . $row['hosts'] . '</td> <td style="border: 1px solid silver;">' . $row['views'] . '</td> </tr>'; } } ?> <div>.</div> </table> <?php include 'db.php'; // Указываем кодировку, в которой будет получена информация из базы @mysqli_query ($db, 'set character_set_results = "utf8"'); // Получаем IP-адрес посетителя и сохраняем текущую дату $visitor_ip = $_SERVER['REMOTE_ADDR']; $date = date("Ymd"); // Узнаем, были ли посещения за сегодня $res = mysqli_query($db, "SELECT `visit_id` FROM `visits` WHERE `date`='$date'") or die ("Проблема при подключении к БД"); // Если сегодня еще не было посещений if (mysqli_num_rows($res) == 0) { // Очищаем таблицу ips mysqli_query($db, "DELETE FROM `ips`"); // Заносим в базу IP-адрес текущего посетителя mysqli_query($db, "INSERT INTO `ips` SET `ip_address`='$visitor_ip'"); // Заносим в базу дату посещения и устанавливаем кол-во просмотров и уник. посещений в значение 1 $res_count = mysqli_query($db, "INSERT INTO `visits` SET `date`='$date', `hosts`=1,`views`=1"); } // Если посещения сегодня уже были else { // Проверяем, есть ли уже в базе IP-адрес, с которого происходит обращение $current_ip = mysqli_query($db, "SELECT `ip_id` FROM `ips` WHERE `ip_address`='$visitor_ip'"); // Если такой IP-адрес уже сегодня был (т.е. это не уникальный посетитель) if (mysqli_num_rows($current_ip) == 1) { // Добавляем для текущей даты +1 просмотр (хит) mysqli_query($db, "UPDATE `visits` SET `views`=`views`+1 WHERE `date`='$date'"); } // Если сегодня такого IP-адреса еще не было (т.е. это уникальный посетитель) else { // Заносим в базу IP-адрес этого посетителя mysqli_query($db, "INSERT INTO `ips` SET `ip_address`='$visitor_ip'"); // Добавляем в базу +1 уникального посетителя (хост) и +1 просмотр (хит) mysqli_query($db, "UPDATE `visits` SET `hosts`=`hosts`+1,`views`=`views`+1 WHERE `date`='$date'"); } }