Я нашел этот великий ресурс в Chart.js — получение данных из базы данных с использованием mysql и php но мне немного нужна помощь, чтобы получить эти записи из базы данных. Это то, что я уже сделал, следуя руководству выше.
сохраните php в отдельном файле api.php и вызовите api.php, используя JSON. Но мне нужно было сделать
этикетки: [«Январь», «Февраль», «Март», «Апрель», «Май»]
а также
данные: [randomScalingFactor (), randomScalingFactor (), randomScalingFactor ()]
раздел динамически извлекает данные из базы данных sql. для этикетка мне нужно было установить значения, которые вводятся дата в базу данных и для данные Мне нужно было установить значение, которое вводится в базу данных соответственно. Я был бы признателен, если бы кто-нибудь мог направить меня с этим.
Спасибо!
api.php
<?php
$id = $_REQUEST['ID'];
$item1 = $_REQUEST['item'];
$sql = "SELECT * FROM item WHERE item_sup_company = '$id' AND subcategory = '$item1' ORDER BY item_id DESC";
$ser = new DBConnection();
$serchRes = $ser->executeQuery($sql);
$result = mysql_fetch_object($serchRes);
$arrLabels = $result->date;
$arrdata = $result->item_price;
$arrDatasets = array(
'label' => "My First dataset",
'fillColor' => "rgba(220,220,220,0.2)",
'strokeColor' => "rgba(220,220,220,1)",
'pointColor' => "rgba(220,220,220,1)",
'pointStrokeColor' => "#fff",
'pointHighlightFill' => "#fff",
'pointHighlightStroke' => "rgba(220,220,220,1)",
'data' => $arrdata
);
$arrReturn = array(
array(
'labels' => $arrLabels,
'datasets' => $arrDatasets
)
);
print(json_encode($arrReturn));
?>
index.html
<script type="text/javascript">
$.ajax({
type: 'POST',
url: '../include/chart-api.php',
success: function(data) {
lineChartData = data;
var myLine = new Chart(document.getElementById("canvas").getContext("2d")).Line(lineChartData);
var ctx = document.getElementById("canvas").getContext("2d");
window.myLine = new Chart(ctx).Line(lineChartData, {
responsive: true
});
}
});
var randomScalingFactor = function() {
return Math.round(Math.random() * 1000)
};
window.onload = function() {
var chart1 = document.getElementById("line-chart").getContext("2d");
window.myLine = new Chart(chart1).Line(lineChartData, {
responsive: true
});
};
</script>
<div class="canvas-wrapper">
<canvas class="main-chart" id="line-chart" height="200" width="600"></canvas>
</div>
Теперь я достиг этого шага, и мне нужно было какое-то тело, чтобы помочь мне в этом. Уже извлекаются записи заданных значений на графике. Тем не менее, график показывает мне только одну запись для всех значений.
Вот как я это сделал.
<?php
$sqlchart = "SELECT * FROM item WHERE item_sup_company = '$id' AND subcategory = '$item1' ORDER BY item_id DESC";
$chartres = new DBConnection();
$chartr = $chartres->executeQuery($sqlchart);
?><?php
while ($chartrows = mysql_fetch_object($chartr)) {
$monthdate = strtotime($chartrows->date);
$todate = date("M", $monthdate);
$arrLabels1 = $todate;
$arrdata1 = $chartrows->item_price;
echo $arrLabels1 . ' ' . $arrdata1 . "<br/>";
//$arrDatasets = array('label' => "My First dataset",'fillColor' => "rgba(220,220,220,0.2)", 'strokeColor' => "rgba(220,220,220,1)", 'pointColor' => "rgba(220,220,220,1)", 'pointStrokeColor' => "#fff", 'pointHighlightFill' => "#fff", 'pointHighlightStroke' => "rgba(220,220,220,1)", 'data' => $arrdata);
//$arrReturn = array(array('labels' => $arrLabels, 'datasets' => $arrDatasets));
//print (json_encode($arrReturn));
?>
<script type="text/javascript">
var randomScalingFactor = function() {
return Math.round(Math.random() * 10)
};
var lineChartData = {
labels : ["<?php echo $arrLabels1; ?>","<?php echo $arrLabels1; ?>","<?php echo $arrLabels1; ?>","<?php echo $arrLabels1; ?>","<?php echo $arrLabels1; ?>","<?php echo $arrLabels1; ?>"],
datasets: [
{
label: "My Second dataset",
fillColor: "rgba(48, 164, 255, 0.2)",
strokeColor: "rgba(48, 164, 255, 1)",
pointColor: "rgba(48, 164, 255, 1)",
pointStrokeColor: "#fff",
pointHighlightFill: "#fff",
pointHighlightStroke: "rgba(48, 164, 255, 1)",
data : [<?php echo $arrdata1; ?>,<?php echo $arrdata1; ?>,<?php echo $arrdata1; ?>,<?php echo $arrdata1; ?>,<?php echo $arrdata1; ?>,<?php echo $arrdata1; ?>,<?php echo $arrdata1; ?>,<?php echo $arrdata1; ?>,<?php echo $arrdata1; ?>,<?php echo $arrdata1; ?>,<?php echo $arrdata1; ?>,<?php echo $arrdata1; ?>]
}
]
}
window.onload = function() {
var chart1 = document.getElementById("line-chart").getContext("2d");
window.myLine = new Chart(chart1).Line(lineChartData, {
responsive: true
});
};
</script>
<?php
}
?>
Причина в том, что вы повторяете одну и ту же переменную в своих данных и метках:
data : [<?php echo $arrdata1; ?>,<?php echo $arrdata1; ?>, ...
labels : ["<?php echo $arrLabels1; ?>","<?php echo $arrLabels1; ?>", ...
Попробуйте сначала перенести все данные из базы данных в массив PHP, а затем вывести этот массив в JSON (где JavaScript сможет правильно его понять).
Например:
$arrdata = array();
$arrLabels = array();
while ($chartrows = mysql_fetch_object($chartr)) {
$monthdate = strtotime($chartrows->date);
$todate = date("M", $monthdate);
$arrLabels[] = $todate;
$arrdata[] = $chartrows->item_price;
}
Теперь переместите вывод за пределы цикла while, вы генерируете только один график.
Так что в вашем JavaScript (как отмечено в предыдущем предложении, это должно быть за пределами цикла while).
var lineChartData = {
label : <?php json_encode($arrLabels); ?>,
datasets: [
{
label: "My Second dataset",
fillColor: "rgba(48, 164, 255, 0.2)",
strokeColor: "rgba(48, 164, 255, 1)",
pointColor: "rgba(48, 164, 255, 1)",
pointStrokeColor: "#fff",
pointHighlightFill: "#fff",
pointHighlightStroke: "rgba(48, 164, 255, 1)",
data : <?php json_encode($arrdata); ?>
}
]
};
Также я заметил, что вы не очищаете свой запрос:
$id = $_REQUEST['ID'];
$item1 = $_REQUEST['item'];
$sql = "SELECT * FROM item WHERE item_sup_company = '$id' AND subcategory = '$item1' ORDER BY item_id DESC";
Вы должны готовить / выполнять или, по крайней мере, экранировать данные в запросе. Пожалуйста, посмотрите на этот.
Других решений пока нет …