Tarihlerde bir sorun var gibi kontrol edeceğim; startoverflow'dan farklı sql örneği buldum 
chartjs.php
<?php
$before = array('Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday', 'January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat', 'Sun', 'Jan', 'Feb', 'Mar', 'Apr', 'May', 'June', 'July', 'Aug', 'Sept', 'Oct', 'Nov', 'Dec');
$after = array('Pazar', 'Pazartesi', 'Salı', 'Çarşamba', 'Perşembe', 'Cuma', 'Cumartesi', 'Ocak', 'Şubat', 'Mart', 'Nisan', 'Mayıs', 'Haziran', 'Temmuz', 'Ağustos', 'Eylül', 'Ekim', 'Kasım', 'Aralık', 'Pzt', 'Sal', 'Çar', 'Per', 'Cum', 'Cmt', 'Paz', 'Oca', 'Şub', 'Mar', 'Nis', 'May', 'Haz', 'Tem', 'Ağu', 'Eyl', 'Eki', 'Kas', 'Ara');
if (isset($_REQUEST['ajax']) || isset($_SERVER['HTTP_X_REQUESTED_WITH']) && $_SERVER['HTTP_X_REQUESTED_WITH'] === 'XMLHttpRequest') {
$host = "localhost";
$dbname = "r10";
$username = "root";
$password = "";
try {
$pdo = new PDO("mysql:host=$host;dbname=$dbname", $username, $password);
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
} catch (PDOException $e) {
die("Bağlantı hatası: " . $e->getMessage());
}
$sql = "
SELECT
CONCAT(YEAR(`created_at`), ', ', MONTHNAME(`created_at`), ' ', FLOOR(((DAY(`created_at`) - 1) / 7) + 1)) `week`,
COUNT(*) AS visitor_count,
SUM(CASE WHEN action_type = 'view' THEN 1 ELSE 0 END) AS view_count,
SUM(CASE WHEN action_type = 'click' THEN 1 ELSE 0 END) AS click_count
FROM
visitor
LEFT JOIN
visitor_log ON visitor.visitor_id = visitor_log.visitor_id
GROUP BY
`week`
ORDER BY month(`created_at`), `week`;
";
$stmt = $pdo->prepare($sql);
$stmt->execute();
$weeklyData = $stmt->fetchAll(PDO::FETCH_ASSOC);
foreach ($weeklyData as $index => $row) {
//$row['start_date'] = get_dateformat($row['start_date'], 'd F');
//$row['end_date'] = get_dateformat($row['end_date'], 'd F');
$row['week'] = str_replace($before, $after, $row['week']);
$weeklyData[$index] = $row;
}
header('Content-Type: application/json');
exit(json_encode($weeklyData, JSON_NUMERIC_CHECK));
}
?>
<!DOCTYPE html>
<html lang="tr">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Haftalık Ziyaretçi Sayısı Grafiği</title>
<script src="https://code.jquery.com/jquery-3.6.0.min.js"></script>
<script src="https://cdn.jsdelivr.net/npm/chart.js"></script>
</head>
<body>
<div style="width: 80%; margin: auto;">
<canvas id="visitorChart"></canvas>
</div>
<script>
$.ajax({
url: "",
method: "GET",
dataType: "JSON",
success: function(data) {
var ctx = document.getElementById("visitorChart").getContext("2d");
var visitorChart = new Chart(ctx, {
type: "line",
data: {
labels: data.map(function(item) {
return "(" + item.week + ")";
}),
datasets: [{
label: "Tekil Ziyaretçi",
data: data.map(function(item) {
return item.visitor_count;
}),
borderColor: "rgba(75, 192, 192, 1)",
borderWidth: 2,
fill: false
}, {
label: "Görüntüleme",
data: data.map(function(item) {
return item.view_count;
}),
borderColor: "rgba(255, 99, 132, 1)",
borderWidth: 2,
fill: false
}, {
label: "Tıklama",
data: data.map(function(item) {
return item.click_count;
}),
borderColor: "rgba(54, 162, 235, 1)",
borderWidth: 2,
fill: false
}]
},
options: {
scales: {
y: {
beginAtZero: true
}
},
plugins: {
title: {
display: true,
text: "Haftalık Ziyaretçi Sayısı Grafiği"
}
}
}
});
},
error: function() {
console.error("Veri çekme hatası");
}
});
</script>
</body>
</html>index.php - bunu kendim denemek için yaptım
session_start();
function get_my() {
if (isset($_COOKIE['my'])) {
return $_COOKIE['my'];
} elseif (isset($_SESSION['my'])) {
return $_SESSION['my'];
} else {
$uniq = uniqid();
setcookie('my', $uniq, time() + 3600 * 24 * 365);
$_SESSION['my'] = $uniq;
return $uniq;
}
}
function create_visitor($pdo, $visitor_id) {
$sql = "INSERT INTO visitor (visitor_id, created_at) VALUES (:visitor_id, :created_at)";
$stmt = $pdo->prepare($sql);
$created_at = date('Y-m-d H:i:s');
$stmt->bindParam(':visitor_id', $visitor_id, PDO::PARAM_STR);
$stmt->bindParam(':created_at', $created_at, PDO::PARAM_STR);
$stmt->execute();
}
function log_page_visit($pdo, $visitor_id, $page_url) {
$sql = "INSERT INTO visitor_log (visitor_id, page_url, action_type) VALUES (:visitor_id, :page_url, :action_type)";
$stmt = $pdo->prepare($sql);
$stmt->bindParam(':visitor_id', $visitor_id, PDO::PARAM_STR);
$stmt->bindParam(':page_url', $page_url, PDO::PARAM_STR);
$action_type = "view"; // Görüntüleme işlemi, tıklama veya başka bir işlem türü olabilir
$stmt->bindParam(':action_type', $action_type, PDO::PARAM_STR);
$stmt->execute();
}
$host = "localhost";
$dbname = "r10";
$username = "root";
$password = "";
try {
$pdo = new PDO("mysql:host=$host;dbname=$dbname", $username, $password);
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
} catch (PDOException $e) {
die("Bağlantı hatası: " . $e->getMessage());
}
$visitor_id = get_my();
// Ziyaretçiyi "visitor" tablosuna ekle (eğer daha önce eklenmediyse)
$sql = "SELECT COUNT(*) FROM visitor WHERE visitor_id = :visitor_id";
$stmt = $pdo->prepare($sql);
$stmt->bindParam(':visitor_id', $visitor_id, PDO::PARAM_STR);
$stmt->execute();
$count = $stmt->fetchColumn();
if ($count == 0) {
create_visitor($pdo, $visitor_id);
}
$page_url = $_SERVER['REQUEST_URI'];
$parsed_url = parse_url($page_url);
if (isset($parsed_url['path'])) {
$page_url = rtrim($parsed_url['path'], '/');
}
// Aynı sayfa URL'siyle birden fazla kayıt oluşturmayı önlemek için kontrol yap
$sql = "SELECT COUNT(*) FROM visitor_log WHERE visitor_id = :visitor_id AND page_url = :page_url";
$stmt = $pdo->prepare($sql);
$stmt->bindParam(':visitor_id', $visitor_id, PDO::PARAM_STR);
$stmt->bindParam(':page_url', $page_url, PDO::PARAM_STR);
$stmt->execute();
$count = $stmt->fetchColumn();
if ($count == 0) {
// Ziyaretçinin sayfa ziyareti kaydedilmediyse, kaydet
log_page_visit($pdo, $visitor_id, $page_url);
}SQL yapısı
-- r10.visitor: 16 rows tablosu için veriler indiriliyor
/*!40000 ALTER TABLE `visitor` DISABLE KEYS */;
REPLACE INTO `visitor` (`id`, `visitor_id`, `created_at`) VALUES
(1, 'uniqid1', '2023-09-05 10:00:00'),
(2, 'uniqid2', '2023-09-05 11:30:00'),
(3, 'uniqid3', '2023-09-06 09:45:00'),
(4, 'uniqid4', '2023-09-06 14:15:00'),
(5, 'uniqid5', '2023-09-07 16:20:00'),
(6, 'uniqid6', '2023-09-07 17:45:00'),
(7, 'uniqid7', '2023-09-08 08:30:00'),
(8, 'uniqid8', '2023-09-08 12:00:00'),
(9, 'uniqid9', '2023-09-09 14:10:00'),
(10, 'uniqid10', '2023-09-09 15:30:00'),
(11, 'uniqid11', '2023-09-10 11:20:00'),
(12, 'uniqid12', '2023-09-10 16:45:00'),
(13, 'uniqid13', '2023-09-11 09:15:00'),
(14, 'uniqid14', '2023-09-11 13:40:00'),
(15, 'uniqid15', '2023-09-12 14:50:00'),
(25, '65130d72afc20', '2023-09-26 20:42:55');
/*!40000 ALTER TABLE `visitor` ENABLE KEYS */;
-- tablo yapısı dökülüyor r10.visitor_log
CREATE TABLE IF NOT EXISTS `visitor_log` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`visitor_id` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
`page_url` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
`action_type` enum('view','click','submit') COLLATE utf8_unicode_ci NOT NULL,
`log_date` datetime DEFAULT NULL,
PRIMARY KEY (`id`),
KEY `visitor_id` (`visitor_id`)
) ENGINE=MyISAM AUTO_INCREMENT=19 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
-- r10.visitor_log: 18 rows tablosu için veriler indiriliyor
/*!40000 ALTER TABLE `visitor_log` DISABLE KEYS */;
REPLACE INTO `visitor_log` (`id`, `visitor_id`, `page_url`, `action_type`, `log_date`) VALUES
(1, 'uniqid1', '/anasayfa', 'view', '2023-09-05 10:05:00'),
(2, 'uniqid2', '/urunler', 'view', '2023-09-05 11:35:00'),
(3, 'uniqid3', '/hakkimizda', 'view', '2023-09-06 09:50:00'),
(4, 'uniqid4', '/urunler', 'click', '2023-09-06 14:20:00'),
(5, 'uniqid5', '/iletisim', 'view', '2023-09-07 16:25:00'),
(6, 'uniqid6', '/urunler', 'view', '2023-09-07 17:50:00'),
(7, 'uniqid7', '/hakkimizda', 'view', '2023-09-08 08:35:00'),
(8, 'uniqid8', '/urunler', 'click', '2023-09-08 12:05:00'),
(9, 'uniqid9', '/iletisim', 'view', '2023-09-09 14:15:00'),
(10, 'uniqid10', '/anasayfa', 'view', '2023-09-09 15:35:00'),
(11, 'uniqid11', '/urunler', 'click', '2023-09-10 11:25:00'),
(12, 'uniqid12', '/hakkimizda', 'view', '2023-09-10 16:50:00'),
(13, 'uniqid13', '/anasayfa', 'view', '2023-09-11 09:20:00'),
(14, 'uniqid14', '/iletisim', 'submit', '2023-09-11 13:45:00'),
(15, 'uniqid15', '/urunler', 'click', '2023-09-12 14:55:00'),
(16, '65130d72afc20', '', 'view', '2023-09-26 20:18:42'),
(18, '65130d72afc20', '/selamsdghsd', 'view', '2023-09-26 20:34:53');
/*!40000 ALTER TABLE `visitor_log` ENABLE KEYS */;