#javascript #php #mysql
#javascript #php #mysql
Вопрос:
У меня есть круговая диаграмма javascript, которую мне нужно заполнить данными из одной из моих таблиц, у меня есть users
таблица, которая содержит поле, idUsers
которое я использовал для идентификатора сеанса.
У меня есть таблица с именем modules
, которая содержит ModuleID и moduleName, а затем у меня есть таблица соединений между ними, вызываемая UserTakingModule
, в этой таблице есть поле с именем checkPoint, которое в основном содержит число (которое ссылается на страницу в слайд-шоу), поэтому пользователь знает, где они были в последний раз. Я пытаюсь использовать это checkPoint
для заполнения данных моей диаграммы. Поэтому, если пользователь добрался до определенной точки в модуле, используйте это. Однако я не могу заставить это работать, пожалуйста, может кто-нибудь указать, что я сделал не так, действительно изо всех сил. В настоящее время на круговой диаграмме js данные вообще не отображаются.
$query = "SELECT * FROM `userTakingModule` WHERE `idUsers` = '".$_SESSION['id']."' ";
$result = $conn -> query($query);
while($row = $result -> fetch_assoc())
{
$mod1=$row['checkPoint'];
// $mod2=$row[''];
// $mod3=$row[''];
// $mod4=$row[''];
// $mod5=$row[''];
// $mod6=$row[''];
}
?>
<script type="text/javascript">
var ctx = document.getElementById("my3Chart");
var myBarChart = new Chart(ctx, {
type: 'bar',
data: {
labels: ["Time Management", "Career Coach", "Stress amp; Wellbeing", "Note Taking", "Exam Prep", "Presentations"],
datasets: [{
label: '# of Votes',
data: [<?php echo $mod1?>, <?php echo $mod2?>, <?php echo $mod3?>, <?php echo $mod4?>, <?php echo $mod5?> ,<?php echo $mod6?>],
backgroundColor: [
'rgba(255, 99, 132, 0.2)',
'rgba(54, 162, 235, 0.2)',
'rgba(255, 206, 86, 0.2)',
'rgba(75, 192, 192, 0.2)',
'rgba(153, 102, 255, 0.2)',
'rgba(255, 159, 64, 0.2)'
],
borderColor: [
'rgba(255,99,132,1)',
'rgba(54, 162, 235, 1)',
'rgba(255, 206, 86, 1)',
'rgba(75, 192, 192, 1)',
'rgba(153, 102, 255, 1)',
'rgba(255, 159, 64, 1)'
],
borderWidth: 1
}]
},
options: {
scales: {
yAxes: [{
ticks: {
beginAtZero:true
}
}]
}
}
});
</script>
ОБНОВЛЕНИЕ: круговые диаграммы выглядят нормально, если я просто вводю значения жесткого кода под тегом data на диаграмме, я думаю, это связано с SQL-запросом, мне почти нужно, возможно, сказать, покажите мне checkPoint
ModuleID'x'
этого пользователя, который вошел в систему?
Комментарии:
1. Начните с работающего HTML-файла, затем измените жестко закодированные данные на PHP
2. ПРЕДУПРЕЖДЕНИЕ : по возможности используйте подготовленные инструкции , чтобы избежать введения произвольных данных в ваши запросы и создания ошибок SQL-инъекций . Это довольно просто сделать в
mysqli
и PDO , где любые предоставленные пользователем данные указываются с?
:name
помощью индикатора или, который позже заполняется с использованиемbind_param
илиexecute
в зависимости от того, какой из них вы используете.3. Привет @mplungjan, это работает в html, если я просто жестко закодирую значения 1, 2, 3 и т.д. в круговой диаграмме в разделе данные, но я думаю, что мой php присваивает
checkPoint
неправильно. Как я полагаю, я должен был бы сказатьcheckPoint
дляmoduleID'x'
? Я не уверен
Ответ №1:
Попробуйте использовать implode
так:
$query = "SELECT * FROM `userTakingModule` WHERE `idUsers` = '".$_SESSION['id']."' ";
$result = $conn -> query($query);
$mod = Array();
while($row = $result -> fetch_assoc())
{
$mod[]=$row['checkPoint'];
}
$data = implode(',',$mod);
?>
<script type="text/javascript">
var ctx = document.getElementById("my3Chart");
var myBarChart = new Chart(ctx, {
type: 'bar',
data: {
labels: ["Time Management", "Career Coach", "Stress amp; Wellbeing", "Note Taking", "Exam Prep", "Presentations"],
datasets: [{
label: '# of Votes',
data: [<?php echo $data?>],
backgroundColor: [
'rgba(255, 99, 132, 0.2)',
'rgba(54, 162, 235, 0.2)',
'rgba(255, 206, 86, 0.2)',
'rgba(75, 192, 192, 0.2)',
'rgba(153, 102, 255, 0.2)',
'rgba(255, 159, 64, 0.2)'
],
borderColor: [
'rgba(255,99,132,1)',
'rgba(54, 162, 235, 1)',
'rgba(255, 206, 86, 1)',
'rgba(75, 192, 192, 1)',
'rgba(153, 102, 255, 1)',
'rgba(255, 159, 64, 1)'
],
borderWidth: 1
}]
},
options: {
scales: {
yAxes: [{
ticks: {
beginAtZero:true
}
}]
}
}
});
</script>
Комментарии:
1. ПОЖАЛУЙСТА, скажите мне, как, черт возьми, это сработало??? Будут ли цифры, отображаемые на гистограмме, соответствовать порядку меток в круговой диаграмме? т.е. Как я узнаю
TimeManagement
, что под диаграммой js будут соответствовать правильным данным в моей таблице php для этого модуля2. Если информация о метках также может быть извлечена из того же запроса, то вы можете использовать тот же процесс для меток. Таким образом, вы гарантируете, что каждая метка соответствует правильному значению.
3. О, господи, большое тебе спасибо, так что, поскольку я выбрал ВСЕ из UserTakingModule, он каким-то образом знал имена модулей, или это потому, что в коде диаграммы js я назвал их,
labels
и это каким-то образом просто совпало с именем модуля в моих таблицах?4. Это потому, что вы назвали их under
labels
. Если порядок, который вы жестко запрограммировали, совпадает с порядком, в котором запрос возвращает результаты, тогда вам повезло. Просто будьте осторожны, это правильный порядок. Будет безопаснее сопоставить каждое значение с правильной меткой, создав массив меток, аналогичный тому, что я сделал соcheckPoint
столбцом.5. Вам придется изменить свой запрос, присоединившись к
module
таблице, чтобы извлечьModuleName
столбец. Затем вы должны сделать что-то вроде$labels[]=$row['ModuleName'];
implode
, а затем заменить жестко заданные значения на это.