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

【PHP】下らねぇ質問はID出して書き込みやがれ 86

■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん2009/07/31(金) 21:19:01ID:???
質問者はまず>>1を良く読むこと(必須!)
過去スレ、関連スレ、FAQなどは>>2-10辺り
次スレは>>980が立てる。10分以内に立たない場合、宣言してから立てたい人が立てること。

◆前スレ
【PHP】下らねぇ質問はID出して書き込みやがれ 85
http://pc11.2ch.net/test/read.cgi/php/1245074032/

◆質問用テンプレ
【OS名】vine linux
【PHPのバージョン】php5.26
【連携ソフトウェア】mysql
【質問内容】

◆質問する時の注意
・ スレを上げて自分のIDを表示させること。(メール欄に何も記述しない。専ブラのsageチェックを外す)
・ 己の行った操作、変更などを詳しく明記すること。
・ エラーメッセージはそのまま表記すること。「エラーが出ます」だけでは回答不可。
・ 質問者として、態度をわきまえること。
・ 事前に関連リンクの公式マニュアル、リファレンス本くらいはちゃんと目を通しておくこと。
(PHPで最良の教本はこの公式マニュアル。市販の書籍は嘘が多いので鵜呑みにしない。)

◆質問後の注意
・2回目以降は最初に質問した際のレス番号を入れて、偽者防止に必ずIDを表示させること。
・解決しなくても回答をもらった場合はお礼を言うこと。
 (荒らし、煽りは除く。煽られたときも、無闇に反論せずスルーすること。)

◆回答者への注意
・誰にレスしているのか分からないと困るので、>>(アンカー)をつけて回答すること。

【その他諸注意】
・SQL・正規表現・PEAR・テンプレート(Smarty等)・フレームワークは各該当スレへ
05285122009/08/19(水) 00:09:42ID:????2BP(931)
>>526-527
うおっ、ありがとうございます。
そこまでいくと、>>516のようにしたほうが見栄えもいいんじゃないか、
って言う話にもなってきそうですが、
僕の知識的にはなかったものなので、勉強させていただきます。
わざわざありがとうございました!
0529nobodyさん2009/08/19(水) 00:31:22ID:???
本当にくだらない質問ですいません。

自分のサイトにメールフォームを設置していて
動作テストはFirefox3.0以降、IE6・7、OPERA、Google Chorome,Safari
で確認済みです。
ですが、月に1回くらいの頻度で文字化けしたようなメールが来ます。

こんな感じです。
[御社名] AlRJUkXCXfAKfsG
[ご担当者名] XaXcsANiTi
[メールアドレス] ZuACulytkH
[ご住所] lMfvCbGQJ
[お電話番号] BsffuuhnL

アドレスはいつも@マーク以下がsv602.lolipop.jpです。
ちなみに私が使っているサーバはロリポップです。

せっかく問い合わせが来てるのに逃してるのか
単なるエラーかはっきりさせたいのでぜひお願いします。
0530nobodyさん2009/08/19(水) 00:43:16ID:???
自動のコメントスパムぐらいにしかみえんな
心配ならphpスレに書き込んでいるのだからphpのメールフォーム先のスクリプト読んで
挙動確認すればいいとおもう。
0531nobodyさん2009/08/19(水) 00:52:26ID:???
>>529
スパム以外なら文字コードの問題かなISO-2022-JPっぽい
0532nobodyさん2009/08/19(水) 03:55:55ID:???
スパムだろ。
0533nobodyさん2009/08/19(水) 13:05:24ID:???
>>529
あれ?IDが???になってますね
気のせいですか?
0534nobodyさん2009/08/19(水) 13:13:50ID:Ph4gYam8
Calendar-0.5.4.tarを解凍すると、意味不明なファイルになってしまいます。
本来ならディレクトリ階層のファイルになるはずです。
package.xml^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@
^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@100664 ^@ 764 ^@ 764 ^@ 40416 11120534466 6416 ^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^
@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@
〜
0535nobodyさん2009/08/19(水) 13:20:17ID:rHPCm5Kh
すいません、質問いいですか?
【OS名】 linux
【PHPのバージョン】php5.1.6
【WEBサーバ】 Apache
【質問内容】
function send_to_smart($data1, $data2 ,$mode){
//パターン1
if($mode+0 == 0){
$request = "GET /aaaaa/?data1=".$data1."&data2=".$data2."HTTP/1.0\r\n\r\n";
send_request($request);
//パターン2
}elseif($mode+0 == 1){
$request = "GET /bbbbb/?data1=".$data1."&data2=".$data2."HTTP/1.0\r\n\r\n";
send_request($request);
}
$fp = fsockopen("*****.jp",80);
fputs($fp, $request);
while (!feof($fp)) {
$line .= fgets ($fp,128)."\n";
}
fclose ($fp);
}
上記の感じでソケット送信のプログラムを作ってます。
・パターン1と2で別々にデータを送信してる
・2回とも情報送ってるはずなのに、受け取り側ではパターン1しか受け取れてない。
・パターン2はデータが入っていないのではなく、リクエスト自体が来ていない。
・2回ともレスポンスは取れている。ソケットオープンも問題なし。

パターン2で送れない理由がさっぱりわかりません。
これで、なんか原因や解決策判ったりしますか?
0536nobodyさん2009/08/19(水) 13:23:41ID:???
マルチですか
0537nobodyさん2009/08/19(水) 13:38:37ID:rHPCm5Kh
他のスレに同じ質問はタブーだったのか。
知らなかった、気をつけます。
0538nobodyさん2009/08/19(水) 13:56:22ID:rHPCm5Kh
記述間違ってました。
マルチはもうしないんで教えてください。
結構困ってるので
【OS名】 linux
【PHPのバージョン】php5.1.6
【WEBサーバ】 Apache
【質問内容】
function send_to_smart($data1, $data2 ,$mode){
//パターン1
if($mode+0 == 0){
$request = "GET /aaaaa/?data1=".$data1."&data2=".$data2."HTTP/1.0\r\n\r\n";
//パターン2
}elseif($mode+0 == 1){
$request = "GET /bbbbb/?data1=".$data1."&data2=".$data2."HTTP/1.0\r\n\r\n";
}
$fp = fsockopen("*****.jp",80);
fputs($fp, $request);
while (!feof($fp)) {
$line .= fgets ($fp,128)."\n";
}
fclose ($fp);
}
上記の感じでソケット送信のプログラムを作ってます。
・パターン1と2で別々にデータを送信してる
・2回とも情報送ってるはずなのに、受け取り側ではパターン1しか受け取れてない。
・パターン2はデータが入っていないのではなく、リクエスト自体が来ていない。
・2回ともレスポンスは取れている。ソケットオープンも問題なし。

パターン2で送れない理由がさっぱりわかりません。
これで、なんか原因や解決策判ったりしますか?
0539nobodyさん2009/08/19(水) 13:57:11ID:???
乙
0540nobodyさん2009/08/19(水) 14:08:21ID:???
ファイルがないとかでレスポンスヘッダしか帰ってこないとかじゃね

自分はこんな感じで関数作ってるけど
function httreq($url){
  if(is_string($url===true)){
    $headers = array(
      'Host: '.parse_url($url,PHP_URL_HOST),
      'User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; ja; rv:1.9.1.1) Gecko/20090715 Firefox/3.5.1',
      'Accept-Language: ja,en-us;q=0.7,en;q=0.3',
      'Accept-Charset: Shift_JIS,utf-8;q=0.7,*;q=0.7'
    );
    $options = array(
      'http' => array(
        'method' => 'GET',
        'header' => implode("\r\n",$headers),
      )
    );
    return file_get_contents($url, false, stream_context_create($options));
  }else{
    return false;
  }
}
0541nobodyさん2009/08/19(水) 14:10:06ID:???
if(is_string($url===true)){ は if(is_string($url)===true){ だったすまそ
0542nobodyさん2009/08/19(水) 14:10:44ID:???
if(is_string($url===true))
なにこれ
0543nobodyさん2009/08/19(水) 14:11:37ID:???
ちなみにis_stringはboolで返ってくるのに===する意味あんの?
0544nobodyさん2009/08/19(水) 14:17:44ID:???
無いよ、厳密な比較が好きなだけ
0545nobodyさん2009/08/19(水) 14:22:01ID:???
そうだね、将来的に返り値がintになるかもしれないしね
05465382009/08/19(水) 14:24:18ID:rHPCm5Kh
うーん、やはり詳細なデータを入れないとだめなんですかね?

あ、一つ書き忘れてました。
これ携帯用です。
0547nobodyさん2009/08/19(水) 14:31:46ID:???
面土居からテストすらしないんだけど
一応聞くがこの関数のmode値変えて2回呼び出してるんだよな?
0548nobodyさん2009/08/19(水) 14:44:34ID:???
>>538
よくわかんないけど$mode+0ってなに?
05495382009/08/19(水) 14:46:00ID:rHPCm5Kh
はい、そうです。
send_to_smart($data1, $data2 ,0);
と
send_to_smart($data1, $data2 ,1);
で呼び出してますね
0550nobodyさん2009/08/19(水) 14:47:42ID:???
>>548 数値化確定させてんだろう
05515382009/08/19(水) 14:51:05ID:rHPCm5Kh
>>548
$mode+0で変数の型を数値に強制変換してます。
まぁ、今回$modeには元々数値しか入ってないんですが、クセですな。

ちなみにテキストに強制変換する場合は$mode.''です。
$mode内が1でもこの場合テキストと判断されます。
0552nobodyさん2009/08/19(水) 14:57:33ID:???
>>551
世の中にはキャストという便利なものがあってだな
0553nobodyさん2009/08/19(水) 15:00:31ID:???
>>551
関数内で強制変換とかバグ入り込みやすいコーディングしてんじゃねえぞksg
関数に渡す前に数値化しろよ
05545382009/08/19(水) 15:14:25ID:rHPCm5Kh
関数内での強制変換はよろしくないのか・・。
了解、そのやり方は使わないようにします。

というか
レスポンスが返ってくる=データが送られている
っていう認識だったんだけど違いましたっけ?
0555nobodyさん2009/08/19(水) 15:38:53ID:???
レスポンスヘッダは捨てられてレスポンスボディだけを受け取る

304(更新無し)とかだと下のような感じでレスポンスヘッダのみ帰ってくる
HTTP/1.x 304 Not Modified
Date: Wed, 19 Aug 2009 06:36:52 GMT
Server: Apache
0556nobodyさん2009/08/19(水) 15:46:17ID:gdnF9G1d
CentOSでyumでPHP5.2.6を入れたのですが、
extension_dir = "/usr/lib64/php/modules"
となっていたので中を覗いてみると
dbase.so json.so mysql.so mysqli.so pdo.so pdo_mysql.so pdo_sqlite.so phpcups.so zip.so
しかありませんでした。
ほかのモジュールはどこにあるのでしょうか・・・それともこれしかないのでしょうか。
0557nobodyさん2009/08/19(水) 15:47:26ID:???
yumだからじゃね?
0558nobodyさん2009/08/19(水) 16:12:17ID:???
>>556
yum search php
で探してみるとか。

というか何が必要なんだ?
0559nobodyさん2009/08/19(水) 16:16:42ID:???
>>556
てめえなめてんのか!
5.2.6なんて古いだろ!バージョンアップしろよ!
PHPナメ杉ksgkg!
0560nobodyさん2009/08/19(水) 16:21:06ID:gdnF9G1d
ありがとうございます。
Windowsでのdllではphp_fileinfo.dllに値するものです。
0561nobodyさん2009/08/19(水) 16:24:34ID:???
yumでインストールすると伸びませんよ
自分でソースコードから入れましょう
0562nobodyさん2009/08/19(水) 16:25:29ID:???
yumベースで他のも管理してるなら、別にyumを避ける理由ないだろw
0563nobodyさん2009/08/19(水) 16:33:08ID:???
yum信者きめえ
0564nobodyさん2009/08/19(水) 16:34:47ID:???
面倒なのでぜんぶWebmin任せ。
0565nobodyさん2009/08/19(水) 17:49:25ID:???
みんなすごいな、俺見習中だけどもPHPすらわからん。
ジャヴァスクリプトだのAjaxだの絡んでますますわからん。
向いてないのが良くわかった。
0566nobodyさん2009/08/19(水) 17:58:00ID:???
>>560
yum install php-pecl-fileinfo
でどう?

あなたの環境でもあるかどうかわからんけど。
0567nobodyさん2009/08/19(水) 18:01:39ID:gdnF9G1d
ありがとうございます。
その方法でfileinfoをインストールできました。
モジュールの中にしっかりfileinfo.soを確認しました。

ですが、
Call to undefined function finfo_open
のエラーが出てきてしまいます。
httpd -k restartで再起動もかけましたが症状は変わらずです。

php.iniでは、ディレクトリの中身丸々モジュールを読み込んでいるようでした。
この場合はどういった原因が考えられるのでしょうか、宜しくお願いします。
0568nobodyさん2009/08/19(水) 18:09:24ID:???
>>567
>php.iniでは、ディレクトリの中身丸々モジュールを読み込んでいるようでした。
そんな指定できたっけ?
どの箇所?

普通に、php.iniに
extension=fileinfo.so
が要るんじゃないかな。
0569nobodyさん2009/08/19(水) 18:15:53ID:gdnF9G1d
>>568
extension_dir=ディレクトリ名
で、その中のモジュールは全て読み込んでくれませんでしたっけ?

ちなみに
extension=fileinfo.so
でも
extension=/usr/lib64/php/modules/fileinfo.so
でも読み込んでくれませんでした・・・。
0570nobodyさん2009/08/19(水) 18:28:18ID:???
>>569
>extension_dir=ディレクトリ名
は、ベースディレクトリの指定だと思うよ。

>extension=/usr/lib64/php/modules/fileinfo.so
こう書かなくて済むように。


で、読み込まれなかったというのは、apache再起動しても
Call to undefined function finfo_open
になったということかな?


/usr/lib64/php/modules/fileinfo.so
が実際に存在しているのは確認ずみ?


あ、ちなみに実際にcentosで試して回答しているわけではないから何か外しているかも。
0571nobodyさん2009/08/19(水) 18:31:34ID:gdnF9G1d
はい、確認しました。

extension_dir = "/usr/lib64/php/modules"

extension=fileinfo.so

pwd -> /usr/lib64/php/modules
にて「fileinfo.so」を確認

httpd -k restartにてApacheの再起動
0572nobodyさん2009/08/19(水) 18:36:20ID:gdnF9G1d
Apacheのerror_logを確認したところ
Unable to initialize module\nModule compiled with module
とあったので検索してみると
どうやらコンパイルでインストールしたphpとyumでインストールしたphpが共存しているのが問題みたいでした。

ですので、一度PHP関係を削除してインストールしなおそうと思います。
ありがとうございました。
0573nobodyさん2009/08/19(水) 20:10:10ID:I0IT/dw1
会社で公開してるシステムで再現性なしのエラーが見つかった

ただ単純にpublic/user/のファイルからpublic/admin/のインデックスに移動
admin側でuserのとこで発行したセッションをキーにDBからデータを引っ張ってきて
どうたらこうたらしてるだけのはずなんだけど

ある利用ユーザが入れないらしい
ただ、そのユーザのID借りても入れたし、
ブラウザやいろんなテストID使っても
一回だけしか再現できなかった

こんな再現性がない不具合が見つかった場合、
どんなふうに原因を探すものなのでしょうか?
0574nobodyさん2009/08/19(水) 20:11:42ID:???
エラー起きたときに変数全部テキストかDBに保存するようにしたらいいんじゃね
0575nobodyさん2009/08/19(水) 20:14:25ID:???
ログイン周りといえばクッキーだろうか
0576nobodyさん2009/08/19(水) 20:26:06ID:I0IT/dw1
エラーがでたら は ありですね
具体的になにがエラーになってるのかは不明なんですけど、やってみようかと思います

ちなみにクッキーは怪しいと思ったけど、セッションIDしかなかった
0577nobodyさん2009/08/19(水) 20:45:43ID:ECQ6gete
phpでFlateDecodeって扱える?
0578nobodyさん2009/08/19(水) 22:24:32ID:ECQ6gete
zlibの
・gzdeflate ? 文字列を deflate 圧縮する
・gzinflate ? deflate圧縮された文字列を解凍する
これがFlateDecodeなのかな?
0579nobodyさん2009/08/19(水) 22:28:08ID:???
exec("zip");
0580nobodyさん2009/08/20(木) 15:11:25ID:???
ファイルにログを書き込んでいるのですが、更新順に読み込むには
どうすれば良いでしょうか?
ログファイルをスタックのように扱いたいです。
ファイルポインタを先頭に置くと一行目が上書きされていますので、しょうがなく
終端に置いて書き込んでいるのですが、そうすると逆から読み込まなければいけなくなっていしまいます。

ログの表紙形式としては、
2009/08/20 更新
2009/08/19 更新
2009/08/18 更新

のように降順に表示したいです。
ログがどのぐらいの量になるかわからないので、いったん配列に読み込んで、それから
逆順に出力するのも変な気がします・・・。
0581nobodyさん2009/08/20(木) 15:19:51ID:???
つスレタイ
0582nobodyさん2009/08/20(木) 15:24:32ID:???
下らなくない質問は余所でやれ。
0583nobodyさん2009/08/20(木) 15:35:44ID:???
>>580
データ全部読み込んでから、先頭に書いて元からあったデータを追加とか。
DB使ったほうがいいんじゃね。

あと>>1呼んでID出せ
0584nobodyさん2009/08/20(木) 15:40:22ID:???
>>580
ログを書き換えるということと追記は意味が違うよ
ログがどのくらいの量っていったってメモリを食いつぶすような量にはならないでしょ
もしも問題になるほどの量ならそもそも管理方法に問題がある
05855802009/08/20(木) 15:44:42ID:2mPTkGjX
レスありがとうございます。
ID出すの忘れてました。

>>583
DBをいじるのはあまり慣れていないので・・・・。
>>584
配列に読み込んでも大丈夫でしょうか・・・・。

ファイルポインタを終端に置き、そこから逆に先頭まで一行ずつ読み込むのは
無理でしょうか?
0586nobodyさん2009/08/20(木) 15:46:20ID:???
そしたら文章逆になるやん
0587nobodyさん2009/08/20(木) 15:48:05ID:???
>>580
$logfile = "example.txt";
$write = "追加したい文字";
$lines = file($logfile,FILE_IGNORE_NEW_LINES);
foreach($lines as $value){
  $add .="\n".$value;
}
if(($fp = fopen($logfile,'a'))!==false){
  fwrite($fp,$write);
  fclose($fp);
}else{
  return ("書き込みに失敗");
}

こんなかんじで
0588nobodyさん2009/08/20(木) 15:49:51ID:???
>>585
file_get_contentsつかってStringに読み込めばいい
それで先頭に新しいログ\nつけたしたものを
ファイルを書き換え(一旦中身消して)すればいい
0589nobodyさん2009/08/20(木) 15:49:56ID:???
$add .="\n".$value; は $write .="\n".$value; だスマソ
0590nobodyさん2009/08/20(木) 15:51:40ID:???
使い回せるようにfile使ったけど単に追記するならfile_get_contentsのほうがよかったかな
0591nobodyさん2009/08/20(木) 15:56:48ID:???
>>580
ファイルにどれくらいの行数を保存しようとしているんだ?
万単位になるならデータベースを使うのがいいと思う

格納するデータが少ないのであれば
態々降順にファイルを書かなくても最後に追記
ファイルを配列に格納>降順ソート>foreachで十分じゃないのか?

下手な小細工するよりこっちの方が早いと思う
05925802009/08/20(木) 16:38:09ID:2mPTkGjX
皆さんレスありがとうございます。

>>588に書かれているやり方で、読み込みは先頭からするのが一番簡単ですかね・・・。

>>591
あまり決まっていないので、更新した内容があれば延々と書き続けると思います。
ただ、古いログは消しても支障ないので、あまりにも増えてしまったら消してしまう予定です。
05935802009/08/20(木) 17:16:35ID:2mPTkGjX
無事成功しました。
ありがとうございました。
0594nobodyさん2009/08/20(木) 18:01:55ID:WKWR+oFl
Apacheが起動しません。

error_logを見ると
PHP Warning: PHP Startup: It is not safe to rely on the system's timezone settings. You are *required* to use the date.timezone setting or the date_default_timezone_set() function.
In case you used any of those methods and you are still getting this warning, you most likely misspelled the timezone identifier. We selected 'Asia/Tokyo' for 'JST/9.0/no DST' instead in Unknown on line 0

PHP Fatal error: PHP Startup: Timezone database is corrupt - this should *never* happen! in Unknown on line 0

と書かれています。

[root@localhost]# httpd -k start
[root@localhost]#

起動時にはエラーは出ませんが、実際は起動されていません。
上記のエラーが書き出されます。

PHPの問題なのかApacheの問題なのかOSの問題なのかすらわかりません。
似たようなエラーでは、php.iniのdefault.timezone=ASIA/Tokyoで解決してありますが、
こちらはそれでも解決しないです。
0595nobodyさん2009/08/20(木) 18:06:48ID:???
php.iniが読みに行けてないとみた。
0596nobodyさん2009/08/20(木) 18:14:50ID:WKWR+oFl
# PHP.ini Dir
PHPIniDir "/etc"

のように、php.iniの場所を指定してあげましたが、
やはりエラーが出てしまいます。

0597nobodyさん2009/08/20(木) 23:48:48ID:???
Apacheを再起動してないとみた。
0598nobodyさん2009/08/20(木) 23:49:35ID:???
default.timezoneがそもそもおかしいとみた。
0599nobodyさん2009/08/20(木) 23:54:57ID:???
HDDがいかれてると見た
0600nobodyさん2009/08/21(金) 00:10:47ID:e3oLJKKb
【OS名】centOS
【PHPのバージョン】php5.2
【質問内容】
mbstring.http_inputにSJIS
mbstring.internal_encodingにEUC-JP
のような設定です。
AjaxのページからのリクエストはUTF-8になってしまうので、
$_REQUESTに入るパラメータの自動文字コード変換をしたくないのですが、
方法ありますでしょうか?
mb_convert_encoding($_REQUEST["TEST"],"SJIS","EUC-JP");
で戻そうかと思ったのですが、
たまに文字の一部が消えてしまいます。
0601nobodyさん2009/08/21(金) 01:02:02ID:???
PHPはUTF-8が標準、json_encodeとかいくつかの関数はUTF-8でしか受け付けない
0602nobodyさん2009/08/21(金) 01:08:30ID:???
PHPの自動変換って無効にするのが基本かと思ってた
0603nobodyさん2009/08/21(金) 06:39:37ID:1d2neVQK
HTTP_Requestで、POSTフォームのあるページにアクセスするときに、
valueしてあるところは弄らなくていいかなぁと思って(radioボタンとか)、
必要なフォームだけaddPostDataでポストしといたのですが、
結果は、スルーしたポストフォームは全て空になってしまいました。
クライアント側のブラウザに依存して判断しているからだと思うのですが、
これがもしもvalueで選択済みのフォームが大量にあった場合、
HTTP_RequestするときはaddPostDataも
その数だけ指定しなければならないのでしょうか?
value済みフォームは有効になるような都合の良いHTTP_Request関数などないでしょうか。
よろしくおねがいします。
0604nobodyさん2009/08/21(金) 08:44:12ID:???
value済みフォームって何?
0605nobodyさん2009/08/21(金) 12:11:07ID:PCqrhdqr
$hairetsu = array("test" => "pong","ok" => "ng");

test.logに"array("test" => "pong","ok" => "ng");をそのまま文字列として書き出したいのですが、やはりいちいちクォートして書き込むしかないのでしょうか?
0606nobodyさん2009/08/21(金) 12:15:06ID:???
シングルクォーテーションがあるじゃない
0607nobodyさん2009/08/21(金) 12:17:30ID:???
変数に格納された記述をそのまま出力する関数があるから探してみ
0608nobodyさん2009/08/21(金) 12:24:19ID:PCqrhdqr
>>606-607
var_export($hairetsu,TRUE);
でいけました。
ありがとうございましたm(__)m
0609nobodyさん2009/08/21(金) 12:26:12ID:???
>>605
str_replace("\n","",print_r($array,true));
0610nobodyさん2009/08/21(金) 14:22:44ID:WhelcFIU
質問します。幼稚園の年間イベントをまとめるアプリを作ります。
遠足などのイベントのページに、参加した子供たちを組分けして出力します。
(イベント名の見出しの下に、A組の参加生徒出力、B組の参加生徒出力、C組の… という形)
利用するテーブルは
○table1 イベント情報テーブル
 id, eventName, eventDay
○table2 参加した生徒テーブル
 id, evId, studentName, kumi
です。

この状況で、table1.id=table2.evIdという条件でJOINし、SELECTのクエリ(以下)を実行して参加生徒を抽出するんですが、
 SELECT table1.*, table2.evId, table2.studentName, table2.kumi
 FROM table1 LEFT JOIN table2
 ON table1.id=table2.evId
 WHERE table1.eventName = '○○山の遠足';
どうやって組ごとにまとめて出力したら良いのか迷っています。(クエリの結果は当然、全ての組を含んでいます。)
自分の考えでは、
1)クエリ結果に対してforeach
2)それぞれのtable2.kumi値を取得して
3)重複を省きながら$kumiAry配列にpush
4)出来上がった$kumiAryの値をキーにしてリスト出力
という流れです。
しかし、もっとマシな効率的なやり方ないでしょうか?
クエリを書き換える必要があれば、それも教えていただけると嬉しいです。
よろしくお願いします。
06116102009/08/21(金) 14:23:55ID:WhelcFIU
すみません、書き忘れました
環境は php5.2.6 Mysql5 です
0612nobodyさん2009/08/21(金) 14:38:38ID:???
クエリ結果に対してforeachかけなくても、クエリ結果から1件ずつ取得する時に
while ($row = fetchする関数()) {
$students[$row['kumi']][] = $row;
}
と連想配列に入れればいいのでは。

あるいは、幼稚園規模なら組ごとにクエリ発行してもいいと思うけど
0613nobodyさん2009/08/21(金) 16:19:58ID:???
私だったら
ORDER BY table2.kumi,table2.studentName
って並べ替えしておいて前の処理とkumiの値が変わってたらスタックを出力&クリアで
次の組に備えるとかやるかなぁ($oldkumiとか)

つか少し気づいたとこは普通、生徒管理テーブル作ってstudentNameとkumiはそっちのテーブルだな。
0614nobodyさん2009/08/21(金) 16:25:52ID:???
そうだね。正規化してから始めた方がいいかも。
06156132009/08/21(金) 16:28:52ID:???
まぁ質問のために簡略化して書いてるのかもしれませんが。
0616nobodyさん2009/08/21(金) 16:30:18ID:o/Rwitrf
PHP5.3にFileinfoインスコしようとおもたらすでにパッケージに組み込まれてた
質問しようと思ったけど完全に独り言になってしまったぬるぽ
0617nobodyさん2009/08/21(金) 16:42:31ID:???
>>613
なんか古臭い手法ですね
0618nobodyさん2009/08/21(金) 17:01:52ID:???
では>>617が最先端の手法を
↓↓↓↓↓↓
06196132009/08/21(金) 17:12:10ID:???
だって古いひとだものww
↓↓↓↓↓↓
では>>617が最先端の手法を
↓↓↓↓↓↓
0620nobodyさん2009/08/21(金) 17:12:40ID:???
糞スレ
0621nobodyさん2009/08/21(金) 17:16:34ID:???
最近まともな流れだったのに
>>617お前しんでいいよ
自分の答えを言った上でケチつけろ
ケチつけるだけなら100年ROMってろ
0622nobodyさん2009/08/21(金) 17:28:17ID:???
お前もそうじゃん
0623nobodyさん2009/08/21(金) 17:37:45ID:???
>>622
どこが「そう」なのかkwsk
日本語理解できない人?
0624nobodyさん2009/08/21(金) 17:47:48ID:???
>>623
>>621嫁
0625nobodyさん2009/08/21(金) 17:51:20ID:???
お前らまたやってんのか...。

とりあえず>>617は最先端の手法を頼む
↓↓↓↓↓↓
0626nobodyさん2009/08/21(金) 17:55:42ID:???
.>>624
ハア?
>>613の回答にケチつけた覚えはねえよ
>>617なんてそもそも回答になってねえし

>>617まだですか?早く最先端教えてくださいよ
0627nobodyさん2009/08/21(金) 17:59:05ID:???

   ======糞スレ終了======
■ このスレッドは過去ログ倉庫に格納されています