くだすれPHP(超初心者用)5
■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん
2008/11/22(土) 06:36:02ID:???もしくは質問者自身何が何だが分からない質問を勇気を持って書き込むスレッドです。
PHP使いが優しくコメントを返しますが、
お礼はPHPの布教と初心者の救済をお願いします。
PHP Home Page
http://www.php.net/
http://jp.php.net/
くだすれPHP(超初心者用)4
http://pc11.2ch.net/test/read.cgi/php/1213356756/
適当に関連スレ(マルチはだめぽ)
【PHP】下らねぇ質問はここに書き込みやがれ 69
http://pc11.2ch.net/test/read.cgi/php/1211879073/
0691nobodyさん
2009/02/05(木) 00:20:18ID:???ありがとうございます。
探したらfetchAll(PDO::FETCH_COLUMN|PDO::FETCH_GROUP)がそれらしいです。
ただマニュアルの例で例えると
array(3) {
["apple"]=>
array(2) {
[0]=>
string(5) "apple"
[1]=>
string(5) "apple"
}
みたいな感じにカラム0の値しか取得できてないようです。
自分がどこか間違ってるのかSQLiteが対応してないのか...
もう少し試してみます。
0692nobodyさん
2009/02/05(木) 00:47:17ID:???ほい
http://jp2.php.net/manual/ja/pdostatement.fetchall.php
0693nobodyさん
2009/02/05(木) 00:49:12ID:???↑みたいなフォーマットの価格データを整数値にしたいんだけど
↓よりシンプルにやる方法ってある?
$str = str_replace(array(' ', ',', '円'),array('', '', ''),$str);
0694nobodyさん
2009/02/05(木) 00:51:20ID:???0695nobodyさん
2009/02/05(木) 00:54:43ID:???0696nobodyさん
2009/02/06(金) 21:22:00ID:???MySQLでも試してみたのですが結果は同じでサンプルのような結果にならないのですが
どこか捉え違いしているのでしょうか。
PHP 5.2.6/MySQL 5.0.4
|apple|red|
|banana|yellow|
|apple|green|
という内容として、
$dbh = new PDO('mysql:〜','root','root');//もしくは'sqlite:〜'
$sql = "SELECT name,color FROM table1";
$sth = $dbh->prepare($sql);
$sth->execute();
$result = $sth->fetchAll(PDO::FETCH_COLUMN|PDO::FETCH_GROUP,0);
var_dump($result);
$stmt = null;
結果
array(2) {
["apple"]=>
array(2) {
[0]=>
string(5) "apple"
[1]=>
string(5) "apple"
}
["banana"]=>
array(1) {
[0]=>
string(6) "banana"
}
}
となります。
0697nobodyさん
2009/02/06(金) 21:29:26ID:???とりあえず、FETCH_GROUPなんだし、結果が正しいように思うが?
0698nobodyさん
2009/02/06(金) 21:34:36ID:???PDO::FETCH_COLUMN|PDO::FETCH_GROUP
じゃなく
PDO::FETCH_ASSOC|PDO::FETCH_GROUP
にしてみたら?
0699nobodyさん
2009/02/06(金) 21:39:06ID:???失礼、サンプルは>>692にもあるPDOStatement->fetchAllの例3です。
期待した結果は
["apple"]=>
array(2) {
[0]=>
string(5) "red"...
なんですが、>>696が正しいということはやっぱりなにか勘違いしてるのかなぁ
0700nobodyさん
2009/02/06(金) 21:43:25ID:???それ、外したらどうなる?
0701nobodyさん
2009/02/06(金) 21:48:42ID:???["apple"]=>
array(2) {
[0]=>
string(3) "red"
[1]=>
string(5) "green"
}
["banana"]=>
array(1) {
[0]=>
string(6) "yellow"
}
}
になったけど
0702nobodyさん
2009/02/06(金) 21:49:22ID:???0703nobodyさん
2009/02/06(金) 22:07:01ID:???あれ?どうも。0がなくてもうまく取得できなかった気がしたんですが
今0を外したらPDO::FETCH_ASSOC|PDO::FETCH_GROUP同様うまくいきました。
|PDO::FETCH_GROUPがついたときは第2引数で指定したPDO::FETCH_COLUMNを基準に
グループ化するのかと勘違いを…
実際は複数のカラムが必要なのでPDO::FETCH_NUM|PDO::FETCH_GROUPで
思った通りの結果が得られるようになりました。ありがとうございました。
>>701も確認ありがとうございます。
0704nobodyさん
2009/02/06(金) 22:11:15ID:???後進のために原因を明らかにしといてくれ
0706nobodyさん
2009/02/06(金) 22:26:54ID:???第2引数に0を入れるということは1番目のCOLUMNを用いて残りのカラムをGROUP化するってことだぞ
0708nobodyさん
2009/02/06(金) 22:30:55ID:???0710nobodyさん
2009/02/08(日) 19:09:17ID:???try {
function exception_error_handler($errno, $errstr, $errfile, $errline ) {
throw new ErrorException($errstr, 0, $errno, $errfile, $errline);
}
set_error_handler("exception_error_handler");
fntest();
function fntest() {echo "call function";}
} catch (ErrorException $exception){
echo "何かエラーだよ<br />";
echo $exception->getMessage()."<br />";
echo "line:".$exception->getline();
exit();
}
?>
これを実行するとFatal error: Call to undefined function fntest() in〜と出ます
定義を先にするかtry〜catchをなくすとエラーは出ません
何がいけないんでしょうか
0711nobodyさん
2009/02/08(日) 19:26:17ID:???0712nobodyさん
2009/02/08(日) 20:00:14ID:???まんまやん というかだめなんですか?
>次の二つの例のように、ある条件下でのみ関数が定義される場合には、その関数定義は関数がコールされる前に行われていなければなりません。
に当てはまるということでしょうか
とりあえずそういうものだということで前方で定義するようにします
0714nobodyさん
2009/02/08(日) 20:35:03ID:???Perlは書き方によっては、関数の宣言や定義より先に呼び出しが来てもちゃんと動く。
0715nobodyさん
2009/02/08(日) 21:05:08ID:???ifやwhileやtryやfunctionの中などの節の中は後置できないだけ。
>>710なんてそんなの百も承知で釣り質問してるに決まってるだろ。
釣られてへぼい回答してんじゃねぇぞ
0716nobodyさん
2009/02/08(日) 21:07:39ID:???0717nobodyさん
2009/02/09(月) 00:04:48ID:???' % 等のDBにとっては迷惑な文字列が入力された場合に、それとHTML上の特殊文字に変換する
にはどうすれば良いですか?
簡単な掲示板を作ったのですが' %が入力された場合にエラーが発生し困っています。
0718nobodyさん
2009/02/09(月) 00:12:47ID:???0720nobodyさん
2009/02/09(月) 08:53:51ID:???0721nobodyさん
2009/02/09(月) 09:16:28ID:???データーベース専用のエスケープ処理をするのが普通
0722nobodyさん
2009/02/09(月) 09:20:54ID:???0723nobodyさん
2009/02/09(月) 21:42:26ID:???使える箇所ならプリペアドステートメント。これが一番安全。
ttp://jp2.php.net/manual/ja/mysqli.prepare.php
ttp://jp2.php.net/manual/ja/pdo.prepare.php
使えない箇所ならmysql_real_escape_stringなど。
どの文字が危険かはDBによって違うので、MySQLにはMySQLの、OracleにはOracleの、SQLiteにはSQLiteの専用の関数がある。
0724nobodyさん
2009/02/11(水) 12:21:22ID:???ユーザのトップディレクトリを調べる方法はありますか?
0725nobodyさん
2009/02/11(水) 13:56:50ID:???0726nobodyさん
2009/02/11(水) 14:12:44ID:???ああすみません。
開発環境はPHP5.2.6でOSXなんですがWebサーバはまだ借りてないのでどうなるかはわかりません。
PHP5でApachサーバのところを借りようとは思ってます。
なので開発環境との違いや引っ越し時のことを考えて汎用的な関数がないかと質問しました。
一応マニュアルのファイルシステム関数は目を通したんですが…
0727nobodyさん
2009/02/11(水) 14:24:23ID:???たとえばエラーチェック時にdieの代わりに自作関数呼び出して終了みたいな場合など
function return_json($flag, $data){
if($flag == true)
$result = $data;
else
$result = "ERR:".$data;
$res = array(
"status" => $flag,
"result" => $result );
print(json_encode($res));
exit();
}
if(エラーチェック1) return_json(false,"エラー1です"); //エラーなら終了
if(エラーチェック2) return_json(false,"エラー2です"); //エラーなら終了
//最後に
return_json(true,"成功です。");
0728nobodyさん
2009/02/11(水) 14:33:34ID:???0729nobodyさん
2009/02/11(水) 15:13:35ID:???あちこちの関数で好き勝手に処理を中断したり画面出力してたりすると、そのうち管理しきれなくなる。
同じ理由で、printするよりは文字列を返す(printは「メインのルーチン」で行なう)方がいいと思う。
俺ならreturn_json()はjsonを返すだけ(exitもprintもしない)にして
function generare_json(){
if(isError1()){
return return_json(false,"エラー1です");
}
if(isError2()){
return return_json(false,"エラー2です");
}
return return_json(true,"成功です。");
}
とし、echo generate_json()を最後に呼び出す。
exit()はスクリプトの末尾のみ、出力はこの文のみになる。
0730nobodyさん
2009/02/11(水) 15:20:37ID:???boolを渡すより、return_error_json()の方が分かりやすい。
0733nobodyさん
2009/02/11(水) 17:30:07ID:???/Applications/MAMP/htdocs/
となります。
実行ファイルがトップにあるわけではないので相対パスでのファイル指定より
基点からの絶対パスのほうがわかりやすいかなと。
0737nobodyさん
2009/02/11(水) 18:00:00ID:???0738724,733
2009/02/11(水) 19:15:46ID:???$_SERVER['DOCUMENT_ROOT']で希望のパスを得ることができました。
ありがとうございました。
0739727
2009/02/12(木) 16:10:42ID:rITuikA6それだとプログラム毎にgenerare_json()を書き換えるって事ですよね
(エラーチェックは入力値が対象なのでプログラム毎に変わるから)
if〜elseのネスト地獄に陥りたくないので、if文でエラーなら残りをすっ飛ばしたいだけなのです。
それとメインルーチンのほとんどがgenerare_json()内に入ってしまうような・・・
他の方法(関数内でprintもexitもなし)だと
1.エラー時、gotoでメインルーチン末尾に飛んでprint実行
2.フラグを用意し初期値true、エラー時falseにして、if(!フラグ && isError2())と毎回チェックする
3.例外処理
が思い浮かんだんですが、gotoはv5.3からだし、2は毎回チェックが煩わしい(スマートじゃない)、
3の入力値チェックのエラーは例外とは違う気がしたり・・・
それとも例外として処理してもいいのかな・・・?
チェック用自作関数は真偽を返すのでif文でエラーならthrowとか
0740727
2009/02/12(木) 18:57:04ID:???色々調べたら入力値チェックで期待しない値は異常なエラーとして例外処理してもよい、
みたいに書いてあったので例外処理することにしました。
function throw_except($msg){
throw new Exception($msg);
}
try {
if( isError1() ) throw_except('エラー1');
if( isError2() ) throw_except('エラー2');
return_json( $xxx );
} catch ( Exception $e ) {
return_err_json( $e->getMessage() );
}
例外処理になったからreturn_xxx関数内でprintさせてます(exitは削除)
print文を関数外に出した方がいいのかもしれませんが
0741nobodyさん
2009/02/12(木) 19:05:55ID:???0742nobodyさん
2009/02/12(木) 19:11:40ID:???0743nobodyさん
2009/02/12(木) 20:08:20ID:???try {
isError1();
isError2();
return;
} catch (isError1Excetion $e) {
} catch (isError2Exception $e2) {
}
0744nobodyさん
2009/02/12(木) 21:20:57ID:???0745729
2009/02/12(木) 23:45:53ID:???if else地獄?>729のコードにはelseが一行も出てないだろ。これは偶然そうしたんじゃなくて、意識してそうデザインしたんだ。
適切な規模で関数を切って、returnでエラーを通知可能にすればelseは削れるし、多くの場合throwは不要になる。
すぐthrowを使いたがる奴は、GOTO時代と脳の構造が一緒の、OOPどころか関数指向にすらなれない原始人。
ぱっと思いつく欠点挙げてやろうか。throwだと妥当性検証エラーの結果を最初のひとつしか出力に反映できない。
他にも、どこまで処理が継続するのか、どこからの処理はすっ飛ばされうるのかを判定しにくいのも例外の欠点。
ロックファイルを作って、ファイルに書き出して、さあ安心と思ったら変なところから例外が飛んできて、ロックファイル削除せずに終了、とかな。
例外は、複数の呼び出し階層をぶっ飛ばして上位層にエラーをダイレクトに通知したい場合に使うものであって、GOTO代わりに使うものじゃない。
>729のコードの完成版 ttp://gist.github.com/62642
isError1とisError2の中身を替えれば、チェックする内容はそのまま置き換わる。
両者をまとめて関数化してしまえば追加も可能。generate_jsonはノータッチでいける。
入力値検証らしい構造に書き直した版 ttp://gist.github.com/62643
入力値チェックの内容が変わる場合、validate関数を差し替える。処理内容が複雑ならisError1みたいな関数を書いてvalidateから呼んでもいい。
0746739
2009/02/13(金) 00:56:29ID:???if else地獄というのは>>729のコードではなく(>>727の)自作関数内でexitしない場合のこと。
(一応自分でも>>727や>>740で意図してelse使わないようにしてます)
ただ作例だとisError1,isError2,validate,build_responceなど関数自体を毎回書き直す羽目になるし、
メインルーチンがほぼ丸ごと関数化(build_responce)してるのもどうも・・・
関数は一度作ったら修正したくない、極力同じような文を書きたくない、ってのが元々の理由なので。
今作ってるのは妥当性エラーは1つ(というか「入力値が間違ってる」だけ)でいいのですっ飛ばしてます。
通常の入力ではなく意図的に変更してる場合しかありえないので。
確かに原始人と思いますが、GOTOも上手く適度に使えばいいんじゃないんでしょうか?
反GOTO教信者ではないし。
まあバリデーションにthrowの使うのは>>739にも書いたけど微妙だとは思いますが↓のようにあったので使ってみました
http://takagi-hiromitsu.jp/diary/20051227.html
>>パス名を受け取ることを想定したパラメタに「../」や「..\」が含まれていたら、削除とか変換をするのではなく、
>>エラーとして例外処理して終了するというのが、本来のそのプログラムの正しい動作だろう*5。
クライアント側でもチェックしてるのでそれをわざわざ変更して送ってくるのは上記にあてはまるかと。
0747nobodyさん
2009/02/13(金) 01:41:35ID:???グローバル空間の処理や他の関数は一切触れなくて平気。
グローバル空間の処理を書き換える方が、関数を書き換えるより簡単だって言い張るならもう何も言わん。ダイクストラ以前の時代に帰れ。
「メインルーチンがほぼ丸ごと関数化してる」のは、確かに設計としては甘い。
本来は、「100%すべてを関数化すべき」だしな。
0748746
2009/02/13(金) 02:05:40ID:???参考にして勉強させていただきます。
0749nobodyさん
2009/02/13(金) 11:16:46ID:???現在、PHP4を使って携帯サイトを作っています。
新規登録してログインして日記みたいなのを登録するシステムなんですが、
ログインした後の日記登録の部分は問題なく動作します。
ところが新規登録のところで動作がおかしい部分があるのです。
動作確認はdocomo,au,softbankの実機とPC上のエミュで行っています。
現象はsoftbankの実機のみで起こるのですが、スクリプトでは
header("Location:xxxxxx.php?id=xxxxx")でページを飛ばすところで問題が起きます。
docomo,au実機、PC上の3キャリアのエミュでは問題なく動作、ところがsoftbankの実機のみ
ページが飛ばずに「このページは開けません」みたいなエラーが出ます。
ソースレベルでは、その他の日記登録などとほぼ同じなのですが・・・。
softbank携帯だけ、何か仕様が違うのでしょうか?ちなみにセッションを使っています。
0750nobodyさん
2009/02/13(金) 11:18:06ID:???飛び先のphpスクリプトにダイレクトに接続した場合、問題なく動作する事は確認済みです。
0751nobodyさん
2009/02/13(金) 11:24:03ID:???header Locationで飛ばさずに、aタグを使って間にワンクッション置く(クリックさせる)と正常に動作します。
どのみち、その先でまたheaderで飛ばすところで駄目なんですが・・・。
0752nobodyさん
2009/02/13(金) 11:45:37ID:???> softbankの実機のみページが飛ばずに「このページは開けません」みたいなエラーが出ます。
このときの、サーバーに残るアクセスログは?
んで、Locationで指定しているURLはドメイン込のフルパスで書いてるよね?
0753nobodyさん
2009/02/13(金) 11:52:57ID:???Locationには絶対ではなく、相対アドレスで指定しています。
0754nobodyさん
2009/02/13(金) 12:03:26ID:???http://www2.developers.softbankmobile.co.jp/dp/tool_dl/download.php?docid=119
これの、143ページ
0755nobodyさん
2009/02/13(金) 12:05:58ID:???要求しているURLは、変ではなくアクセス出来るURLでした。
0756nobodyさん
2009/02/13(金) 12:09:54ID:???その直後に正しいリクエストが来てるかどうか。
0757nobodyさん
2009/02/13(金) 13:01:14ID:???0758nobodyさん
2009/02/13(金) 13:46:02ID:???PDFの資料、大変役に立ちました。
locationで指定しているアドレスを相対から絶対にしたところ、動作しました。
ありがとうございました。
でも、他の部分では相対にもかかわらず正常動作しているんですけどね・・・。
やはり携帯サイトは難しいです。
0759nobodyさん
2009/02/14(土) 13:18:20ID:???rfc2616の14.30 Location
原文
http://tools.ietf.org/html/rfc2616
和訳
http://www5b.biglobe.ne.jp/~type-aya/rfc/rfc2616j.txt
http://www.studyinghttp.net/cgi-bin/rfc.cgi?2616#Sec14.30
ソフバンの方が厳密に仕様に沿っているんでしょう
0760nobodyさん
2009/02/18(水) 18:43:17ID:???いるのでしょうか?
例えば、認証するサイトでパスワード変更の時、応答メールで、
ttp://hoge.co.jp/mail/CSDFG365
へアクセスをすれば作業完了という場合の、CSDFG365や
ダウンローダーでttp://hoge.co.jp/download/CSDFG365にアクセス
すると、別名のファイル名が保存できる機能が、どう実装されているのか
知りたいのです。検索キーワードが悪いのか、ファイルの暗号化ソフト
ばかりヒットして解らずにいます。
どなたか教えてください。
0761nobodyさん
2009/02/18(水) 19:28:28ID:???0763nobodyさん
2009/02/18(水) 23:18:25ID:???アカウント情報とそのキーを一緒にDBかなんかに突っ込んでおく
アクセスがあったらアカウントを有効にしてそのキーを削除する
とやってるだけ。
その文字列とあなたのアカウントIDやメールアドレスに直接の関係(例えば、メールアドレスを「暗号化」するとその文字列になるとか)
はないと思うし、むしろあったら設計として不味い。
後者も、文字列と実際のファイル名なりデータなりを関連付けるDBを保持しているだけ。
ダウンロードさせるファイルの名前はヘッダで指定できる。Content-Dispositionでぐぐれ。
0764nobodyさん
2009/02/18(水) 23:18:58ID:???皆さん、日記やブログを作るときどのような感じでスクリプトを組んでいますか?
例えばhtml文字をエスケープして、マジッククォートを取り除いて…といった形で教えてくださるといいんですが。
0765nobodyさん
2009/02/18(水) 23:38:29ID:???0766nobodyさん
2009/02/19(木) 11:06:34ID:???mod_rewriteを使ってるんだろうね。
0767nobodyさん
2009/02/19(木) 12:40:19ID:???0768nobodyさん
2009/02/19(木) 18:38:41ID:???暗号云々ではない。ズレてしまって申し訳ない。
0769760
2009/02/19(木) 22:42:44ID:???パラメータをディレクトリとしていたんですね。
mod_rewriteを使って解釈しないといけないので、ズレていないと思いますよ。
使わずにすむ方法は思いつかないんですが・・・。
助かりました。ありがとうございました。
0770760
2009/02/19(木) 22:50:42ID:???ダウンローダーとか、宅ファイル便とかだとファイルの公開日というのが
指定できるのですが、その指定した日時まで公開というのはどう実装するので
しょうか。ユニークキーと期日を保存して、その期日にユニークキーを
削除すると思うのですが、「その期日」に動作される方法が解らないのです。
教えて君ですみませんが、どなたかアドバイスください。お願いします。
0771760
2009/02/19(木) 22:54:01ID:???×「その期日」に動作される方法
○「その期日」に動作させる方法
でした。何卒よろしくお願いします。
0772nobodyさん
2009/02/19(木) 22:56:59ID:???データを信用するなとのことなので出力時にhtmlspecialcharsを挟んでます
しかし装飾系のタグが使いたいので以下のようにしてみました
問題ありますか?
$str = "@<b@>強調@</b@>@<span class=@”red@”@>赤色@</span@>"; //DBから取得したデータ
echo str_replace(array("@<","@>","@”"), array("<",">","\""), htmlspecialchars( $str, ENT_QUOTES, "UTF-8" ));
検索文字はすべて全角、上はあくまでサンプルで実際の検索文字は違います
0773nobodyさん
2009/02/19(木) 23:52:31ID:???ファイルそのものを削除するならcronなんかを走らせておくのでしょうが、
ファイルを直接DLではなくCGI/PHP経由でのみDL許可にすれば
期日後はユニークIDをDBから取り出せなくするだけで実現できるのでは?
0774nobodyさん
2009/02/20(金) 04:23:24ID:???閉じタグ打たなかったら、ページの最後まで
適用されてしまうんでない?
<h1>おはよう
↑こんなの。ひろゆきがあめぞうを
つぶしたときに、「スタイルシート破壊攻撃」というのを
使ったのだ。「あめぞうウイルス」でググるとわかる。
0775760
2009/02/20(金) 08:00:28ID:???アドバイスありがとうございます。
その期日後にPHPを起動(?)させる方法を知りたいのです。
だれもその期日(後)にPHPにアクセスしなければ、PHPは動作しないので。
あっ誰かがアクセスする時に、期限のチェックをすれば済む話ですね。
なんか自動的に削除処理しなきゃと思い込んでました。
超初心者ということで許してください。ありがとうございました。
0776nobodyさん
2009/02/20(金) 08:15:05ID:???PHP内でcrontabを書き換えられるかどうかは知らんけど。
0777nobodyさん
2009/02/20(金) 15:07:58ID:???0778nobodyさん
2009/02/21(土) 00:09:46ID:???scriptタグを埋め込まれると、ページ内の全表示内容、クッキーを外部のURLに送信される可能性がある。
onloadなどのJavaScriptを実行されるものは全て同じ。
多くのシステムがタグを回避するのはこの脆弱性対策のため。
imageタグによる画像貼り付けや、objectタグによるFlash貼り付けなど、考慮しないといけない事は山のようにある。
脆弱性対策ってのは、猿真似してりゃいいってもんじゃない。
「何故」HTMLタグに警戒しないといけないのかを理解し、適切な対策を自分で考える必要がある。
勘違いするといけないのではっきり言うが、その処理を挟んでもセキュリティは一切向上しない。無駄だ。
0779nobodyさん
2009/02/21(土) 06:29:21ID:wFQNH0340780nobodyさん
2009/02/21(土) 06:30:12ID:wFQNH034perl X
PHP ○
0781nobodyさん
2009/02/21(土) 07:16:06ID:???0782nobodyさん
2009/02/21(土) 07:51:36ID:???0783779
2009/02/21(土) 10:59:46ID:???ブラウザーアドベンチャーゲームなんだけど。
300行分を10本ね
連絡先 adobentya@hotmail.com
0784nobodyさん
2009/02/21(土) 11:05:48ID:???0785779
2009/02/21(土) 11:11:58ID:???0786nobodyさん
2009/02/21(土) 11:20:40ID:???入場者名と退場者名を同じ1ページ内で、上下のスパン(上半分が入場者名、下半分が退場者名)
にしてPDF出力したいと考えています。
プログラムはそれぞれ"nyuujyou.php"、"taijyou.php"が用意されています。
このように別々のプログラムの結果を、同じページ内でPDFで同時に表示させることはできますか?
共通の変数は日付$ymdだけです。
0787nobodyさん
2009/02/21(土) 11:54:46ID:???入場.php、退場.phpを、出力結果をechoするのではなく、出力結果を文字列として返す関数に書き直すのが正しい道。
こういう事は非常によくあるので、「出力結果を組み立てる」部分と「書き出す」部分は明確に分けたほうがいい。
「入場者名や属性の配列をDBから取ってくる部分」→「それを使ってHTML文字列を組み立てる部分」→「それを受け取って書き出す部分」
の三段階に分けると使い回しが効く。ロジックの殆どは最初の部分に来て、変更が多いのは簡単な後半だからな。
例えばCSVでファイルに書き出したい場合、最初の難しい部分にはノータッチで後ろの2つだけ書き換えればよくなる。
前から順に「モデル」「ビュー」「コントロール(の一部だが)」層と呼ぶ。
で、レシピだが。
<?php
$ymd = '2009/02/21';
ob_start();
require_once("入場.php");
$result1 = ob_get_flush();
ob_start();
require_once("退場.php");
$result2 = ob_get_flush();
でresult1、$result2に両phpの実行結果が文字列として入る。PDF変換はライブラリを自分で漁れ。
0788786
2009/02/21(土) 11:59:35ID:???わかりました、丁寧にありがとうございました。
■ このスレッドは過去ログ倉庫に格納されています