根据用户选中复选框从数据库中检索数据并在谷歌图表中显示

时间:2014-03-18 11:28:30

标签: php mysql json checkbox google-visualization

我得到了这个谷歌图表可视化代码和json表,它将接受来自多个用户通过复选框选择的数据, * 根据他们在复选框中检查的内容从数据库中检索数据结果并通过谷歌图表显示以柱形图的形式.. *

问题是,柱形图仅显示 * 示例的复选框的最后一个元素数据,如果我勾选BAS和BAT复选框,则柱形图仅显示BAT数据。 < / strong> *假设显示BAS和BAT数据......我的错误就在这里..这就是代码..: - 非常感谢你的时间..

<div class="SamHistogramDiv" id="SamHistogramDiv">  
<?php
if(isset($_GET['iddoc']))
{       
    foreach ($_GET['iddoc'] as $iddoc)
    {

       $query="select * from compareresult where iddocument=$iddoc";
       $sql_query = mysql_query($query) or die('Error 3 :'.mysql_error());
       $rows = array();             
       $flag = true;
       $table = array();
       $table['cols'] = array
       (
            array('label' => 'title', 'type' => 'string'),
            array('label' => 'percentage', 'type' => 'number')
       );
       $rows = array();
       while($r = mysql_fetch_assoc($sql_query)) 
       {
            $temp = array();
            $temp[] = array('v' => (string)$r['subject']);
            $temp[] = array('v' => (int)$r['result']); 
            $rows[] = array('c' => $temp);          
       }    
       $table['rows'] = $rows;
       $jsonTable = json_encode($table);    
   }    
?>
</div>

    <script type="text/javascript">
    google.load('visualization', '1', {'packages':['corechart']});
    google.setOnLoadCallback(drawChart);

    function drawChart()
    {
        var data = new google.visualization.DataTable(<?php echo $jsonTable ?>);
        var options =
        {
            title: 'Comparison Result',
            is3D: 'true',
            width: 800,
            height: 600
        };
        var chart = new google.visualization.ColumnChart(document.getElementById('SamHistogramDiv'));
        chart.draw(data, options);
    }
}
</script>

1 个答案:

答案 0 :(得分:0)

您当前代码的问题在于您循环选中每个复选框,获取每个数据的数据,然后将其编码并存储在$jsonTable中,但随后您声明了$table数组再次每次迭代。这会覆盖先前每次新迭代存储的数据。

尝试这样的事情:

<?php
if(isset($_GET['iddoc']))
{    
    $table = array();
    $table['cols'] = array
    (
        array('label' => 'title', 'type' => 'string'),
        array('label' => 'percentage', 'type' => 'number')
    );

    foreach ($_GET['iddoc'] as $iddoc)
    {
        $query="select * from compareresult where iddocument=$iddoc";
        $sql_query = mysql_query($query) or die('Error 3 :'.mysql_error());

        while($r = mysql_fetch_assoc($sql_query)) 
        {
            $temp = array();
            $temp[] = array('v' => (string)$r['subject']);
            $temp[] = array('v' => (int)$r['result']); 
            $rows[] = array('c' => $temp);          
        }    
        $table['rows'] = $rows;            
    }

    $jsonTable = json_encode($table);
}
?>

您还可以尝试同时从所有复选框ID中获取数据,并使用SQL foreach语句完全取消IN循环。我将把它的确切方法留给你,但语法将是这样的:

SELECT * FROM compareresult WHERE iddocument IN ('1', '2', '3');

您必须添加一些代码才能将$_GET['iddoc']中的数组转换为适合您的SQL语句的格式,但它应该允许您一次解析所有数据而无需多次调用数据库中。