Я пытаюсь построить график, показывающий количество людей, выданных с пропуском за последние 07 дней.
Я использую PHP в бэкенде с phpMyAdmin's MySQL DBServer.
Для построения графика я использую chart.js (я открыт для предложений различных библиотек для подходящего решения, так как случайно наткнулся на это)
PHP-код для создания результирующего набора данных для использования в chart.js JS-коде выглядит следующим образом:
<?php
$servername = "localhost";
$username = "xyz";
$password = "xyz";
$dbname = "xyz";
try
{
$conn = new PDO("mysql:host=$servername;dbname=$dbname", $username, $password);
$conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$stmt = $conn->prepare("SELECT inDate, COUNT(insertionId) AS occurrence FROM guestvisitorpassdetails GROUP BY inDate");
$stmt->execute();
$json_inDate = [];
$json_occurrence = [];
while($row = $stmt->fetch(PDO::FETCH_ASSOC))
{
extract($row);
$json_inDate = $inDate;
$json_occurrence = (int)$occurrence;
}
echo json_encode($json_inDate);
echo json_encode($json_occurrence);
}
catch(PDOException $e) {
echo "Error: " . $e->getMessage();
}
$conn = null;
?>
Ниже показан элемент, используемый для построения графика.
<canvas class = "my-4 w-100 chartjs-render-monitor" id = "myChart" width = "1271" height = "536" style = "display: block; width: 1271px; height: 536px;"></canvas>
Ниже приведен необходимый скрипт chart.js для построения графика.
<script>
(function () {
'use strict'
feather.replace()
var ctx = document.getElementById('myChart')
var myChart = new Chart(ctx, {
type: 'line',
data: {
labels: <?php echo json_encode($json_inDate); ?>,
datasets: [{
data: <?php echo json_encode($json_occurrence); ?>,
lineTension: 0,
backgroundColor: 'transparent',
borderColor: '#007bff',
borderWidth: 4,
pointBackgroundColor: '#007bff'
}]
},
options: {
scales: {
yAxes: [{
ticks: {
beginAtZero: false
}
}]
},
legend: {
display: false
}
}
})
}())
</script>
Хотя график хорошо отображается со статическими данными, если я попытаюсь обновить его динамически при каждой загрузке страницы, запросив базу данных и обновив значения графика, это не сработает. Я был бы рад, если бы кто-то мог помочь мне с этим.
Спасибо.



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Отвечая на мой собственный вопрос, поскольку я нашел решение для него в последнее время.
В цикле while произошла незначительная ошибка, о которой говорится ниже.
while($row = $stmt->fetch(PDO::FETCH_ASSOC))
{
extract($row);
$json_inDate = $inDate;
$json_occurrence = (int)$occurrence;
}
Значения из считываемой базы данных должны храниться в $json_inDate[] и $json_occurrence[], а НЕ в $json_inDate и $json_occurrence. Очень незначительная ошибка, сделанная в гуще времени. Код отлично работает с этими поправками.
С уважением и благодарностью.
Я не голосовал против ..! Вы не видели, поэтому я удалил свой и... я не знаю, почему вы не видели
Сэр, как я уже упоминал в своем комментарии, я работаю в сети с воздушным зазором. Я разместил вопрос, а затем был ... развернут где-то. Я не мог видеть твой ответ. Когда я вернулся в сеть, я получил уведомление о вашем ответе, но когда я пришел сюда, чтобы увидеть его, его не было. Вопросу 5 дней, моему ответу 2 дня, что снова соответствует моему времени развертывания и почему вы «подождите 2 дня», а я до сих пор не увидел ответа. В любом случае, я удалю свой ответ и внесу свой вклад. Спасибо за помощь :)
Пожалуйста, подтвердите комментарий, чтобы вы также знали мою сторону истории, и у нас не было никаких плохих чувств между ними. Напишите, что я удалю свой ответ и отмечу ваш как правильный.
Давайте продолжить обсуждение в чате.
Итак, вы тот, кто ответил, удалил свой ответ и также проголосовал за мой вопрос. Я разместил этот комментарий к моему вопросу только для вас.