dポイントプレゼントキャンペーン実施中!

MySQLから取得した値をPHPを使って配列で渡してグラフ表示させようとしているのですが、MySQLから取得した値をPHPを使って配列で渡す方法が全く分かりません。
プログラム初心者で、サンプルプログラムを組み合わせて、とりあえず下記のようなプログラムを書いてみたのですうまくいきません。
めちゃくちゃなプログラムでどこから手をつけていいかも分からないかもしれませんが、今週中に何とかしなくてはなりません。皆さんのお力をお借しください、お願いします。

データベースに接続し値を取得↓
<?php
// データベースへの接続情報を設定します。
$db_user = "root";
$db_pass = "590312";
$db_host = "localhost";
$db_name = "zikokanrinote";

$id = $_REQUEST['id'];
$day_s = $_REQUEST['day_s'];
$day_e = $_REQUEST['day_e'];
$study = $_REQUEST['study'];

// MySQLとの接続を行います。
$db = mysql_connect($db_host, $db_user, $db_pass)
or die("Cannot connect to database");

// クライアントのキャラクタセットをUTF-8に変更します。
mysql_query("SET NAMES utf8");

// データベースを選択します。
mysql_select_db($db_name)
or die("Cannot select database");

if(!get_magic_quotes_gpc()){
$id = mysql_real_escape_string($id);
$day_s = mysql_real_escape_string($day_s);
$day_e = mysql_real_escape_string($day_e);
$study = mysql_real_escape_string($study);
}
$sql = "select result FROM result where ((id='$id') and (date between '$day_s' and '$day_e') and (study_code='hakike'))";

// SQL文を実行します。
$result = mysql_query($sql)
or die("Query failed");

// フィールドの数をカウントします。
$fcnt = mysql_num_fields($result);

// カラム名の取り出しを行います。
// データの取り出しを行います。
// mysql_fetch_arrayは結果セットの行データを
// 配列もしくはカラム名をキーにした連想配列で返します。
while($rows = mysql_fetch_array($result))
?>

グラフを表示させる↓
<?
// Here's where we call the chart, and return the encoded chart data
$test_data=array($rows);
echo "<img src=http://chart.apis.google.com/chart?chtt=".urlenc …吐き気")."&cht=lc&chs=450x125&chd=".chart_data($test_data).">";

// Here's an array containing some data to plot

// And here's the function

function chart_data($values) {

// Port of JavaScript from http://code.google.com/apis/chart/
// http://james.cridland.net/code

// First, find the maximum value from the values given

$maxValue = max($values);

// A list of encoding characters to help later, as per Google's example
$simpleEncoding = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789';

$chartData = "s:";
for ($i = 0; $i < count($values); $i++) {
$currentValue = $values[$i];

if ($currentValue > -1) {
$chartData.=substr($simpleEncoding,61*($currentValue/$maxValue),1);
}
else {
$chartData.='_';
}
}

// Return the chart data - and let the Y axis to show the maximum value
return $chartData."&chxt=y&chxl=0:|0|".$maxValue;
}

?>

A 回答 (2件)

すこし修正箇所が多そうです。



まず確認したいのが、Mysqlが文字化けしてますか?
ちゃんとphp,mysqlが設定されていれば
mysql_query("SET NAMES utf8");
こんなことしなくてもちゃんと表示されるはずです。

$idとかにmysql_real_escape_stringの関数が入ってますが、
これいりますか?別にバイナリデータとかじゃないですよね?
たとえば文字列とかなら、出力時にXSS対応をすればいいのかな?っておもいます。


$sql = "select result FROM result where ((id='$id') and (date between '$day_s' and '$day_e') and (study_code='hakike'))";

print $sql;
して出たものを、一度mysql本体またはphpMyadimnを開いて、ながしてみてください。そっちで通らなければ、もちろんmysql_queryしても通りません。

while($rows = mysql_fetch_array($result))
こっから$rowsの中に、dbに入っているものが配列で入ってくるんですが。
回ってない,下記に例を乗せておきます。


$sqlが間違ってなくて、のことですが、
$sql = "SELECT * FROM xxxx ごにょごにょ";
$res = mysql_query($sql);
if(!$res){
print "SQLが間違っています。";
}

while($row = mysql_fetch_array($res)){
var_dump($row);
}

これで一応表示はされます。

なんか他にもいろいろ突っ込みどころがありそうですが、
グラフを表示させるスクリプトは$valueに値を入れないといけないのでは
無いですかね?質問者さんの書き方だと、dbから、resultの中身しか取ってきていないようなので、コレがグラフのデータになるんでしょうか?


最後に、$test_data=array($rows);
$rowはすでに配列です。
array($row)は配列に配列を入れることになって意味無いと思いますが・・
しかも一行下で、出力させようとしていますが、配列を表示させてもArrayとしか出ないです。

ざーっと見てこんな感じでしょうか?
他に補足のある方宜しく御願い致します。
たぶんあると思う。前途多難ですが、がんばってください。

この回答への補足

たくさんのご意見ありがとうございます。
MySQLから取得した値をGoogle Chart APIを利用してグラフ表示させようとしています。
$sqlは表示することができました。
$rowはすでに配列ということなので、
$test_data=array($rows);
echo "<img src=​http://chart.apis.google.com/chart?chtt=".urlenc …​吐き気")."&cht=lc&chs=450x125&chd=".chart_data($test_data).">";
の部分を、
$test_data=array($rows);➜消した
".chart_data($test_data)."➜".chart_data($rows)."としたのですがグラフ表示はできませんでした。
自分の勉強不足を棚上げして申し訳ありませんが、更なるご協力をお願いします。
参考までに・・・このプログラムでこんな感じのグラフが描けるのでこれを利用してMySQLからの値を取得して表示させたいと思っているのですが・・・
<?
// Here's where we call the chart, and return the encoded chart data
$test_data=array(1,2,3,4,5,6,);
echo "<img src=​http://chart.apis.google.com/chart?chtt=".urlenc …​吐き気")."&cht=lc&chs=450x125&chd=".chart_data($test_data).">";

// Here's an array containing some data to plot

// And here's the function

function chart_data($values) {

// Port of JavaScript from ​http://code.google.com/apis/chart/
// ​http://james.cridland.net/code

// First, find the maximum value from the values given

$maxValue = max($values);

// A list of encoding characters to help later, as per Google's example
$simpleEncoding = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789';

$chartData = "s:";
for ($i = 0; $i < count($values); $i++) {
$currentValue = $values[$i];

if ($currentValue > -1) {
$chartData.=substr($simpleEncoding,61*($currentValue/$maxValue),1);
}
else {
$chartData.='_';
}
}

// Return the chart data - and let the Y axis to show the maximum value
return $chartData."&chxt=y&chxl=0:|0|".$maxValue;
}

?>

補足日時:2008/12/09 19:22
    • good
    • 0
この回答へのお礼

ホントにありがとうございます。
ホントにより必死です。
なので頑張りますのでお願いします。

お礼日時:2008/12/09 19:44

グラフ用のライブラリを利用しているようですが、


ライブラリの仕様は理解されているのでしょうか?
もし理解していないのでしたら、ドキュメントをよく読んで
どのような配列が必要なのかを理解してください。
理解したうえで、配列の作り方がわからないのであれば、
MySQLのテーブルの例とそこからどのような配列にもっていきたいかを
書くとよいでしょう。

なんか中途半端なソースをだらだら丸投げされても的を射た回答は
つきにくいとおもいます。

この回答への補足

適切なご指摘ありがとうございます。
時間がないとは言え自分の勉強不足は否めません。
テーブルの構造は
id|date|study_code|result|
と言う構造になっていて、
現在、入力フォームからID=1000、期間20080510~20080530の間のhakikeのresultの値を取り出してグラフ表示させようとしています。
グラフ表示をサンプルを見ると
$test_data=array(1,2,3,4,)とすることでグラフが表示できていたので$test_data=array($rows)としてしまったのですが・・・下のse-nabeさんのご指摘から安易な考えだと分かりました。
きちんと答えられたか分かりませんが、
自分の無知を棚に上げて申し訳ありませんがご協力お願いします。

補足日時:2008/12/09 19:07
    • good
    • 0
この回答へのお礼

ホントにありがとうございます。
ホントに必死です。
なので頑張りますのでお願いします。

お礼日時:2008/12/09 19:45

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!