[英]Creating a line graph taking data from database
我試圖在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是數據庫中稱為“氣候”的表的名稱。 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的輸出,如下所示。
{“ year”:“ 1995”,“ values”:“ 0.525999”},{“ year”:“ 1996”,“ values”:“ 0.570037”},{“ year”:“ 1997”,“ values”:“ 0.563966“},{” year“:” 1998“,” values“:” 0.513896“},{” year“:” 1999“,” values“:” 0.5346“},{” year“:” 2000“,” values“:” 0.552691“},{” year“:” 2001“,” values“:” 0.545319“},{” year“:” 2004“,” values“:” 0.543972“},{” year“:” 2005“,” values“:” 0.543299“},{” year“:” 2006“,” values“:” 0.546682“},{” year“:” 2007“,” values“:” 0.550066“},{” year“:” 2008“,” values“:” 0.549449“},{” year“:” 2009“,” values“:” 0.548832“},{” year“:” 2010“,” values“:” 0.548215“ },{“ year”:“ 2011”,“ values”:“ 0.547536”},{“ year”:“ 2012”,“ values”:“ 0.547536”}}
請你幫我一下。
改變這個
include("linegraph.html");
要(作為最佳實踐,如果需要“ include”來顯示頁面,則只需使用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");
到(現在您將使用html發送有效的json /,但必須在客戶端進行組裝)
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.
好的 這是..呃
if ( ! $query ) {
echo mysql_error();
die;
}
您可以這樣做。
if ( ! $query ) {
die ('Query error' . mysql_error());
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.