【PHP】下らねぇ質問はここに書き込みやがれ 45
■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん
2007/05/12(土) 16:42:48ID:???PHPで最良の教本はこの公式マニュアル。市販の書籍は嘘が多いので鵜呑みにしない。
過去スレ、関連スレ、FAQなどは>>2-10辺り
◆前スレ
【PHP】下らねぇ質問はここに書き込みやがれ 45
http://pc11.2ch.net/test/read.cgi/php/1177635762/
◆質問する時の注意
・ 自分のIDを表示させること。(メール欄に何も記述しないこと。空白も入力しちゃダメ)
・ サーバーのOS(Linux、Windows他)、WebサーバーとPHPの種類やバージョン等を明記すること。
・ 己の行った操作、変更などを詳しく明記すること。
・ エラーメッセージはそのまま表記すること。「エラーが出ます」だけでは回答不可。
・ 質問者として、態度をわきまえること。
・ 事前に公式マニュアル、リファレンス本くらいはちゃんと目を通しておくこと。
◆質問後の注意
・偽者防止に必ずIDを表示させること。(メール欄に何も記述しない)
・2回目以降は最初に質問した際のレス番号を名前欄に入れること。
・解決しなくても回答をもらった場合はお礼を言うこと。
(荒らし、煽りは除く。煽られたときも、無闇に反論せずスルーすること。)
◆回答者への注意
・誰にレスしているのか分からないと困るので、>>(アンカー)をつけて回答すること。
【その他諸注意】
・正規表現・PEAR・テンプレート(Smarty等)・フレームワークは各該当スレへ
・SQLについての質問はデータベース板(PCカテゴリ)の各スレで
0068nobodyさん
2007/05/28(月) 16:30:01ID:???0069nobodyさん
2007/05/28(月) 16:30:33ID:???例えば【<H3>${KoMidasi}</H3>】という風に、処理する度に違う値が$KoMidasiに入る感じになるとします。
ですが、
for($i=0; $i<100; $i++){
$KoMidasi を定義する処理
$OUT_HTML .= $(HTMLの雛形);
}
と書いた場合「$(HTMLの雛形)」中の$KoMidasiには、外部ファイルが、includeされた時点での変数値が入ります。
ですのでforの1-2行目に include $(HTMLの雛形)があるファイル.php; と書けば問題ありませんが、100回も取込を行わなければなりません。
取込対象は大した容量ではありませんがやはり綺麗な処理とは言えないので、
どうにか一回取り込んで後は動的に変数値を置き換えたいのですがどうすれば宜しいでしょうか。
説明べたでスミマセンが宜しくお願いします。
007067
2007/05/28(月) 16:31:27ID:???0071nobodyさん
2007/05/28(月) 16:32:00ID:8Nb4gWX5お疲れ様です、みたいなことでも言って欲しかった?
こういう人いるから質問をしたくないんですよね
0073nobodyさん
2007/05/28(月) 16:34:50ID:???「だから何?」って聞きたかっただけなんだけど
一体お前が何を言いたいのか解らない
聞くな答えるなって言いたいのか?
007469
2007/05/28(月) 16:37:55ID:???今回は例ですので実際は○月の日別集計を表示する感じで日毎の雛形に集計結果を変数値として代入して返す風な処理です。
なので100回とか回数は飽くまで同様の処理を多数行う必要があるということをそれとなく表してるだけです。
<OL>
<LI>05/28(月) →$DAY
<LI>02:00 - 荒らしと遭遇 → $TIME[($LIST[$i])]
|
<LI>23:45 - 就寝
</OL>
こんな感じです。(実際は全然違いますが)
0075nobodyさん
2007/05/28(月) 16:40:37ID:???とりあえず書かせるだけで誰も答えないスレってどうよ?w
0079nobodyさん
2007/05/28(月) 16:44:58ID:???情報を出し惜しみしないで実際の例で出してくれ
非常に理解しづらいし
抽象的な話されても実際に役に立つアドバイスが出せるか不明だし
つかまぁ俺だったらテンプレートエンジン使うけどな
0082nobodyさん
2007/05/28(月) 16:53:39ID:???008369
2007/05/28(月) 17:09:34ID:???行数の関係で読みにくいですが、どうかご指南お願いします。
―inc.php―――――――
$HTML = <<<TEXT
<H3>${Komidasi}</H3>
<OL>
<LI>${DAY}
<LI>${TEXT}
</OL>
TEXT;
―――――――――――
―data.xtx――――――
100円拾った<>13<>今日は机の中で100円拾った
今日も2ch<>25<>一日vipでネカマになって遊んだ有意義だった
―――――――――――
―index.php――――――
include inc.php;
$data = file("data.txt");
for($i=0; count($data)>$i; $i++){
list($Komidasi, $DAY, $TEXT) = explode("<>", $data[$i]);
$OUT_HTML .= $HTML;
}
―――――――――――
index.php の1行目でコールすると変数値は空なのでforの2行目でコールしなければならないというのが>>69で言いたかった内容です。
どうか1回コールして動的に変数値を置き換える方法はありますでしょうか。
因みにSmartyの利用も考えましたが、色んな環境で動くことを考慮して利用せずに組もうと思います
0084nobodyさん
2007/05/28(月) 18:13:09ID:ni3tLdmG0086通りすがり
2007/05/28(月) 19:44:58ID:???1 <?php
2 class tmpA{
3 var $m_html="";
4 function tmpA($fpath=""){
5 //本当はここでfopen fcloseでファイル読み込み
6 $this->m_html = "<H3>__KMD__</H3> <OL> <LI>__DAY__ <LI>__TXT__ </OL>";
7 }
8 function tmpB($row){
9 list($k, $d, $t) = explode("<>", $row);
10 $ret = preg_replace("/__KMD__/i",$k,$this->m_html);
11 $ret = preg_replace("/__DAY__/i",$d,$ret);
12 $ret = preg_replace("/__TXT__/i",$t,$ret);
13 return $ret;
14 }
15 }
16 $c = new tmpA();
17 $OUT_HTML = "<html><head></head><body>";
18 $data = file("data.txt");
19 for($i=0; count($data)>$i; $i++){
20 $OUT_HTML .= $c->tmpB($data[$i]);
21 }
22 $OUT_HTML .= "</body></html>";
23 echo $OUT_HTML; </xmp>
0089nobodyさん
2007/05/28(月) 22:30:20ID:???$data = file("data.txt");
for($i=0; count($data)>$i; $i++){
list($Komidasi, $DAY, $TEXT) = explode("<>", $data[$i]);
$OUT_HTML .= <<<TEXT
<H3>${Komidasi}</H3>
<OL>
<LI>${DAY}
<LI>${TEXT}
</OL>
TEXT;
}
で、いいじゃん。
0090nobodyさん
2007/05/28(月) 22:52:21ID:???>>86はどうか知らんが、純粋なOOPやってる人ならclassに入れるのはあたり前。
使う必要があるとかそういったことは手続き型脳の視点だから。
俺ならmainメソッドも書いて、最後にそれだけ実行するようにするけど。
0091通りすがり
2007/05/28(月) 23:07:30ID:???クラス化しておいた方が、メンテと拡張はしやすいと思ってるだけ。
ログやぶっこ抜いたhtmlに応じてテンプレートを切り替える時とかね。
0092nobodyさん
2007/05/28(月) 23:16:31ID:???理由も持たずに何でもクラスに入れりゃいいと思い込んでるならOOP脳だろ
例のクラスはオブジェクト設計的に何の意味も持ってないしクラスにした価値もない
よって>>89のようにやるのが正解 (つーかロジック示せば十分だろ)
0093nobodyさん
2007/05/28(月) 23:18:57ID:???0094通りすがり
2007/05/28(月) 23:25:53ID:???ま、俺の場合は、
>>予め外部ファイルに作っておいたHTMLの雛形の特定の場所に変数を置き換えて表示する処理にて、
ってな第一要件をふまえると、ループ内に直にひな形を書くのはNGだと思ったから。
んで、外部にひな形が有るすなわち、テンプレートは切り替わる可能性がある。と
だからテンプレート切り替えの処理はまとめておいた方がいいよなぁ。→クラス作っておくこうか
となると
0095nobodyさん
2007/05/29(火) 00:10:52ID:7xq0Zk/Psmartyが使えない環境ってどんな環境?
って、このスレの常連みたいな意地悪な解答はおいといて
知ってるかもしれないけどsmartyなどPHPでできたテンプレートエンジンは
パスさえ通せば動くので、よほど特殊な環境じゃなければ
動かせるので、素直に使った方が楽だと思うけどなあ
0096nobodyさん
2007/05/29(火) 00:26:02ID:???全てをオブジェクトにしないと使えない言語だってあるわけですよ。
PHPしかやったことない人間は知らんが、
Javaしかやったことないような人間が、
中途半端OOPもできるPHPに移行してきた場合、
必然的に全てオブジェクトになってしまうだろ。
0098nobodyさん
2007/05/29(火) 01:49:36ID:???ただ他人のコードを幾つかいじった経験からいうと
・ロジックが画面半分超える場合は分離してくれ
・Perl風に書くのだけはやめてくれ、つかPerlで書けよ
と思うときはある。
とりあえずヒアドキュメントでHTML書くのはやめてくれ、マジデ orz
0100nobodyさん
2007/05/29(火) 02:16:01ID:???PHP4とPHP5とでは記述の違いはありますか?
0101nobodyさん
2007/05/29(火) 02:30:48ID:???4の書き方にあわせれば当然5でも使える。
5から使えるようになった機能や関数があるから、
5の書き方をした場合、4で使えるとは限らないのもまた当然。
0102nobodyさん
2007/05/29(火) 05:30:24ID:???<H3>..</H3>
phpとは関係ないけど、htmlの「タグ」は小文字<h3></h3>で書く癖つけたほうがいいよ
0103nobodyさん
2007/05/29(火) 06:26:11ID:???いやいや大文字がいいよ
0105nobodyさん
2007/05/29(火) 07:49:20ID:???0106nobodyさん
2007/05/29(火) 08:24:04ID:???俺は小文字で書くけど。
0107nobodyさん
2007/05/29(火) 08:50:19ID:???0108nobodyさん
2007/05/29(火) 10:19:59ID:nFUqZanjとりあえず確認したところではrequireやsession_startなどの行を入れて
ブラウザからソース見るとその部分に?が入っているのですが
これはいったいどういうことなのでしょうか?
0109nobodyさん
2007/05/29(火) 10:34:41ID:???htmlの知識もある程度あったほうがよろしい。
phpもだんだん手続き型からオブジェクト型に変化してるように、
htmlも進化しているのさ。
時代に即した書き方を覚えるのもプログラマとしてはよい心がけだと思うぜ。
まぁhtmlの場合はブラウザに実装任せてるから滅茶苦茶でも動くんだけどね。
0111nobodyさん
2007/05/29(火) 10:55:15ID:nFUqZanjなるほど、ありがとうございました。
0112nobodyさん
2007/05/29(火) 11:56:20ID:4MbNvczKこれってどうしてなんでしょうか?
0113nobodyさん
2007/05/29(火) 12:06:27ID:???0114nobodyさん
2007/05/29(火) 12:32:07ID:???0115nobodyさん
2007/05/29(火) 12:39:43ID:???ttp://e-words.jp/w/E99D99E79A84E5A489E695B0.html
ttp://e-words.jp/w/E382B0E383ADE383BCE38390E383ABE5A489E695B0.html
0116nobodyさん
2007/05/29(火) 12:56:15ID:4MbNvczKなるほど
0117nobodyさん
2007/05/29(火) 13:03:50ID:05UZMunqfunction __construct($mode) {
$this->{$mode}();
}
…
}
この{$mode}を__constructに渡した任意の文字列に置き換えて
そのメンバーmethodを実行したいのですが、可能でしょうか?
やりかたをおしえていただけますでしょうか?
0118nobodyさん
2007/05/29(火) 13:15:40ID:xx8sT90w/ ヽ
( ノ⌒〜⌒〜⌒ヽ、 )
ヽ/ \, ,/ i ノ
| ≧ , ≦ |
| 、 ,,,,(、_,),,,, ノ|
ヽ ト=ニ=ァ /
\ `ニニ´ /´ ̄ヽ
/ ̄`┻━┻' '´- }
r' f{ _ノ癶_ ノ} /
/ ハ`l´/,ゝ' /,r‐-、 j
〈´7'{ V'´ '/ />’
`7 ヽ ヽ / / l | __ ,.- ._
/ ハ ヽ/ / ,ヽ/ ̄ /´¨'´‐、 `ヽ プッー
/ / 丶.,′ / ' /  ̄7 ヽ.、_ ', ´⌒`::`)
. ,' / ,' /! ,'ヽ \`7 ≡⌒;;⌒`)
/ / / / ヽ_ /、 / , ,' ::⌒`;; )
/ / / ハ ,イ、 `ヽ._/ .X / /
/ ./_ / ./ ` } }、ー- -'´ ,イヽ _,.イ
/ ,.-_ヽ〉、./ / / /l ` ′l,.-ヽ''´ ,'
ヽ `^_ヾ、 / 丶-、| _,ィ'´ ,'
`ーr_'二`._/ 「 ̄ l /
| | /
| ! /
| l /
l | /
0119nobodyさん
2007/05/29(火) 13:25:46ID:???何がやりたいのかサッパリ。
>$this->{$mode}();
何これ?
>そのメンバーmethodを実行したいのですが
どのmethod?
class Hoge {
private $mode;
function __construct($mode) {
$this->mode = $mode;
}
function foo() {
return $this->mode;
}
}
$obj = new Hoge("ちんこ");
echo $obj->foo();
0121nobodyさん
2007/05/29(火) 13:32:23ID:???0123nobodyさん
2007/05/29(火) 14:45:00ID:???0124nobodyさん
2007/05/29(火) 15:00:12ID:???ていうか、スキル以前に頭が悪い(藁
ほんと使えない。
ここ以外にPHPの質問板を紹介しろ。
0125nobodyさん
2007/05/29(火) 15:04:38ID:???___ ━┓ ___ ━┓
/ ― \ ┏┛/ ―\ ┏┛
/ (●) \ヽ ・. /ノ (●)\ ・
/ (⌒ (●) /. | (●) ⌒)\
/  ̄ヽ__) / | (__ノ ̄ |
/´ ___/ \ /
| \ \ _ノ
| | /´ `\
0126nobodyさん
2007/05/29(火) 15:04:57ID:???http://pc11.2ch.net/test/read.cgi/php/1158647441/
0127nobodyさん
2007/05/29(火) 15:10:04ID:6paIllMGページの特定の場所にジャンプしたいとき、
<a href="#foge">
リンクの場合には、上記のようにしますが、
ボタンフォームの場合にはどうすればいいのでしょうか?
<form method="POST" action="#foge">
このようにしてもダメでした。
0129nobodyさん
2007/05/29(火) 15:12:48ID:???ここがなんのスレか理解できるまで>>1を読んだ後、
http://pc11.2ch.net/test/read.cgi/hp/1178272099/
こっちにいってくださいね。
0130nobodyさん
2007/05/29(火) 15:15:12ID:???値をセットしてゲットしてechoするだけのクラスを書いて117に対して何を言いたいのかさっぱり?
ほんと低脳という言葉がぴったりだな・・・
0131nobodyさん
2007/05/29(火) 15:16:01ID:6paIllMGすみませんでした。そちらできいてみます。
0132nobodyさん
2007/05/29(火) 15:27:04ID:???この時間帯はヘボ回答者と煽ることしかできない馬鹿しかいないから、
夜聞くといいよ。なんせニートが元気な時間帯だからな。
0133nobodyさん
2007/05/29(火) 15:28:23ID:???0134117
2007/05/29(火) 15:33:03ID:05UZMunq>>121さんの言うとおり、可変メソッドがやりたいのです。(言葉を知らなくて的確に説明できませんでした)
ですので、>>119さんのでは意図した動きをしません。(ありがとうございます)
調べてみると、
$val = 'hoge';
$this->$val();
これはできるようなのですが、(試してはいません)
$val = 'hoge';
$this->Method$val();
これはできないのでしょうか?
ブラケットをいれてもパースエラーになります
0136nobodyさん
2007/05/29(火) 16:32:41ID:dXtsAnsD今、ユーザー登録のフォームを作っていますが、
入力された情報をテキストに保存するかデータベース(mysql)に保存するか迷っています
レコードの取得や削除を考えれば圧倒的にデータベースが有利ですが、
テキストのメリットは何があるのでしょうか?
フォームに自由記入欄があったあっとして、そこで全角200文字くらい打ったりする人がいる場合、
それはテキストに保存した方がよかったりしますか?
0139nobodyさん
2007/05/29(火) 16:49:10ID:???煽りではない。分かってない奴に対する単なる指摘。
お前みたいのが頭の悪い煽り。
能力ないならもっと謙虚になれ。
>>136
データベース使うべし
0140nobodyさん
2007/05/29(火) 17:17:44ID:???その説明ではどういうことをしたいのかわからないが、
>>117でやりたいことはマニュアルに書いてる通りでできるはず。
>>136
テキストのメリットなんてDBが使えない鯖でも動くとか、
セキュリティにDBほど考慮する必要がないってことぐらい。
DBがどういう目的で作られたかを考えれば、
DBがテキストよりもあらゆる面で優秀なのはわかる。
何より楽だからね。あえて難しい道を進みたいならテキストで。
>>138
$val = '';の間違いかな。
その場合$valがメソッド名だからいらない気もするけど。
>>139
どうみても煽りだろ。煽りじゃなくて指摘とか言い分が馬鹿すぎる。
ていうか何だその回答は。簡単な質問にどうでもいい答えしやがって。
偉そうなこといっといてヒドイなこれはwwwwww
0141nobodyさん
2007/05/29(火) 17:22:57ID:dXtsAnsDありがとうございます
みなさん親切で助かりました
0142138
2007/05/29(火) 17:25:06ID:???違うよ、>>134が意図してる動作は$valの文字列と
'Method'とを連結させた名前のメソッドをコールしたいってことだろう
0144nobodyさん
2007/05/29(火) 17:32:20ID:???なるほど。漏れは型指定でもしたいのかと思ったわ。
連結演算子がわからないような質問者とは思えないんだけどね。
>>143
お前はただの煽り馬鹿だと思っていたが、
ヘボ回答者でもあったから煽りたくもなるわwwww
0145nobodyさん
2007/05/29(火) 17:35:55ID:???014669
2007/05/29(火) 17:43:05ID:???全レスしたい位ですが、要所レスにて割愛させて頂きます。
>>86
サンプルまで書き起こして下さいまして大変分かりやすいです。
ただ、当方所謂php4までの書き方しか身についておらずオブジェクト指向なのは取り扱った事がなかったりしています。
良い機会なのでclassでの書き方に挑戦してみようと思います。
HTMLタグに関しましてはXHTMLが小文字を推奨していることは把握していましたが、癖でつい大文字表記してしまいました。
今後どっちに転ぶのか分かりませんがとりあえず小文字の癖をつけようと思います(後はスラッシュも)
結局のところ当方がやろうとしていることはclassで指定するか、或いはfor内にぶち込むしか無いという事でしょうか。
>>83で書いたのは噛み砕いた感じでして実際は10-15行程度ですのでメンテのし易さを考慮してロジックとデザインを分けて処理しようと考えておりました。
ちなみにSmartyを使わない理由はphpバージョン云々より処理速度が低下するのを懸念して避けました。
宜しくお願いします。
0147nobodyさん
2007/05/29(火) 17:49:51ID:TCS52xeP素直にPEAR使ったほうがいいのかな?
0148nobodyさん
2007/05/29(火) 17:54:39ID:???simplexmlでRSS出力したいってこと?
まぁsimplexmlはやめたほうがいいよ。
出力されたソースみたら萎えるよきっと。
0149nobodyさん
2007/05/29(火) 17:58:30ID:TCS52xePうんたしかに・・・
そしてRSSの種類の多さに泣きそうになった。
PEARのXML_RSSを使うのが一番無難ですか?
0150nobodyさん
2007/05/29(火) 18:03:45ID:???0151通りすがり
2007/05/29(火) 18:07:19ID:???function tmpB($m_html,$row){
list($k,$d,$t) = explode( 省略…
$ret = preg_replace("/__TXT__/",$t,$m_html);
省略
return $ret;
}
$m_html = テンプレの値;
省略
for($i=0 …以下略){
$OUT_HTML .= tmpB($m_html,$data[$i]);
}
ってやれば、ファンクションだけでもできるっしょ
テンプレートに変数直書きするのではなく、置換用文字列を与えておけば、
いいってだけだから。
0152nobodyさん
2007/05/29(火) 18:07:41ID:???Atomにしなさいよっ!
0153nobodyさん
2007/05/29(火) 18:12:12ID:???0155nobodyさん
2007/05/29(火) 18:36:48ID:TCS52xeP難儀だなこりゃw
015669
2007/05/29(火) 18:54:35ID:???なるほど!レスありがとうございます。
そんな方法があるとは思慮が及びませんでした。
とりあえずはそちらの方法で実装して、追々class指向の書き方のスキルが備わったら改めて前述の方を試してみます。
アドバイスありがとうございました。
0157nobodyさん
2007/05/29(火) 19:08:00ID:GuBB/5Uva.php、b.phpがあったとして
b.phpには
function fopen( )
{
return mysql_connect();
}
function fclose( $link )
{
mysql_close( link )
}
と、あるとして、a.phpで
if( ボタン1が押されたら ){
$fh = fopen( );
}
else if( ボタン2が押されたら ){
fclose( $fh );
}
と、すると、当然ならが$fhの値はなくなってmysql_closeは失敗するのですが
$fhの値を保持しておくにはどうしたらいいのでしょうか?
それともPHPではこういう書き方自体しないのでしょうか?
一連の流れは同じ関数内でするのが普通なのですか?
例えば、
mysql_connect();
なんかテーブル処理
mysql_close( )
と、必ずMySQLのテーブル操作をするたびにconnectとcloseを毎回呼び出すみたいな・・・
0159nobodyさん
2007/05/29(火) 19:16:36ID:???状況がよく分からんな
そら、mysql_connect() がスクリプト内で
一度も呼ばれずにmysq_close() が呼ばれれば
当然失敗するだろう
0160nobodyさん
2007/05/29(火) 19:22:40ID:GuBB/5Uvあ、そんなのがあるんですか、これ閉じたい場合はどうしたら閉じれるんですか?
>>159
いやいや、言いたいのはそこじゃなくて、戻り値として受け取っても
mysq_closeに渡す時には値が消滅するからどうしたらいいでしょう?ってとこなので
0162nobodyさん
2007/05/29(火) 19:26:49ID:???言葉に対する回答。
>$fhの値を保持しておくにはどうしたらいいのでしょうか?
静的(static)にする。
>必ずMySQLのテーブル操作をするたびにconnectとcloseを毎回呼び出すみたいな・・・
NO
connectは最初にやって、全ての操作がおわってから閉じればいい。
その間接続は持続されている。
MySQL開けたり閉じたりするのは自分的にはこうする。
class Hoge {
private $link;
function mySqlOpen($server, $username, $password) {
$this->link = mysql_connect($server, $username, $password);
if (!$this->link) {
//例外処理
}
}
function mySqlClose() {
if (!$this->link) {
mysql_close($this->link);
}
}
}
0163nobodyさん
2007/05/29(火) 19:33:11ID:GuBB/5UvPHPに馴れている人には理解不能かと・・・
PCソフトばかりやってるとこのPHP等の処理の流れに戸惑ってしまって・・
ボタン押したらまた自分(他)を最初から呼び出してとかこれ慣れが必要だなあと、
んで、何がしたいかといいますと
例えばボタン1を押すとDB接続、ボタン2を押すと閉じる、
そして、ボタン3を押すとAテーブルの内容を表示、ボタン4を押すとBテーブルの中身を表示・・・と
そもそもこういうやり方自体が普通しないのかなと・・・
ボタン1を押したら接続→テーブルA表示→閉じる
ボタン2を押したら接続→テーブルB表示→閉じる
こういうほうが一般的ですか?
0165nobodyさん
2007/05/29(火) 19:36:23ID:GuBB/5Uvうは、それですそれです!!
そういう記述が全くの無知でして、上でアホみたいな書き方をしました・・
あーこれめちゃくちゃ参考になります。
ありがとうございます。
その前にクラスの勉強しないと・・・
0166nobodyさん
2007/05/29(火) 19:39:19ID:GuBB/5Uvえええええ!
>>162さんはNoと・・・
でも毎回するのは一番簡単だけど、コードが増えますよね
更に接続→表示→閉じるを鬼のように繰り返してもいいのか疑問ものこります
■ このスレッドは過去ログ倉庫に格納されています