Я хочу сделать диаграмму на codeigniter, но всегда терплю неудачу. пожалуйста, помогите мне неправильный текст: Произошла ошибка PHP
Severity: Warning Message: Invalid argument supplied for foreach() Filename: chart/index.php Blockquote Line Number : 16
МОЙ ВИД :
<!-- **********************************************************************************************************************************************************
MAIN CONTENT
*********************************************************************************************************************************************************** -->
<!--main content start-->
<section id = "main-content">
<section class = "wrapper">
<!-- BASIC FORM ELELEMNTS -->
<div class = "row mt">
<div class = "col-lg-12">
<?php
#periksa array
foreach($data as $data){
$id_reservasi[] = $data->id_reservasi;
$stok[] = (float) $data->stok;
}
?>
</head>
<body>
<canvas id = "canvas" width = "1000" height = "280"></canvas>
<!--Load chart js-->
<script type = "text/javascript" src = "<?php echo base_url().'assets/chartjs/chart.min.js'?>"></script>
<script>
var lineChartData = {
labels : <?php echo json_encode($id_reservasi);?>,
datasets : [
{
fillColor: "rgba(60,141,188,0.9)",
strokeColor: "rgba(60,141,188,0.8)",
pointColor: "#3b8bba",
pointStrokeColor: "#fff",
pointHighlightFill: "#fff",
pointHighlightStroke: "rgba(152,235,239,1)",
data : <?php echo json_encode($stok);?>
}
]
}
var myLine = new Chart(document.getElementById("canvas").getContext("2d")).Line(lineChartData);
</script>
</div><!-- /col-lg-4 -->
</div><!-- /row -->
</section>
</section><!-- /MAIN CONTENT -->
МОЯ МОДЕЛЬ:
function get_chart(){
$query = $this->db->query("SELECT id_reservasi,SUM(status_reservasi) AS stok FROM tbl_reservasi GROUP BY id_reservasi");
if ($query->num_rows() > 0){
foreach($query->result() as $data){
$hasil[] = $data;
}
return $hasil;
}
}
МОЙ КОНТРОЛЛЕР:
public function chart() {
$x['data']=$this->sistem_model->get_chart();
$this->template_system->load('template_system','sistem/data/chart/index',$x);
}
пожалуйста, дайте мне решение ...
можешь привести мне пример?
foreach ($data as $item)все еще не решить @MagnusEriksson
@pradeep Я использую ссылку, как у, но получаю пустой элемент. <p> Сообщение: неопределенная переменная: stok </p>
Сделайте var_dump($data) и проверьте, что он на самом деле содержит. $data должен быть массивом или объектом, имеющим общедоступные значения или реализующим интерфейс Iterator.






Измените foreach($data as $data){ ....} на
if ( is_array($data) ) {
foreach($data as $item){
$id_reservasi[] = $item->id_reservasi;
$stok[] = (float) $item->stok;
}
}
или измените свою функцию get_chart, чтобы всегда возвращать массив:
function get_chart(){
$hasil = [];
$query = $this->db->query("SELECT id_reservasi,SUM(status_reservasi) AS stok FROM tbl_reservasi GROUP BY id_reservasi");
if ($query->num_rows() > 0){
foreach($query->result() as $data){
$hasil[] = $data;
}
}
return $hasil;
}
У меня есть отредактированный пример, но я все еще не решаю
Перед foreach проверьте, является ли переменная $data массивом: if ( is_array($data) ) { foreach ... }
спасибо тебе, хозяин
ПОСМОТРЕТЬ:
Примечание: as $row
if ($data) {
foreach ($data as $row) {
$id_reservasi[] = $row->id_reservasi;
$stok[] = (float) $row->stok;
}
} else {
echo 'no data';
}
МОДЕЛЬ:
Примечание: мы можем просто вернуть result(), поскольку foreach в вашем примере не нужен / избыточен. Важно, что мы также возвращаем false.
function get_chart() {
$query = $this->db->query("SELECT id_reservasi,SUM(status_reservasi) AS stok FROM tbl_reservasi GROUP BY id_reservasi");
if ($query->num_rows() > 0) {
return $query->result();
}
return false;
}
Вы также можете сделать (немного чище):
ПОСМОТРЕТЬ:
Обратите внимание на if и endif
<div class = "col-lg-12">
<?php
/*
#periksa array
foreach($data as $data){
$id_reservasi[] = $data->id_reservasi;
$stok[] = (float) $data->stok;
}
*/
?>
</head>
<body>
<?php if ($data): ?>
<canvas id = "canvas" width = "1000" height = "280"></canvas>
<!--Load chart js-->
<script type = "text/javascript" src = "<?php echo base_url().'assets/chartjs/chart.min.js'?>"></script>
<script>
var lineChartData = {
labels : <?php echo json_encode($data['id_reservasi']);?>,
datasets : [
{
fillColor: "rgba(60,141,188,0.9)",
strokeColor: "rgba(60,141,188,0.8)",
pointColor: "#3b8bba",
pointStrokeColor: "#fff",
pointHighlightFill: "#fff",
pointHighlightStroke: "rgba(152,235,239,1)",
data : <?php echo json_encode($data['stok']);?>
}
]
}
var myLine = new Chart(document.getElementById("canvas").getContext("2d")).Line(lineChartData);
</script>
<?php endif; ?>
</div><!-- /col-lg-4 -->
</div><!-- /row -->
</section>
</section><!-- /MAIN CONTENT -->
МОДЕЛЬ:
function get_chart() {
$query = $this->db->query("SELECT id_reservasi,SUM(status_reservasi) AS stok FROM tbl_reservasi GROUP BY id_reservasi");
if ($query->num_rows() > 0) {
$data = array();
foreach ($query->result() as $row) {
$data['id_reservasi'][] = $row->id_reservasi;
$data['stok'][] = $row->stok;
}
return $data;
}
return false;
}
Вы не можете использовать одну и ту же переменную в обоих местах в
foreach().