【问题标题】:HighCharts pie chart X-axies values are not displayed while trying to get data from MySQL database using PHP尝试使用 PHP 从 MySQL 数据库获取数据时不显示 HighCharts 饼图 X 轴值
【发布时间】:2025-12-17 15:50:01
【问题描述】:

我卡在从 mysql 数据库到 HighCharts 的数据连接中

highchart.js 代码如下

            <script type="text/javascript">
    $(function () {
        var chart;
        $(document).ready(function() {
            chart = new Highcharts.Chart({
                chart: {
                    renderTo: 'container5',
                    plotBackgroundColor: null,
                    plotBorderWidth: 2,
                    plotShadow: false
                },
                title: {
                    text: '<p><?php echo $chart5; ?></p>'
                },
                // tooltip: {
                    // pointFormat: '{series.name}: <b>{point.percentage}%</b>',
                    // percentageDecimals: 1
                // },
               plotOptions: {
                    pie: {
                        allowPointSelect: true,
                        cursor: 'pointer',
                        dataLabels: {
                            enabled: false
                        },
                        showInLegend: true
                    }
                },


                    xAxis: {
             categories: [<?php echo "'".implode("','",$data)."'"; ?>]
          },
          series: [{
           type: 'pie',
             data: [<?php echo implode(",",$data1);  ?>] 

                }]
            });
        });

    });

        </script>

还有我的database.php

            $data = array();
        $sql = "SELECT x_axis FROM licence_chart ";
         $result9 = mysql_query($sql);
                $data9 = array();
                while ($row = mysql_fetch_array($result9)) {
                   $data9 = $row['x_axis'];
                   $data[] = $data9;
                }

        $data1 = array();
        $sql = "SELECT y_axis FROM licence_chart ";
         $result10 = mysql_query($sql);
                $data10 = array();
                while ($row = mysql_fetch_array($result10)) {
                   $data10 = $row['y_axis'];
                   $data1[] = $data10;
                }

                echo "'".join("','",$data)."'";
                echo join(",",$data1);

当我在 localhost 中运行此代码时,饼图会显示,但在 x-axies 中未显示值 该值显示为Slice 。但y-axies 值显示正确,

licence_chart 表中这样的数据在表x_axies 中,y_axies 是列

x_axies{crome,opera,ie,firefox,safari}
y_axies{0.12,0.23,23.2,56.2,2}

我想要在highchart.js 中的文件data[] 数据会是这样的

['safari',10],['firefox',1.5],['ie',0.5]

所以我在database.phphighchatr.js 文件中做错了什么请告诉我并更正我的代码。

【问题讨论】:

  • 该错误意味着您将字符串作为 Xvalue 传递。我会看看你是如何解析 PHP 中的 x 和 y 值的。
  • 所有的连接是什么?

标签: php mysql html extjs4 highcharts


【解决方案1】:

上述问题的正确答案,我正在使用它并获得上述格式

<php
    $sql = "SELECT x_axis,y_axis FROM licence_chart ";
    $result9 = mysql_query($sql);
    $data9 = array();
    while ($row = mysql_fetch_array($result9)) 
        {
            $data9 = "'".$row['x_axis']."'".",".$row['y_axis'];
            $data[] = $data9;
        }   
    for($ii=0;$ii<count($data);$ii++)
        {
            echo "[".$data[$ii]."]," ;  
        }   
?> 

【讨论】:

    【解决方案2】:

    就像错误所说: http://www.highcharts.com/errors/14

    Highcharts 错误 #14 字符串值发送到 series.data,预期数字

    如果您将字符串作为数据点传入,例如在 设置如下:

    系列:[{ 数据:[“3”、“5”、“1”、“6”] }]

    Highcharts 期望数据值是数字。最普遍的 原因是数据是从 CSV 或 XML 源解析的, 并且实现者忘记在解析后的值上运行 parseFloat。

    出于性能原因,不执行内部类型转换,并且 仅检查第一个值(从 2.3 开始)。

    你的问题是你的echo join($data1, "','");。 yAxis 值不能是字符串。看起来你只是得到一个巨大的字符串:

    'Safari','Opera','Firefox','IE','Chrome','Others10','6','40.5','20','10.6','0.5
    

    通过执行此连接操作,您将在 yAxis 数字周围添加单引号。简单地做:

    echo join($data1, ",");
    

    这应该可以解决您的部分问题。如果您阅读了错误页面,您会看到这一点 - 不是敲你,但 HighCharts 有非常棒的文档和错误报告。

    要以正确的形式获得它,您还需要使用 [name, yValue] 制作不同的系列元素。你所拥有的只是一串 [name, name, name,...., yVal, yVal, yVal..]。

    如何解析?真的取决于你。但是为什么不只是做一个SELECT '[''' + x_axis + '',' + CONVERT(VARCHAR(10), y_axis) + ']' FROM licence_chart 然后做一个这样的连接:

    echo join($data1, ",");
    

    这应该会给你(不确定在用数字进行文本连接时的 mySQL 语法,所以我把它留给你。这是在 MS SQL 中):

    ['Safari', 6], ['Opera', 40.5], ['Firefox', 20], ['IE', 10.6], ['Chrome', 0.5], ['Others10', <some number...looks like it got cut off in your question>]
    

    【讨论】:

    • 感谢 wergeld 你回答了我的问题,但你的回答对我没用,因为我的问题你不明白。但无论如何感谢您的回复
    【解决方案3】:
    <?php
    

    // Set the JSON header header("Content-type: text/json"); // The x value is the current JavaScript time, which is the Unix time multiplied by 1000. $x = time() * 1000; // The y value is a random number $y = rand(0, 100); // Create a PHP array and echo it as JSON $ret = array($x, $y); echo json_encode($ret); ?&gt;

    这是来自 HIGHCHARTS 安装说明的答案

    【讨论】: