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件)
- 最新から表示
- 回答順に表示
No.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;
}
?>
No.1
- 回答日時:
グラフ用のライブラリを利用しているようですが、
ライブラリの仕様は理解されているのでしょうか?
もし理解していないのでしたら、ドキュメントをよく読んで
どのような配列が必要なのかを理解してください。
理解したうえで、配列の作り方がわからないのであれば、
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さんのご指摘から安易な考えだと分かりました。
きちんと答えられたか分かりませんが、
自分の無知を棚に上げて申し訳ありませんがご協力お願いします。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- MySQL 参考書に従って入力したつもりでしたが、最後はエラーがでました。 1 2022/09/28 03:45
- JavaScript GoogleChart 階層ごとのブロックの長さを個別に設定したい 1 2022/07/06 14:27
- PHP php エラー 2 2022/10/23 16:43
- PHP if(preg_match("/[^0-9]/",$gu_d)){意味を教えてください。 1 2022/05/06 05:37
- その他(プログラミング・Web制作) pythonでDBのカラム名で取得したオブジェクトの値を表示したい 1 2022/05/13 03:41
- MySQL php テーブルを作れない 2 2022/11/17 18:22
- PHP php テーブルが作成できない 1 2022/11/17 23:41
- PHP DBのハッシュ化したパスワードをpassword_verifyで戻し照合したのですが上手く行きません 2 2023/02/06 13:24
- MySQL MySQLのテーブル作成でハイフン - は使用できないのでしょうか? 2 2022/10/21 16:50
- Excel(エクセル) PHPプログラムをエクセルに張り付けると検索ボックスがでてくる! 3 2022/05/08 07:10
関連するカテゴリからQ&Aを探す
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
「mysqlclient」の事が分からな...
-
MySQLのデータを使ってプルダウ...
-
sqlの検索結果件数を知りたい
-
複数のSQLを合体させる方法
-
MySQLにデータが書き込まれない
-
CSVをダウンロードさせた際、CS...
-
住所録を作りたい
-
PHPとMySQLの連携に関する質問
-
すいません。
-
PHPで絞り込み検索結果の件数を...
-
XAMMPが起動しません。
-
インクルードによる不具合
-
MySQLでデータベースにデータin...
-
Pro*Cの構文エラー
-
エクセルVBAについて
-
JAVA SQLServerException 列名 ...
-
実行時エラー3131 FROM 句の構...
-
PHPでフォームからデータDBに書...
-
アラートでyes noを作りたいです。
-
VBAをつかってクエリの情報を抽...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
テーブルに入っているデータと...
-
sqlから多次元配列に要素を格納...
-
SQL文2つ実行
-
phpのエラーについてです
-
stringaddslashes 半角¥が消える
-
mysql_fetch_objectのエラー
-
XAMPPで画面が真っ白になります。
-
XAMMPが起動しません。
-
縦に長い<table>でなく横に長い...
-
PHP+mysqlでSQL文に文字数制限...
-
会員登録したらメールが送られ...
-
Resource id #3 をフィールドの...
-
MySQLのデータを使ってプルダウ...
-
PHPで絞り込み検索結果の件数を...
-
MySQLのUPDATE実行結果を受け取...
-
mysql_query等でレコード数を変...
-
住所録を作りたい
-
DB(MySQL)から複数行のデータを...
-
CSVをダウンロードさせた際、CS...
-
SQLの結果が返ってこない
おすすめ情報