View file statisticsurl.php

File size: 12.27Kb
<?php
include "connection/connection.php";
if (!isset($_SESSION['id'])) {
    // Redirigir al usuario a la página de inicio de sesión
    header("Location: login.php");
    exit(); // Detener la ejecución del script
}
// Verifica si se pasó el parámetro 'id'
if (isset($_GET['id'])) {
    $short_id = $conn->real_escape_string($_GET['id']);

    // Consulta para verificar si el enlace existe
    $sql = "SELECT original_url, created_at FROM urls WHERE short_id = '$short_id'";
    $result = $conn->query($sql);

    if ($result && $result->num_rows > 0) {
        $link = $result->fetch_assoc();

        // Total de clics
        $total_clicks_sql = "SELECT COUNT(*) AS total_clicks FROM visits WHERE short_id = '$short_id'";
        $total_clicks = $conn->query($total_clicks_sql)->fetch_assoc()['total_clicks'];

        // Clics del día
        $today = date('Y-m-d');
        $daily_clicks_sql = "SELECT COUNT(*) AS daily_clicks FROM visits WHERE short_id = '$short_id' AND DATE(visit_time) = '$today'";
        $daily_clicks = $conn->query($daily_clicks_sql)->fetch_assoc()['daily_clicks'];

        // Clics del mes
        $current_month = date('Y-m');
        $monthly_clicks_sql = "SELECT COUNT(*) AS monthly_clicks FROM visits WHERE short_id = '$short_id' AND DATE_FORMAT(visit_time, '%Y-%m') = '$current_month'";
        $monthly_clicks = $conn->query($monthly_clicks_sql)->fetch_assoc()['monthly_clicks'];

        // Mes con más visitas
        $most_active_month_sql = "
            SELECT DATE_FORMAT(visit_time, '%Y-%m') AS month, COUNT(*) AS visits
            FROM visits
            WHERE short_id = '$short_id'
            GROUP BY month
            ORDER BY visits DESC
            LIMIT 1";
        $most_active_month_result = $conn->query($most_active_month_sql);
        $most_active_month = $most_active_month_result->fetch_assoc();

        // Visitas por país
        $country_visits_sql = "
            SELECT country, COUNT(*) AS visits
            FROM visits
            WHERE short_id = '$short_id'
            GROUP BY country
            ORDER BY visits DESC";
        $country_visits = $conn->query($country_visits_sql);

        // Últimas visitas con referrer
        $latest_visits_sql = "
            SELECT ip_address, country, visit_time, referrer
            FROM visits
            WHERE short_id = '$short_id'
            ORDER BY visit_time DESC
            LIMIT 10";
        $latest_visits = $conn->query($latest_visits_sql);
    } else {
        die("El enlace no existe.");
    }
} else {
    die("No se proporcionó un ID válido.");
}
?>
<!DOCTYPE html>
<html lang="en">

<head>
  <meta charset="utf-8" />
  <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
  <link rel="apple-touch-icon" sizes="76x76" href="../assets/img/apple-icon.png">
  <link rel="icon" type="image/png" href="../assets/img/favicon.png">
  <title>
    Statistics - Link Shortener
  </title>
    <link href="https://stackpath.bootstrapcdn.com/bootstrap/4.5.2/css/bootstrap.min.css" rel="stylesheet">
  <!--     Fonts and icons     -->
  <link href="https://fonts.googleapis.com/css?family=Open+Sans:300,400,600,700" rel="stylesheet" />
  <!-- Nucleo Icons -->
  <link href="https://demos.creative-tim.com/argon-dashboard-pro/assets/css/nucleo-icons.css" rel="stylesheet" />
  <link href="https://demos.creative-tim.com/argon-dashboard-pro/assets/css/nucleo-svg.css" rel="stylesheet" />
  <!-- Font Awesome Icons -->
  <script src="https://kit.fontawesome.com/42d5adcbca.js" crossorigin="anonymous"></script>
  <!-- CSS Files -->
  <link id="pagestyle" href="css/assets/css/argon-dashboard.css?v=2.1.0" rel="stylesheet" />
</head>

<body class="g-sidenav-show   bg-gray-100">
<?php include "inc/menu.php" ?>
  <main class="main-content position-relative border-radius-lg ">
    <!-- Navbar -->
    <nav class="navbar navbar-main navbar-expand-lg px-0 mx-4 shadow-none border-radius-xl " id="navbarBlur" data-scroll="false">
      <div class="container-fluid py-1 px-3">
        <nav aria-label="breadcrumb">
          <ol class="breadcrumb bg-transparent mb-0 pb-0 pt-1 px-0 me-sm-6 me-5">
            <li class="breadcrumb-item text-sm"><a class="opacity-5 text-white" href="statistics.php">Pages</a></li>
            <li class="breadcrumb-item text-sm text-white active" aria-current="page">statistics</li>
          </ol>
          <h6 class="font-weight-bolder text-white mb-0">statistics</h6>
        </nav>
   
                      </div>
                    </div>
                  </a>
                </li>
              </ul>
            </li>
          </ul>
        </div>
      </div>
    </nav>
    <!-- End Navbar -->
      <div class="container-fluid py-4">
      <div class="row">
        <div class="col-xl-3 col-sm-6 mb-xl-0 mb-4">
          <div class="card">
            <div class="card-body p-3">
              <div class="row">
                <div class="col-8">
                  <div class="numbers">
                    <p class="text-sm mb-0 text-uppercase font-weight-bold">Clicks today</p>
                    <h5 class="font-weight-bolder">
                      <?= $daily_clicks ?> clicks
                    </h5> 
                    <p class="mb-0">
                  
                    </p>
                  </div>
                </div>
                <div class="col-4 text-end">
                  <div class="icon icon-shape bg-gradient-primary shadow-primary text-center rounded-circle">
                    <i class="ni ni-money-coins text-lg opacity-10" aria-hidden="true"></i>
                  </div>
                </div>
              </div>
            </div>
          </div>
        </div>
        <div class="col-xl-3 col-sm-6 mb-xl-0 mb-4">
          <div class="card">
            <div class="card-body p-3">
              <div class="row">
                <div class="col-8">
                  <div class="numbers">
                    <p class="text-sm mb-0 text-uppercase font-weight-bold">
					Clicks this month</p>
                    <h5 class="font-weight-bolder">
                     <?= $monthly_clicks ?> clicks
                    </h5>
                  
                  </div>
                </div>
                <div class="col-4 text-end">
                  <div class="icon icon-shape bg-gradient-danger shadow-danger text-center rounded-circle">
                    <i class="ni ni-world text-lg opacity-10" aria-hidden="true"></i>
                  </div>
                </div>
              </div>
            </div>
          </div>
        </div>
        <div class="col-xl-3 col-sm-6 mb-xl-0 mb-4">
          <div class="card">
            <div class="card-body p-3">
              <div class="row">
                <div class="col-8">
                  <div class="numbers">
                    <p class="text-sm mb-0 text-uppercase font-weight-bold">Total clicks</p>
                    <h5 class="font-weight-bolder">
                      <?= $total_clicks ?> clicks
                    </h5>
      
                  </div>
                </div>
                <div class="col-4 text-end">
                  <div class="icon icon-shape bg-gradient-success shadow-success text-center rounded-circle">
                    <i class="ni ni-paper-diploma text-lg opacity-10" aria-hidden="true"></i>
                  </div>
                </div>
              </div>
            </div>
          </div>
        </div>
        <div class="col-xl-3 col-sm-6">
          <div class="card">
            <div class="card-body p-3">
              <div class="row">
                <div class="col-8">
                  <div class="numbers">
                    <p class="text-sm mb-0 text-uppercase font-weight-bold">Month with the most visits</p>
                    <h5 class="font-weight-bolder">
                      <?= isset($most_active_month['month']) ? $most_active_month['month'] : 'Sin datos' ?> 
                (<?= isset($most_active_month['visits']) ? $most_active_month['visits'] : 0 ?> clics)
                    </h5>
                   
                  </div>
                </div>
                <div class="col-4 text-end">
                  <div class="icon icon-shape bg-gradient-warning shadow-warning text-center rounded-circle">
                    <i class="ni ni-cart text-lg opacity-10" aria-hidden="true"></i>
                  </div>
                </div>
              </div>
            </div>
          </div>
        </div>
      </div>
  
                     
            </div>
          </div>
        </div>



  <div class="container-fluid py-4">
    <div class="row">
        <div class="col-12">
            <div class="card mb-4">
                <div class="card-header pb-0">
                    <h6>Estadísticas de Visitas para el Enlace: <?= $short_id ?></h6>
                </div>
                <div class="card-body px-0 pt-0 pb-2">
                    <div class="table-responsive p-0">
                        <table class="table align-items-center mb-0">
                            <thead>
                                <tr>
                                    <th class="text-uppercase text-secondary text-xxs font-weight-bolder opacity-7">IP</th>
                                    <th class="text-uppercase text-secondary text-xxs font-weight-bolder opacity-7 ps-2">País</th>
                                    <th class="text-center text-uppercase text-secondary text-xxs font-weight-bolder opacity-7">Fecha</th>
                                    <th class="text-center text-uppercase text-secondary text-xxs font-weight-bolder opacity-7">Referer</th>
                                    <th class="text-secondary opacity-7"></th>
                                </tr>
                            </thead>
                            <tbody>
                                <?php if ($latest_visits && $latest_visits->num_rows > 0): ?>
                                    <?php while ($visit = $latest_visits->fetch_assoc()): ?>
                                        <tr>
                                            <td><?= $visit['ip_address'] ?></td>
                                            <td><?= $visit['country'] ?></td>
                                            <td><?= date("d/m/Y H:i", strtotime($visit['visit_time'])) ?></td>
                                            <td>
                                                <?= $visit['referrer'] ? "<a href='{$visit['referrer']}' target='_blank'>{$visit['referrer']}</a>" : 'N/A' ?>
                                            </td>
                                            <td class="text-end">
                                                <!-- Aquí puedes agregar cualquier acción adicional, como editar o eliminar -->
                                            </td>
                                        </tr>
                                    <?php endwhile; ?>
                                <?php else: ?>
                                    <tr>
                                        <td colspan="5">No hay visitas registradas.</td>
                                    </tr>
                                <?php endif; ?>
                            </tbody>
                        </table>
                    </div>
                </div>
            </div>
        </div>
    </div>
</div>

     
  <!--   Core JS Files   -->
  <script src="../assets/js/core/popper.min.js"></script>
  <script src="../assets/js/core/bootstrap.min.js"></script>
  <script src="../assets/js/plugins/perfect-scrollbar.min.js"></script>
  <script src="../assets/js/plugins/smooth-scrollbar.min.js"></script>
  <script>
    var win = navigator.platform.indexOf('Win') > -1;
    if (win && document.querySelector('#sidenav-scrollbar')) {
      var options = {
        damping: '0.5'
      }
      Scrollbar.init(document.querySelector('#sidenav-scrollbar'), options);
    }
  </script>
  <!-- Github buttons -->
  <script async defer src="https://buttons.github.io/buttons.js"></script>
  <!-- Control Center for Soft Dashboard: parallax effects, scripts for the example pages etc -->
  <script src="../assets/js/argon-dashboard.min.js?v=2.1.0"></script>
</body>

</html>