トップページ⇒php
1001コメント320KB

【PHP】質問スレッドpart17【php】

■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん04/05/17 17:14ID:AT+bUkag
・PHP全般の質問スレです。
・新規質問の方は上げてください。age進行でお願いします。
・質問する際には環境も明記。
・正しい日本語で分かりやすく。
・レスがつかないからって逆切れする厨お断り。
・解決しなくてもこたえてもらったら礼を。


■本家
 http://www.php.net/

■日本 PHP ユーザ会
 http://www.php.gr.jp/

■PHP マニュアル
 http://www.php.net/manual/ja/

■PEAR マニュアル
 http://pear.php.net/manual/ja/

過去スレ, 関連スレ等>>2-4


抜けているものがあったら補足願います
0102nobodyさん04/05/21 14:36ID:fvdu+npM
初めまして、最近PHPを始めました。参照について教えてください。
「$a = &$b;」と「$a =& $b;」は同じと考えても良いのでしょうか?
また、同じだとすると何故書き方が二通りあるの?
0103nobodyさん04/05/21 14:56ID:???
>>102

細かいことは気にするな。
構文解析の時点で&$b と& $bは同じ扱いになる。
$a=
&
$b
;
と書いても一緒だ。
0104nobodyさん04/05/21 15:16ID:???
>>102
動作は同じだけど区別して書いている場合
$a = &$b; は"$bの参照"を渡す
$a =& $b; は"$b"の"参照渡し"
の意味合いを含ませているかも知れん。
0105102じゃないけど04/05/21 15:21ID:???
>>104
ごめん、意味合いの違いがわかんないw
いやうっすらニュアンスは伝わってくるような気はするんだけど...
微妙だw
010610204/05/21 15:55ID:???
>>103-104
回答、ありがとうございます!では気にしないことにします。
書き方が二通りあるからには生成されるコードが違うのかも?
と気になって仕方がありませんでした。
これで心安らかにコーディングできます。

>>104
これは確かに微妙。だけど言いたいことは何となく…
0107nobodyさん04/05/21 17:31ID:???
参照と言わずにアドレスと言え、知ったかが
0108nobodyさん04/05/21 18:31ID:???
>>107
PHPはCとは違うので、渡すのはあくまでも
リファレンスであってアドレスではない。
呼び名が違うということだけではなく、
仕組み上でもリファレンス≠アドレスだ。
0109nobodyさん04/05/21 19:37ID:???
近隣のCDショップ4店舗の価格比較データベースを遊びで作ってます。

disk-idにはCDを見分けるための番号
priceはそのCDの価格。
shopはいずれかのショップ名(A店,B店,C店,D店)
resultは順位

  disk_id | shop_id  |  price | result
--------+---------+-------+--------
D151    | shopC   | 1720  | 4
D151    | shopB   | 1680  | 3
D151    | shopA   | 1620  | 2
D151    | shopD   | 1590  | 1
D152    | shopA   | 2120  | 4
   :
   :
  〜
  〜

続く
0110nobodyさん04/05/21 19:38ID:???
現状はデータベースからの戻り値を配列として格納して
$disk_id
array([0]=>D151[1]=>D151[2]=>D151[3]=>D151[4]=>D152)

$shop_id
array([0]=>shopC[1]=>shopB[2]=>shopA[3]=>shopD[4]=>shopA)

$result
array([0]=>4[1]=>3[2]=>2[3]=>1[4]=>4)
とこんな感じになっているのですが、これをphpでテーブルに表示する際

+------+------+------+------+------+
| D151 | shopA | shopB | shopC | shopD |
+------+------+------+------+------+
      |   2  |   3  |   1  |   4  |
     +------+------+------+------+
とshopAからDと順に表示するにはどうしたらいいでしょう?アドバイスよろしくお願いします。
0111nobodyさん04/05/21 20:49ID:???

+------+------+------+------+------+
| D151 | shopA | shopB | shopC | shopD |
+------+------+------+------+------+
      |   2  |   3  |   4  |   1  |
     +------+------+------+------+

こうだ、スンマソ
0112nobodyさん04/05/21 21:15ID:???
>>110
データベースからの取り出し方が悪いわな。
shop_id順に並べるならそのように取り出すべきでは?

SELECT * FROM table WHERE disk_id='D151' ORDER BY shop_id;
0113nobodyさん04/05/21 21:28ID:???
おお、なるほど。
もしこれを一覧表示にするとなるとしてもSQL文でなんとかなりますでしょうか?

+------+------+------+------+------+
| D151 | shopA | shopB | shopC | shopD |
+------+------+------+------+------+
      |   2  |   3  |   4  |   1  |
     +------+------+------+------+
| D154 | shopA | shopB | shopC | shopD |
+------+------+------+------+------+

0114nobodyさん04/05/21 22:17ID:???
>>113
簡単に考えれば、
SELECT * FROM table ORDER BY disk_id,shop_id;
0115nobodyさん04/05/21 22:17ID:???
なるでしょ。SQL勉強してごらんよ。面白いよ。でもってここphpスレ
0116nobodyさん04/05/21 22:19ID:???
なるほど、ありがとうございました。
0117nobodyさん04/05/21 22:25ID:???
最初にAという文字が出てきたときにのみBに置き換えたい(二回目は置き換えない)
のですが、どういう風な記述をすればいいのでしょうか?
ereg_replaceを用いても、うまくできませんでした……。
0118nobodyさん04/05/21 22:32ID:???
>>117
ereg_replace("A(.*)","B\\1",$str);
0119nobodyさん04/05/22 00:16ID:???
最初にA
0120nobodyさん04/05/22 00:22ID:???
なんせ多次元はいれつがそのまんま戻り値で戻ってくるPHPだからな
いろいろ半端だねぇ
0121nobodyさん04/05/22 08:43ID:???
>>120
くわしくきかせてよ(w
0122nobodyさん04/05/22 09:16ID:FrQVvRLq
マンモス本改訂版(ttp://www.net-newbie.com/support/pdf2/にpdfファイル有)において、
3.3 クラスライブラリで汎用化のP137〜P143のサンプルプログラムを自環境で実行させたところ、(ソースの含まれるpdf:ttp://www.net-newbie.com/support/pdf2/PHP4_Part-2.pdf)
Warning: pg_num_rows(): supplied argument is not a valid PostgreSQL result resource in /home/hoge/public_html/lib/pgselect.inc on line 33
Warning: pg_num_fields(): supplied argument is not a valid PostgreSQL result resource in /home/hoge/public_html/lib/pgselect.inc on line 34
とエラーがでて動きません。
その前の章(3.2 PHPを使ってテーブル内容を表示する)のライブラリに分けないべたなスクリプトはちゃんと動作したのですが。
だいぶ見直してみましたが、エラーのでる原因が掴めません。
助言頂けませんでしょうか。
debianアンダーでapache2.0.49/PHP4.3.4の環境で動作させています。
よろしくお願いいたします。
0123nobodyさん04/05/22 09:49ID:???
>>122
pg_num_rowsの引数が有効なリソースじゃないっていうエラー
DBに接続できるてるのは確かなのか?
0124nobodyさん04/05/22 10:26ID:prWBgoDS
ダウンロードカウンタを設置しようと思って
http://www.csmoon.com/prog/dcnt.html ここにあるサンプルCGIを設置したんだけど
なぜかinternal Server Error が出まくって全然動かない

環境はRed Hat Linux + Apache 2.0.48です
パーミッション、転送法などが原因かな?
だれか教えて!
0125nobodyさん04/05/22 11:07ID:???
>>124
たいへん申し訳ありませんが、スレ違いです。
それPerl、ここPHP…。
0126nobodyさん04/05/22 12:15ID:FrQVvRLq
>>122です。
>>123
pg_connectは成功してます。たぶん。。。
>>122であげましたpdfファイルのP134〜P135のスクリプトではpg_num_rowsは動いてます。
多分引数の受け渡しがおかしいような気がするのですが、いろいろやってみてもうまくいかないのです。。。
0127nobodyさん04/05/22 12:31ID:???
>>126
pg_query()を実行している行と、エラーがでている行をよぉく見比べるか、いっそ晒してみ。
0128nobodyさん04/05/22 12:50ID:FrQVvRLq
>>122です。
pdfファイルからソースをコピペします。
ちょっと長いですがご容赦ください。

【ex2.php】
1 <html>
2 <head><title>Example 2</title></head>
3 <body>
4 <?php
5 require_once("pgselect.inc");
6
7 $sel = new PgSelect;
8 $sel->doSelect("SELECT day AS 年月日, tenki AS 天気, ondo AS 温度, uryou AS
雨量FROM otenki ORDER BY day");
9 ?>
10 </body>
11 </html>
0129nobodyさん04/05/22 12:51ID:FrQVvRLq
【def.inc】
<?php
define("DBNAME", "foo"); // データベース名
define("HOST", ""); // ホスト名
define("PORT", ""); // ポート番号
define("USER", ""); // ユーザ名
define("PASSWORD", ""); // パスワード
?>
0130nobodyさん04/05/22 12:52ID:FrQVvRLq
【pgselect.inc】
1 <?php
2 /*
3 * 検索結果をテーブル形式で表示する
4 */
5 require_once("dbconnect.inc");
6
7 class PgSelect {
8 var $db; // データベース接続ハンドル
9
10 // コンストラクタ
11 function PgSelect() {
12 $this->db = new DbConnect();
13 }
14
15 // テーブル開始タグの印字
16 function printTableHeader() {
17 print("<table border>\n");
18 }
19
20 // 列名の印字
21 function printHeader($i, $str) {
22 print("<th>$str</th>");
23 }
24
25 // データの印字
26 function printData($i, $str) {
27 printf("<td>%s</td>\n",htmlspecialchars($str));
28 }
0131nobodyさん04/05/22 12:52ID:FrQVvRLq
29
30 // 検索の実行
31 function doSelect($sql) {
32 $result = $this->db->doQuery($sql); // selectを実行
33 $rows = pg_num_rows($result); // 行数を取得
34 $columns = pg_num_fields($result); // 列数を取得
35
36 $this->printTableHeader();
37
38 for ($j = 0;$j < $rows;$j++) {
39 if ($j == 0) {
40 print("<tr>");
41 for ($i = 0;$i < $columns;$i++) {
42 $str = pg_field_name($result,$i); // 列名の取り出し
43 $this->printHeader($i, $str);
44 }
45 print("</tr>\n");
46 }
47 print("<tr>");
48 for ($i = 0;$i < $columns;$i++) {
49 $str = pg_fetch_result($result,$j,$i); // データの取り出し
50 $this->printData($i, $str);
51 }
52 print("</tr>\n");
53 }
54 print("</table>\n");
55 return true;
56 }
57 }
58 ?>
0132nobodyさん04/05/22 12:53ID:FrQVvRLq
【dbconnect.inc】
1 <?php
2 /*
3 * PostgreSQLデータベースへの接続を行なうクラス
4 */
5 require_once("def.inc");
6
7 class DbConnect {
8 var $dbname = DBNAME; // データベース名
9 var $host = HOST; // ホスト名
10 var $port = PORT; // ポート番号
11 var $user = USER; // ユーザ名
12 var $password = PASSWORD; // パスワード
13 var $con = false; // コネクションハンドル
14
15 function DbConnect() { // コンストラクタ
16 $this->getConnection();
17 }
18
19 // コネクションハンドルを返す
20 function getConnection() {
21 if ($this->con == false) {
22 return($this->doConnect());
23 }
24 return($this->con);
25 }
26
0133nobodyさん04/05/22 12:54ID:FrQVvRLq
27 function doConnect() {
28 // データベースに接続する
29 $constr = "";
30 if ($this->dbname != "") {
31 $constr .= "dbname={$this->dbname} ";
32 }
33 if ($this->host != "") {
34 $constr .= "host={$this->host} ";
35 }
36 if ($this->port != "") {
37 $constr .= "port={$this->port} ";
38 }
39 if ($this->user != "") {
40 $constr .= "user={$this->user} ";
41 }
42 if ($this->password != "") {
43 $constr .= "password={$this->password} ";
44 }
45
46 @$this->con = pg_connect($constr);
47 if ($this->con == false) {
48 print("データベースに接続できませんでした。理由: $php_errormsg<br>\n");
49 exit;
50 }
51 return($this->con);
52 }
53
0134nobodyさん04/05/22 12:55ID:FrQVvRLq
54 // データベースとの接続切断
55 function doClose() {
56 if ($this->con != false) {
57 pg_close($this->con);
58 $this->con = false;
59 }
60 }
61
62 // データベースへの問い合わせの実行
63 function doQuery($sql) {
64 if ($this->con == false) {
65 $this->doConnect();
66 }
67 @$result = pg_query($this->$con, $sql); // selectを実行
68 if ($result == false) {
69 printf("SQL($sql)の実行に失敗しました。理由: " . pg_last_error($this->con));
70 return false;
71 }
72 return $result;
73 }
74 }
75 ?>
0135nobodyさん04/05/22 12:59ID:???
SQLがダメぽ

("SELECT day AS 年月日, tenki AS 天気, ondo AS 温度, uryou AS
雨量FROM otenki ORDER BY day");

雨量とFROMの間にスペースが無い
あとAS 〜でエイリアス名つけるのはいいけど英字にしといた方が無難

0136nobodyさん04/05/22 12:59ID:???
2レス以上になると、テキストでうpしてくれたほうが遥かに見やすい
これは単なる荒らしにしか見えん
0137nobodyさん04/05/22 13:19ID:FrQVvRLq
>>122です
>>135
元はそう印刷されてましたが直してます。
そのまま書き込んじゃってすみません。
>>136
すみませんでした。
uk.geocities.com/tdwconvmetwbmxkt/ex2.zip
うpしました。
0138nobodyさん04/05/22 13:35ID:???
@$result = pg_query($this->$con, $sql);

$this->conでは?
0139nobodyさん04/05/22 13:57ID:???
キタ━━━━(゚∀゚)━━━━ッ!!
>>138さん、ありがとうございました。
まったく気がつきませんでした。。。
0140nobodyさん04/05/22 14:18ID:???
>>139
作成中のスクリプトには
error_reporting(E_ALL);
これを最初に入れろ。これだけでエラーはずいぶん探しやすくなる。
上記のならUndefined variable : con とNOTICEエラーが出るし。
0141nobodyさん04/05/22 14:22ID:???
Noticeエラーoffはよろしくないよ
nullの判定ができなくなる
014214104/05/22 14:23ID:???
って、作成中ね
簡単なデバッグ作業として入れろってことか

早とちりスマソ・・・
0143nobodyさん04/05/22 14:28ID:???
PHPとDBに関しての質問です。DB接続と切断のタイミングですが、

DB接続>処理A>DBからの戻り値をセット>DB切断
 ・
別処理
 ・
DB接続>処理B>DBからの戻り値をセット>DB切断
 ・
別処理
 ・
DB接続>処理C>DBからの戻り値をセット>DB切断

この方法と

DB接続>処理A>DBからの戻り値をセット
 ・
別処理
 ・
DB接続>処理B>DBからの戻り値をセット
 ・
別処理
 ・
DB接続>処理C>DBからの戻り値をセット>DB切断

この場合、どちらがベストなんでしょうか?
0144nobodyさん04/05/22 14:30ID:???
訂正

上と下の処理の違いで下の処理では

DB接続>処理A>DBからの戻り値をセット
^^^^^^^
これはナシとみなしてください。
0145nobodyさん04/05/22 14:36ID:???
>144
両方試して時間測ってみろ
何でも人に聞いてばかりだと進歩しねえぞ
0146nobodyさん04/05/22 14:50ID:???
自分的にはDB接続/切断は出来るだけ控えたいので当然下の処理方法になりますが、

PHPが処理中にユーザがブラウザを閉じて処理を強制的に終了する

これを多用された時、サーバの負担及びDBの安全性はどうなるのか?という疑問が出たから質問したのです。処理速度はダントツに下の方法なのは当たり前です。

ここで質問したかったのは「安全策と処理のバランス」です。
0147nobodyさん04/05/22 14:56ID:???
phpはスクリプト終了時に自動的にmysqlから切断する

ていうか、スレ違い
0148nobodyさん04/05/22 15:06ID:???
>>143
一応訊いとくけど、上のパターンも下のパターンも
共にひとつのPHPプロセスに処理がまとまってる前提だよな?

単純にはDBのコネクションにはコスト(PCの何らかの資産を使うということ)
が掛かるから頻繁に接続/切断はしない方が良い。それは接続/切断をしない
作りをするとともに、接続を継続しても支障の無い環境も整備するということ。

PHPでは下のような作りをする必要はまず無いが、システムによっては下の
パターンにならざるを得ないケースもある。145に言うとおり自分の頭で
考えられないときは、自分の手で試すことも重要。他人を余り信用はするな。
0149nobodyさん04/05/22 15:18ID:???
強制的に終了された時の安全性のためにDBを使うんじゃないのかな
仮に一回の処理毎にPHPレベルで切断しても
処理してる途中に切られる可能性もあるわけで
よっぽどクリティカルなシステムでもない限り
そこまで気にしなくていいんじゃないかと

0150nobodyさん04/05/22 15:21ID:???
>>146
PHPのプロセスは、HTTPコネクションと連動して動いている訳ではない。
特に切断・終了のタイミングの点で。

データベースのロックの解除処理だけは気をつけろ。
015115004/05/22 15:25ID:???
ああ、サーバのHTTPコネクションとは連動してるか。
ユーザがブラウザでアクセスしてる/してないかが
HTTPコネクションとは必ずしも連動してない。
0152nobodyさん04/05/22 15:33ID:???
>>122です。
>>140さん、>>141さん、ありがとうございます。
勉強になりました。
0153茶番 ◆4JCPHWjCgk 04/05/22 22:27ID:hmZH94bq
PHPを習うのに、わかりやすい、本やWEBサイトを教えてください。
0154nobodyさん04/05/22 22:32ID:???
>>153
ttp://jp.php.net/manual/ja/index.php
0155茶番 ◆4JCPHWjCgk 04/05/22 22:38ID:hmZH94bq
>>154
どうもありがとうございます。
0156nobodyさん04/05/22 23:28ID:???
>>122で紹介してるの書籍のまるまるpdfでいいですよー
結局買っちゃいましたが。
0157Parse error04/05/22 23:51ID:???
すいません。該当スレッドとして適切でなければ誘導 オナガイ 致します。

えと、bbsに書き込みした方のサイトを「HP」という字ではなく、
home.gif なんかのアイコンにしようと思い、弄くっております。

// フォーマット
if($url) $url = "<a href=\"http://$url\" target=\"_blank\">".HP."</a>";

となっておりましたので、「HP」の所に
<img src="home.gif" width="11" height="17">
と入れましたら、鯖に解析してやらねぇと言われました・・・ (´Д`;)
ぬーんと思い
<img src=\"cup_ra.gif\" width=\"11\" height=\"17\">
などと斬新な事もしてみましたが、やっぱり鯖に ( ´,_ゝ`)プ と言われ・・・

こんな幼稚園質問で申し訳ありませんが、ご教授頂けないものかとお願いに上がりました。
一々ご面倒とも思いますので、参考場所の手引きでも頂ければ幸いなのですが・・・
宜しくお願いいたします。
0158nobodyさん04/05/22 23:55ID:???
なんかふざけた聞き方だな。
つまらんネタまじりじゃなくどうやったかズバリ書けばいいだろうが。
0159nobodyさん04/05/22 23:58ID:???
if($url) $url = "<a href=\"http://$url\" target=\"_blank\"><img src="home.gif" width="11" height="17"></a>";
0160nobodyさん04/05/22 23:58ID:???
ごめん間違えた。
if($url) $url = "<a href=\"http://$url\" target=\"_blank\"><img src=\"home.gif\" width=\"11\" height=\"17\"></a>";
0161Parse error04/05/23 00:08ID:???
あ、ありがとうございます!
微妙に惜しい・・・ 座布団半分って感じだったのですね・・・
さっそくやってみます! o(´ω`*) ありがとうございました!

>158
ごめんなさい。 素だった・・・
0162nobodyさん04/05/23 02:35ID:???
http://fol.axisz.jp/php/は既出?
0163nobodyさん04/05/23 03:15ID:???
>>162
エディタは別にどうでもいいけどそのサイトのデザインがすごく綺麗だな。
0164nobodyさん04/05/23 03:22ID:XXLnBAc7
チェックの結果は以下のとおりです。
http://fol.axisz.jp/php/ を HTML4.0 Transitional としてチェックしました。
192個のエラーがありました。このHTMLは -161点です。タグが 18種類 257組使われています。文字コードは Shift JIS のようです。
0165nobodyさん04/05/23 03:54ID:???
lint厨現る。
0166nobodyさん04/05/23 04:51ID:???
Markup Validation Servicev0.6.6 Skip Navigation
Results
Address: http://fol.axisz.jp/php/
Encoding: shift_jis (detect automatically)
Doctype: HTML 4.0 Transitional (detect automatically)
Errors: 67
http://validator.w3.org/check?uri=http%3A%2F%2Ffol.axisz.jp%2Fphp%2F&charset=shift_jis+%28Japanese%2C+Win%2FMac%29
0167nobodyさん04/05/23 04:56ID:???
PHPエディタって、どうよ?
http://pc5.2ch.net/test/read.cgi/php/1079460638/
0168nobodyさん04/05/23 05:29ID:???
ファイルの中身を上から順に読んで条件Aに一致するデータを変数xに格納して表示、
ファイルの中身を上から順に読んで条件Bに一致するデータを変数xに格納して表示、
ファイルの中身を上から順に読んで条件Cに一致するデータを変数xに格納して表示、

と複数回ループさせるのと、

ファイルの中身を上から順に読んで条件Aに一致するデータを変数aに格納、
条件Bに一致するデータを変数bに格納、
条件Cに一致するデータを変数cに格納、
最後に変数を順に表示

と一回のループで一度にやってしまうのとどっちが処理は速いのでしょうか。

ちなみに読み込むファイルは150行程度、条件は10個程度で変数は1条件あたり30個くらい使うのですが・・・
0169nobodyさん04/05/23 06:05ID:???
>>168
一通りファイルを読む回数が前者だと三回、後者だと一回だから後者の方が速そうだとは思うね。
0170nobodyさん04/05/23 08:52ID:???
>>168
ベンチ取れば?
microtime()〜1000回くらいループ〜microtime()
0171nobodyさん04/05/23 15:25ID:???
xemacs で php-mode を使っています。
インデント幅を 2から 4に変更したいんですが、どうすればいいんでしょうか?
pearのコーディング規約とかも 4 にしなさいみたいなこと書いてあったのに
デフォルトはなんで2になってるんだろう。

「emacs php-mode インデント 幅」でググるとなぜか xyzzyの情報ばかり...
017217104/05/23 15:33ID:???
http://itbtech.itboost.co.jp/man/php_man/pear.standards.html
に

(defun php-mode-hook ()
(setq tab-width 4
c-basic-offset 4
c-hanging-comment-ender-p nil
indent-tabs-mode
(not
(and (string-match "/\\(PEAR\\|pear\\)/" (buffer-file-name))
(string-match "\.php$" (buffer-file-name))))))


って書いてあるけど、これって書き方の例だよね?
これをそのまま .xemacs.el に書いてもダメだた。
0173nobodyさん04/05/23 16:56ID:???
>172
PHPに関連してるようでスレ違いじゃねえか?
なぜemacsスレで聞かない?
0174nobodyさん04/05/23 19:03ID:???
>>166
http://validator.w3.org/check?uri=http%3A%2F%2Fyahoo.co.jp&charset=euc-jp+%28Japanese%2C+Unix%29
0175nobodyさん04/05/23 20:13ID:???
データベースから順位1〜4($res)と、その順位を取った回数($count)を配列として受けています。

1位〜4位まで1回ずつとったモノであれば配列$resにも1,2,3,4と入るのですが
1位を2回他が2位、3位だとすると配列$resの値が1,2,3となってしまいます。

これが嫌なので配列$resの中に、1から4の中で入っていない数値があった場合に
その順位を$resに、$countに0を入れたいのですが中々うまくゆきません。

どなたかアドバイスお願いします。
何の参考にもなりませんが、スクリプトはこんな感じで書いてしまいました。。

for($i = 1; $i < 5; $i++){
if (in_array($i, $res)== false){
$res[] = $i;
$count[] = 0;
}
}
0176nobodyさん04/05/23 21:05ID:???
GDをつかってゼロからスクリプト上で
画像を作り、その画像をデータベースに
保存しようとしているのですが、
スクリプト上で作った画像の
バイナリデータの取得方法がわかりません。
現在は一度ファイルに書き出して、
それを読み込んでいますが
なんかむなしさを感じます。
いい方法が在れば教えてください。
0177nobodyさん04/05/23 21:17ID:???
>>175
順位1〜4と、その順位を取った回数と
"その"というところで関連があるのに
何故2次元配列や順位を添字に使った配列にしないのだ?

現状のやり方だと
>1位を2回他が2位、3位だとすると配列$resの値が
期待する$resは{2,1,1,0}か?

データベースから順位の回数を取得するのはどうやっている?
SQLでcountか?
0178nobodyさん04/05/23 21:41ID:???
>>175
データベースの使い方がまずいんじゃね?
テーブルとSQLを晒すよろし。
017917504/05/23 22:52ID:???
不可能だということがわかりました。
一度ファイルに出力しなきゃだめなのね。。。
0180nobodyさん04/05/23 22:58ID:???
いた違い 失礼して。

  disk_id | shop_id  |  price | result
--------+---------+-------+--------
D151    | shopC   | 1720  | 4
D151    | shopB   | 1680  | 3
D151    | shopA   | 1620  | 2
D151    | shopD   | 1590  | 1
D152    | shopA   | 2120  | 4

SQLは
select result, count(result) from disk_DB where shop id = shopA group by result;
てかんじです。
0181nobodyさん04/05/23 23:34ID:???
phpでグラフを作成するライブラリってみなさん何使ってますか?
0182nobodyさん04/05/23 23:45ID:???
イメタグでパーセント使えばいいじゃん
0183nobodyさん04/05/23 23:48ID:???
>>176
出力制御関数ってバイナリセーフじゃなかったか?
PHPを使うならやって当然だろうから、既に試しているかも知れんが・・・
ob_start()
(例えば)imagepng($image_res)
ob_get_contents()→DBに登録
ob_end_clean()
とかでできんのかな?

>>179
レス番合ってる?
0184nobodyさん04/05/24 00:05ID:???
>>180
やっぱり先日の分か。
板違いなので付け加えなかったんだが、そもそもresultをDBに入力するのがおかしい。
priceが変わるとresultも変えなきゃならんので、resultは相関サブクエリで済ますべきだろ。

disk_DB(disk_id,shop_id,price)
SELECT *,(SELECT count(*) AS result FROM disk_DB WHERE disk_id=T1.disk_id AND price<= T1.price) FROM disk_DB AS T1;

で、count値を0にしたい件だが、resultが必ず1から4までどこかにはある。というのであれば、
disk_DB(disk_id,shop_id,price,result) ※SQLが長くなるのでとりあえずresult有りで
SELECT DISTINCT result,COALESCE(T1.cnt,0)AS count FROM disk_DB
 LEFT JOIN (SELECT result,count(result)as cnt FROM disk_id WHERE shop_id='shopA' GROUP BY result)AS T1 USING(result);
こんなん浮かびましたw
>>180の例だけだと
result | count
-----+------
  1 |  0
  2 |  1
  3 |  0
  4 |  1
018518404/05/24 00:13ID:???
あ、そうそう。
resultというのがpriceの価格順という意味ならサブクエリで済ますべきと思っているので、
resultが別の意味であるなら、入力(カラム)は必要です。
0186_04/05/24 00:46ID:???
>>182
( ゚Д゚) ポカーン
そういう事聞いてるんじゃないだろう。

まぁ >>182 は質問の作り方が悪かったな。
PHP-users にでも投げてみたら?
0187nobodyさん04/05/24 00:58ID:???
>>184

ベリーサンクスコ!あと板違いすいません。

作成当初のスタンスはDBに不足点があってもPHPで補えるだろうなと思っていたんですが、実はDBの設計て
とても重要だったんだということを思い知りました。
184さんの意見を参考にDB設計から見直す必要あり、と感じた今日この頃。

てかSQL文なげーw
0188nobodyさん04/05/24 01:49ID:XP231UgD
質問です。
「0」を文字として認識させることは出来るのでしょうか?

つまり、
-----
if("0"=="000"){} //これをfalse
if("0"=="0"){} //これをTrue
-----
な感じです。
0189nobodyさん04/05/24 01:53ID:???
>>188
if("0"==="000"){} //false
if("0"==="0"){}   //true
0190nobodyさん04/05/24 01:56ID:???
>>188
if("0" === "000")
0191nobodyさん04/05/24 02:01ID:???
>>189
ありがとうございました。
初歩的な質問でした。
懺悔です。悔い改めるです。
0192nobodyさん04/05/24 02:01ID:???
>>190さんも、ありがとうです。
0193nobodyさん04/05/24 02:23ID:???
jj
0194nobodyさん04/05/24 02:45ID:???
>>181
俺も簡易的にイメタグやテーブル使ったりするな。
テーブルはブラウザで見え方が違うので厄介ではあるが。

JpGraphは色々あって便利なんだけど、
改造しようとソースに手を出すと嵌るので、
欲しいグラフの種類が少なくて固定できる
(値じゃなくて形がね)のなら、自分で作った方が楽。
HotScriptにもいくつか転がってる。
0195nobodyさん04/05/24 19:04ID:nTbKpLsJ
PDFlibに関する質問です(環境はWinXP+PHP4.3.6)。

PHP4.3.6からPDFlibのバージョンが5.03(PDF 1.4)にアップグレードしていますが、
以前は、
$enc = mb_internal_encoding();
$txt = chr(254).chr(255).mb_convert_encoding("日本語のしおり","UTF-16",$enc);
pdf_add_bookmark($pdf, $txt, 0, 0);

というコードで日本語のしおりが表示できたのですが、PDFlibが新しくなってからは、

Fatal error: PDFlib error: [2602] PDF_add_bookmark: Code page '932' not supported

というエラーで落ちてしまうようになりました。
Dosプロンプトで作成しているので、usモードにして再作成してみましたが、
状況は変わりませんでした。
対処法をご存知の方、ご教授願えませんでしょうか?



0196gh04/05/24 20:17ID:???
素朴な質問なんですけど、

file_get_contents 関数と
file_put_contents 関数は

読み込み・書き出しの時ファイルロックしているのでしょうか?
0197nobodyさん04/05/24 22:44ID:XP231UgD
質問です。

配列に項目名が入っています。
-----
$array = array("食べ物", "野菜", "ワイルド系", "キャベツ");
-----
で、これを
-----
$array = array(">食べ物", ">>野菜", ">>>ワイルド系", ">>>>キャベツ");
-----
と、項目名の前に、「>」を"配列番号+1"個付加したいのですが、
どのようにすればいいのでしょう。
0198nobodyさん04/05/24 22:54ID:???
>>197
項目名の前に、「>」を"配列番号+1"個付加するようなスクリプトを書いてください。
制御構造を使っても、配列関数を使っても、好きな方法で構いません。
0199nobodyさん04/05/24 23:04ID:???
$arr = array("食べ物", "野菜", "ワイルド系", "キャベツ");
for ( $i=0; $i<count($arr); $i++ ) {
$arr[$i] = str_repeat('>', $i+1).$arr[$i];
}
print_r($arr);
0200nobodyさん04/05/24 23:31ID:???
>>199さん
ありがとうございます。

>>198さん
str_repeatという存在を知りませんでした。
というか、PHP関数の全てを把握し切れていません。
やはり、覚えるしかないのでしょうか?(そんな気がする)
0201nobodyさん04/05/24 23:39ID:???
>>200
別に、str_repeat使わずとも簡単に出来るし、
あれだけ整備されたマニュアルが提供されているのだから、
経験積めば意図する関数があるかどうか雰囲気的にわかる。
■ このスレッドは過去ログ倉庫に格納されています