我尝试在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;} ]
你能帮我吗?答案 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());
}