创建从数据库中获取数据的折线图

时间:2014-07-12 20:19:43

标签: php html mysql database d3.js

我尝试在D3中创建一个简单的条形图,从数据库中获取数据。我们的想法是使用参数和国家/地区的选择按钮从数据库中获取年份和值,并以简单条形图的形式显示。我有两个选择按钮和一个提交按钮。代码就像这样:

      <form action ="data.php" method ="post">

       <tr>
    <th valign="bottom">Select country:</th>
    <td >   
    <select name="country" class="">

        <option value= "NPL">Nepal</option>
         <option value= "IND">India</option>


        </select>

    </td>
    <th valign="bottom">Select parameters:</th>
    <td >   
    <select name="indices" class="">

        <option value= "foodfinal">Vulnerability on food</option>
         <option value= "waterfinal">Vulnerability water </option>


        </select>

    </td>
    <td valign="top">
        <input type="submit" class="action" />
        </td>
     </tr>
     </form> 

Foodfinal和waterfinal是数据库中名为&#39; Climate&#39;的表格的名称。 NPL和IND是国家代码。我的PHP代码(data.php)是这样的:

<?php
$username = "root"; 
$password = "";   
$host = "localhost";
$database="climate";
$country="AFG"; 
$country=$_POST["country"];
 $indices=$_POST["indices"];

$server = mysql_connect($host, $username, $password);
$connection = mysql_select_db($database, $server);

$myquery = "SELECT  `year`, `values` FROM  `$indices` WHERE `countrycode`= '$country'";
$query = mysql_query($myquery);

if ( ! $query ) {
    echo mysql_error();
    die;
}

$data = array();

for ($x = 0; $x < mysql_num_rows($query); $x++) {
    $data[] = mysql_fetch_assoc($query);
}

echo json_encode($data);  
include("linegraph.html");   

mysql_close($server);
?>

我的问题是linegraph.html在使用选择表单之前一直运行良好,但这一次,它只显示data.php的输出,如下所示。

{&#34;一年&#34;:&#34; 1995&#34;&#34;值&#34;:&#34; 0.525999&#34;},{&#34;年&#34 ;:&#34; 1996&#34;&#34;值&#34;:&#34; 0.570037&#34;},{&#34;一年&#34;:&#34; 1997&#34 ;, &#34;值&#34;:&#34; 0.563966&#34;},{&#34;一年&#34;:&#34; 1998&#34;&#34;值&#34;:&# 34; 0.513896&#34;},{&#34;一年&#34;:&#34; 1999&#34;&#34;值&#34;:&#34; 0.5346&#34;},{& #34;一年&#34;:&#34; 2000&#34;&#34;值&#34;:&#34; 0.552691&#34;},{&#34;一年&#34;:&#34 ; 2001&#34;&#34;值&#34;:&#34; 0.545319&#34;},{&#34;一年&#34;:&#34; 2004年&#34;&#34;值& #34;:&#34; 0.543972&#34;},{&#34;一年&#34;:&#34; 2005&#34;&#34;值&#34;:&#34; 0.543299&# 34;},{&#34;一年&#34;:&#34; 2006年&#34;&#34;值&#34;:&#34; 0.546682&#34;},{&#34;年&# 34;:&#34; 2007&#34;&#34;值&#34;:&#34; 0.550066&#34;},{&#34;一年&#34;:&#34; 2008&#34; &#34;值&#34;:&#34; 0.549449&#34;},{&#34;一年&#34;:&#34; 2009&#34;&#34;值&#34;:& #34; 0.548832&#34;},{&#34;一年&#34;:&#34; 2010&#34;&#34;值&#34;:&#34; 0.548215&#34;},{ &#34;一年&#34;:&#34; 2011&#34;&#34;值&#34; :&#34; 0.547536&#34;},{&#34;一年&#34;:&#34; 2012&#34;&#34;值&#34;:&#34; 0.547536&#34;} ]

你能帮我吗?

1 个答案:

答案 0 :(得分:0)

更改此

include("linegraph.html");   

To(作为最佳实践,如果&#34; include&#34;需要显示页面才使用require)

require("linegraph.html"); 

并添加到php的顶部

ini_set('display_errors', 1); 

您可能会发现您的页面丢失(至少在打开错误报告时您的生活会更轻松)

哦,也改变这部分,

for ($x = 0; $x < mysql_num_rows($query); $x++) {
    $data[] = mysql_fetch_assoc($query);
}

到此

  $data = array();
   while ( false !== ( $row = mysql_fetch_assoc($query))){
       $data[] = $row;
   }

它可能无法解决您的问题(如果没有其他html页面很难),但它是执行此类循环的首选方法。

更新:在这里你不能按照你的方式传递html和json(刚刚见到我),你必须选择一个。你的问题是结构问题,因为你不能同时做这两件事,json数据去哪里,它只是漂浮在html之上?抱歉,它不会像那样工作,要么你已经有了html并用返回的json数据填充它,要么你用它已经存在的数据构建html并将其发回。

更改此

echo json_encode($data);  
include("linegraph.html");

to(现在你发送有效的json / with html但是你必须将它组装到客户端)

 ob_start();
 include("linegraph.html"); 
 $html = ob_get_clean();

$responce = array( 'data'=>$data, 'html'=>$html );
echo json_encode($responce);  

至少你的输出会改变。很难说如何在没有其他页面的情况下再次这样做。

好的,,,,当我要求回复底部的某些内容时你做到了吗?

echo json_encode($data);  
include("linegraph.html");
mysql_close($server);
echo "works";

?> //id remove this end tag it's not needed and can cause problems if there is space ( line returns ) after it.  Because it will make you json which you may or may not need invalid.

Oyyy。这是......呃

if ( ! $query ) {
    echo mysql_error();
    die;
}

你可以这样做。

if ( ! $query ) {
    die ('Query error' . mysql_error());
}