Как поставить две диаграммы chartjs, чтобы отображались обе?

Я делаю страницу для учителей, где они могут видеть оценку своих учеников, и для этого есть диаграммы, показывающие, сколько учеников правильно ответили на каждый вопрос. Я попытался просто поместить две диаграммы, но она показывает только одну из диаграмм, а другая диаграмма была пустой. Я думал, что проблема возникает из-за того, что обе диаграммы имеют одно и то же имя, но после того, как я изменил одно из имен диаграммы, она по-прежнему показывает только одну из диаграмм. Вот мой код php / html / js:

<?php

if (isset($_GET['question'])) {

    $con = mysqli_connect("localhost", "root", "", "testing");

    if ($con->connect_error) {

        die("Connection failed: " . $con->connect_error);

    }

    $sql = "SELECT * FROM `chapter 7 vocabulary test` WHERE `score".$_GET["question"]."`='1'";

    $result = mysqli_query($con, $sql);

    $full = mysqli_num_rows($result);

    mysqli_free_result($result);

    $sql = "SELECT * FROM `chapter 7 vocabulary test` WHERE `score".$_GET["question"]."`='0'";

    $result = mysqli_query($con, $sql);

    $none = mysqli_num_rows($result);

    mysqli_free_result($result);

?>

<script src = "jquery-3.3.1.min.js"></script>

<script src = "Chart.js"></script>

<div id = "canvas"><canvas id = "questioncan1" style = "height: 25vh; width: 25vh;"></canvas></div>

<script type = "text/javascript">

    let myChart = document.getElementById('questioncan1').getContext("2d");

    Chart.defaults.global.defaultFontFamily = "Arial";

    Chart.defaults.defaultFontSize = 18;

    Chart.defaults.global.defaultFontColor = "black";

    let questioncan1 = new Chart(myChart, {

        type: "doughnut",

        data: {

            labels: [

                "Full Credit",
                "No Credit"

            ],

            datasets: [

                {

                    data: [

                        5,
                        15

                    ],

                    backgroundColor: [

                        "#11FF00",
                        "#F7301E"


                    ],

                    borderWidth: 0

                }

            ]

        },

        options: {

            scaleShowLabels: false,
            responsive: false,
            legend: {

                display: false

            }

        }

    });

</script>

<br><br>

<table>

    <tr>

        <th>Name</th>
        <th>Status</th>

    </tr>

    <?php

        $sql = "SELECT * FROM `chapter 7 vocabulary test`";

        $result = $con->query($sql);

        while ($row = $result->fetch_assoc()) {

            $sql2 = "SELECT * FROM `users` WHERE  `snumber`='".$row["snumber"]."'";

            $result2 = $con->query($sql2);

            while ($row2 = $result2->fetch_assoc()) {

                echo "<tr><td>".$row2['name']."</td><td>".$row["score".$_GET['question']]."</td></tr>";

            }

        }

    ?>

</table>

<script src = "jquery-3.3.1.min.js"></script>

<div id = "canvas"><canvas id = "questioncan" style = "height: 25vh; width: 25vh;"></canvas></div>

<script type = "text/javascript">

    let myChart = document.getElementById('questioncan').getContext("2d");

    Chart.defaults.global.defaultFontFamily = "Arial";

    Chart.defaults.defaultFontSize = 18;

    Chart.defaults.global.defaultFontColor = "black";

    let questioncan = new Chart(myChart, {

        type: "doughnut",

        data: {

            labels: [

                "Full Credit",
                "No Credit"

            ],

            datasets: [

                {

                    data: [

                        <?php echo $full; ?>,
                        <?php echo $none; ?>

                    ],

                    backgroundColor: [

                        "#11FF00",
                        "#F7301E"


                    ],

                    borderWidth: 0

                }

            ]

        },

        options: {

            scaleShowLabels: false,
            responsive: false,
            legend: {

                display: false

            }

        }

    });

</script>

<br><br>

<table>

    <tr>

        <th>Name</th>
        <th>Status</th>

    </tr>

    <?php

        $sql = "SELECT * FROM `chapter 7 vocabulary test`";

        $result = $con->query($sql);

        while ($row = $result->fetch_assoc()) {

            $sql2 = "SELECT * FROM `users` WHERE  `snumber`='".$row["snumber"]."'";

            $result2 = $con->query($sql2);

            while ($row2 = $result2->fetch_assoc()) {

                echo "<tr><td>".$row2['name']."</td><td>".$row["score".$_GET['question']]."</td></tr>";

            }

        }

    ?>

</table>

<?php

}

?>

Ваш код не структурирован. Попробуйте использовать данные json с ajax, чтобы добраться до места назначения.

Aroon 10.09.2018 12:32
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
1
1
37
1

Ответы 1

Вы объявляете переменную myChart дважды глобально, а не в отдельных функциях, поэтому она выводит только одну из них.

Установите второй график на:

  let myChart2 = document.getElementById('questioncan2').getContext("2d");

https://jsfiddle.net/xea4qr8k/12/

Также рекомендуется изменить идентификаторы div на уникальные и удалить второй скрипт src для jQuery.

Другие вопросы по теме