簡體   English   中英

創建折線圖以從數據庫中獲取數據

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM