【问题标题】:I am trying to fetch PHP array From chart js我正在尝试从图表 js 中获取 PHP 数组
【发布时间】:2022-10-13 15:02:41
【问题描述】:

我正在尝试从 SQL 数据库中获取数据,并通过 PHP 尝试将其用于图表 JS。一切正常,但是当我尝试获取所有数据时出现错误。

helo
Fatal error: Uncaught Error: [] operator not supported for strings in /opt/lampp/htdocs/js/index.php:16 Stack trace: #0 {main} thrown in /opt/lampp/htdocs/js/index.php on line 16

我在 foreach 循环中使用这个 [] 时到了这里

$month[] = $data['monthname'];
  $amount[] = $data['amount'];

这是我的完整代码

<?php include('db.php') ;  ?>

<?php 

$query = "Select * from transactions ";

$myquery = mysqli_query($conn,$query);




foreach ($myquery as $data ) {
  $month[] = $data['monthname'];
  $amount[] = $data['amount'];
}



?>

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <script src="https://cdn.jsdelivr.net/npm/chart.js"></script>


    <title>Document</title>

</head>
<body>
    <div>
        <canvas id="myChart"></canvas>
    </div>
    <script>
        const labels = <?php  echo json_encode($month) ?>;
const data = {
  labels: labels,
  datasets: [{
    label: 'My First Dataset',
    data: [65, 59, 80, 81, 56, 55, 40],
    backgroundColor: [
      'rgba(255, 99, 132, 0.2)',
      'rgba(255, 159, 64, 0.2)',
      'rgba(255, 205, 86, 0.2)',
      'rgba(75, 192, 192, 0.2)',
      'rgba(54, 162, 235, 0.2)',
      'rgba(153, 102, 255, 0.2)',
      'rgba(201, 203, 207, 0.2)'
    ],
    borderColor: [
      'rgb(255, 99, 132)',
      'rgb(255, 159, 64)',
      'rgb(255, 205, 86)',
      'rgb(75, 192, 192)',
      'rgb(54, 162, 235)',
      'rgb(153, 102, 255)',
      'rgb(201, 203, 207)'
    ],
    borderWidth: 1
  }]
};

const config = {
  type: 'bar',
  data: data,
  options: {
    scales: {
      y: {
        beginAtZero: true
      }
    }
  },
};
      </script>
       



       <script>
        const myChart = new Chart(
          document.getElementById('myChart'),
          config
        );
      </script>



</body>
</html>

【问题讨论】:

  • 可能是 $data 不是数组。如果它是一个字符串,那么你不能在它上面使用[] 操作符。您可以尝试在循环内执行 dd($data); 以查看并确定它是哪种数据类型。

标签: javascript php


【解决方案1】:

您可能缺少 fetch 语句 (mysqli_fetch_all)

因此,更改此块

<?php 

$query = "Select * from transactions ";
$myquery = mysqli_query($conn,$query);

foreach ($myquery as $data ) {
  $month[] = $data['monthname'];
  $amount[] = $data['amount'];
}

?>

$query = "Select * from transactions ";

$result = mysqli_query($conn,$query);

$myquery = mysqli_fetch_all($result, MYSQLI_ASSOC);

foreach ($myquery as $data ) {
  $month[] = $data['monthname'];
  $amount[] = $data['amount'];
}

【讨论】:

  • 致命错误:未捕获错误:/opt/lampp/htdocs/js/index.php:12 中的字符串不支持 [] 运算符堆栈跟踪:/opt/lampp/htdocs/js/index.php 中抛出的 #0 {main}在第 12 行
猜你喜欢
  • 1970-01-01
  • 2023-03-26
  • 1970-01-01
  • 1970-01-01
  • 2021-03-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多