【PHP】下らねぇ質問はここに書き込みやがれ 43
■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん
2007/04/01(日) 04:21:50ID:VGqlLhlDPHPで最良の教本はこの公式マニュアル。市販の書籍は嘘が多いので鵜呑みにしない。
過去スレ、関連スレ、FAQなどは>>2-10辺り
◆前スレ
【PHP】下らねぇ質問はここに書き込みやがれ 41
http://pc11.2ch.net/test/read.cgi/php/1173163186/
◆質問する時の注意
・ 自分のIDを表示させること。(メール欄に何も記述しないこと。空白も入力しちゃダメ)
・ サーバーのOS(Linux、Windows他)、WebサーバーとPHPの種類やバージョン等を明記すること。
・ 己の行った操作、変更などを詳しく明記すること。
・ エラーメッセージはそのまま表記すること。「エラーが出ます」だけでは回答不可。
・ 質問者として、態度をわきまえること。
・ 事前に公式マニュアル、リファレンス本くらいはちゃんと目を通しておくこと。
◆質問後の注意
・偽者防止に必ずIDを表示させること。(メール欄に何も記述しない)
・2回目以降は最初に質問した際のレス番号を名前欄に入れること。
・解決しなくても回答をもらった場合はお礼を言うこと。
(荒らし、煽りは除く。煽られたときも、無闇に反論せずスルーすること。)
◆回答者への注意
・誰にレスしているのか分からないと困るので、>>(アンカー)をつけて回答すること。
【その他諸注意】
・正規表現・PEAR・テンプレート(Smarty等)・フレームワークは各該当スレへ http://pc10.2ch.net/php/subback.html
・SQLについての質問はデータベース板(PCカテゴリ)の各スレで http://pc10.2ch.net/db/subback.html
0135nobodyさん
2007/04/03(火) 16:38:45ID:???例えば複数のデータをinsertする場合、全件のデータをDAOに渡してDAOの中でループさせてクエリを発行しますか?
もしくはロジック側でループさせて最小単位まで分割し、1行ごとにDAOを実行しますか?
またDAOのメソッドは一つの機能に特化して実装すべきですか?それとも汎用性を持たせるべきですか?
where句やorder句などをDAOメソッド内で記述してその条件のみ取得させるか、
ロジックからDAOへ引数としてそれらを渡す形にして他の場所でも使えるようにするかで迷っています。
0137nobodyさん
2007/04/03(火) 16:51:20ID:???おれはデバックはprintにしてメインはecho
0138nobodyさん
2007/04/03(火) 16:52:11ID:UEWlkpj30141nobodyさん
2007/04/03(火) 17:49:25ID:???DAOのベースになるクラスで汎用的なメソッドを実装して
各モデル毎のDAOで必要になる固有のメソッドを
ベースクラスの汎用的なメソッドを使いつつ実装していけばいいんじゃない?
機能に特化したメソッドにするかしないかは
機能次第で使いまわすケースが多ければ
引数である程度自由度を持たせるとか
その例だと複数のデータをinsertする箇所がたくさんあるなら
それのためだけのメソッドを用意して、そうでなければ
ビジネスロジック側でループさせてもいいんじゃない?
0144nobodyさん
2007/04/03(火) 19:11:46ID:UEWlkpj3Flex
0146nobodyさん
2007/04/03(火) 19:18:30ID:???0148nobodyさん
2007/04/03(火) 20:14:32ID:???ハゲてるだろ?
上記ログが連なったログの一行を削除して
再度番号を振り、配列しなおす場合具体的にどのような
プログラムになるのでしょうか?
0153nobodyさん
2007/04/03(火) 20:36:43ID:???echoに括弧を付けてはいけない。
echo $hoge,$hoge * 1000,number_format($hoge);
ドット演算子だと
echo $hoge.($hoge * 1000).number_format($hoge);
こうしないといけないし内部的に結合してやる必要性はないと思う。
0154nobodyさん
2007/04/03(火) 21:05:30ID:???デバックのときくらいしか使わないかな〜
0155111
2007/04/03(火) 21:08:25ID:3FiNTxl4>>117
レスサンクス
var_dump ( mb_ereg ( $pattern, $hoge ,$c ) ) ;
var_dump ( $c ) ;
ってやったら、なんでtrueが帰るのか解りました。
"^[^!-`].*}$"
こんな感じかな?
自分のかきこ良く見ると英数記号とあるけど、半角記号と数字以外の間違いでした。
だから、範囲の指定もこんな感じかな。
>>115
ちなみに[]の中はエスケープ不要みたいですよ。
0156nobodyさん
2007/04/03(火) 21:09:39ID:???俺様に恥をかかせるのか!
0158nobodyさん
2007/04/03(火) 21:20:05ID:???これを使うために、いちいちすべてのファイルでrequire_onceするのが面倒なんですが、
何かいい方法はありませんか?
0160nobodyさん
2007/04/03(火) 21:28:58ID:???└─┘
おらっしゃあぁぁ!!!
∩∧ ∧
ヽ( ゚Д゚)
\⊂\
O-、 )〜
∪
0161nobodyさん
2007/04/03(火) 21:33:47ID:???意味不明なんだが・・・
0162nobodyさん
2007/04/03(火) 21:40:10ID:???php.ini auto_prepend_file
・PHPで書く
・問答無用で一番最初に読み込まれる
php extensionとしてphpの関数に含める
・Cで書く
0164nobodyさん
2007/04/03(火) 21:46:37ID:???0165nobodyさん
2007/04/03(火) 21:49:35ID:y3kK4c5q$pattern = '/two (.+)\,/';
preg_match($pattern, $subject, $matches);
print_r($matches);
/* 出力結果:
Array
(
[0] => two potatoes, three carrots,
[1] => potatoes, three carrots
)
*/
正規表現で "potatoes" をマッチさせたいのですが、$matches[1]を見ると
コンマの後ろの文字列までマッチしてしまいます。
どうしてでしょうか?
0167nobodyさん
2007/04/03(火) 21:56:57ID:y3kK4c5q"potatoes"がマッチするにはどう表現すればいいのでしょうか?
0168nobodyさん
2007/04/03(火) 21:58:31ID:???正規表現は原則として、最長最左一致をします。
これはどういうものかというと、可能な限り長めにマッチするということです。
その正規表現の例で言うと"two "のあとに1文字以上の任意の文字が来て、
その後にカンマがついていればいいことになります。
そしてその最長のパターンはというと、あとは考えてみてくださいw
0170nobodyさん
2007/04/03(火) 22:02:20ID:???$pattern = '/two ([[:alpha:]]+),/';
というか妙な正規表現の使い方だな。
上記ナンバー+1 名前 内容 日付 パスワード
上記ナンバー+1 名前 内容 日付 パスワード
このようにログが並んでいるのですが
例えば上から二行目のログのみを
削除する場合具体的にどのような関数を私用すればいいのでしょうか?
その際削除した行以降のナンバーを再度正しく振り直したいのです。
0173nobodyさん
2007/04/03(火) 22:07:30ID:???$pattern = '/two (.+?),/';
$pattern = '/two ([^,]+)/';
0175nobodyさん
2007/04/03(火) 22:13:04ID:y3kK4c5q0178nobodyさん
2007/04/03(火) 22:25:27ID:???<?php
ログを配列に読み込む処理
配列の上から2件を削除する処理
配列をログに書き込む処理
?>
こんな感じでいかがか?
すいません、関数自体あまり把握できてなくて
ちょっとつまづいております、
ありがとうございます。
>>176
関数の意味を調べてみます、
お手数おかけします。
>>177
このログにフォームのラジオボタンつけて出力する時に
利用するからだったと思います。
自分で作っといてあれですが目の前の事で手一杯で。
>>178
十分です、
本当にすいません。
0182nobodyさん
2007/04/03(火) 22:43:07ID:/5XcJrtX必要な部分をeucのページに表示させたいと思っています
echo mb_convert_encoding($str_utf8, "EUC-JP", "UTF-8");
としてみたのですが、丸数字(@A…)が半角の“?”になってしまいます
ご教示いただけませんでしょうか
http://www.pachiweb.com/updir/data/card.jpg
データベース機能とゲストブック機能を合わせた
phpを作りたいと思い先程書き込ませていただきました。
ログに番号ふっているのはログを出力する際、
フォームのラジオボタンのvalueに代入して
削除に利用するためです。
現在、書き込みの際に情報かコメントか分けて保存し
最新の情報書き込み5行、
コメント書き込み5行を表示するところまでは
完成しました。
0187182
2007/04/03(火) 23:11:04ID:???検索などをしてみてはいたのですが、php.iniの文字コード設定を、
というのが多くていろいろ試行錯誤してみてはいるのですが・・・
再度見直してみたいと思います
>>185
mb_convert_encodingの引数ですよね?今検索して初めて知りました
こちらも試してみたいと思います
おふた方どうもありがとうございました
0189nobodyさん
2007/04/03(火) 23:19:03ID:???1. A君がフォームを表示。
2. B君がフォームを表示。
3. A君が番号2のログを削除。
4. B君が番号3のログを削除。
5. (ノ∀`) アチャー
現在のプログラム自体アウトですかね?
一応、
現在作成中のものはバリューに入れる番号をコメントは1,2
情報はa1,a2になるようにしようと思うのですが。
そういう問題ではなくて?
0191182
2007/04/03(火) 23:39:28ID:???ほんと、おっしゃる通りだと思います・・・
>>190
横からなんなんですが、削除が起こってもそこを埋めない(書き込み)通番を
持っておくべきだと思います
表示上番号が飛ぶのが気持ち悪いのでしたら行番号を表示されればいいのでは
ないでしょうか
おっしゃるとおりですね、
行番号をvalueに挿入するようにします。
これがかなりネックになってましたので。
0193155
2007/04/04(水) 00:03:54ID:jkYA50BDそんなつもりはなかったんだ。
「ちなみに」っていうのはまずかったね。
すまん。
ところで>>155のレスでもまたASCIIコード見間違えてて微妙に間違ってたOTZ
いないとは思うけど、ここ見てあれ使う人がいたら悪いので一応報告しとく
最初の文字が数字と記号と制御文字以外の文字列にマッチする正規表現は
'^[^\W0-90-9].*$'
こんな感じでどう?
なんか微妙に板違いだけど・・・
0195nobodyさん
2007/04/04(水) 00:14:16ID:???ログを全て表示した時にも
ラジオボタン削除利用したいので
フォームへのvalue値の自動挿入はしときたいのですが
無謀ですかね。
0198nobodyさん
2007/04/04(水) 00:30:35ID:???0199nobodyさん
2007/04/04(水) 00:35:05ID:???番号抜けアリのラジオボタンを並べりゃ「ラジオボタン削除が利用できる」けど
富豪的に>>178でやればいいよ。配列に何MB食わせるのか知らないけど。
削除用のラジオボタンとやらをログのナンバーと無関係に連番振って吐いてるのかな。
0200nobodyさん
2007/04/04(水) 00:42:47ID:???っつーか何がしたくて今何が問題なのかがよくわかんないんだけど.。
ログを全て表示した時にラジオボタン削除(って何なのか知らんけど)をするために
フォームへのvalue値の自動挿入(hiddenのことか?)することは
別に無謀でも何でもないからさっさと作ればいいと思うけど
0201nobodyさん
2007/04/04(水) 01:01:03ID:???そろえたものをログに書き込むのは必要ないし効率が悪いからやめたまえ。
ログを配列に読み込んで、その配列を連番でvalueに利用すればおまえのやりたいことはできる。
つべこべいわずだまってマニュアルみろ。
16歳、工業高。
0202nobodyさん
2007/04/04(水) 01:02:13ID:???氏ね
countでカウントしたものを
ラジオ削除のナンバーに置き換えて処理するようにして
それで手におえないようなら
番号抜け削除を次候補という事で考えてみます。
本来ならあぼーんが掲示板の性質上いいのでしょうが
今回は比較的単純なスクリプトで後に大量設置する可能性があるもので
文字数省略できるところはしとこうかと。
>>199
削除用番号はログのナンバーを引用してます。
>>200
すいません、
html部分に先にvalue手打ちで書き込んどけということかと思ったもので
ログ利用では駄目なのかなと。
0204nobodyさん
2007/04/04(水) 01:02:42ID:???0206nobodyさん
2007/04/04(水) 01:03:41ID:???0207nobodyさん
2007/04/04(水) 01:04:17ID:???0208nobodyさん
2007/04/04(水) 01:08:09ID:???そもそも「行の順番」て何だ? DBでそんな概念あるか?
0210nobodyさん
2007/04/04(水) 01:12:03ID:???0211nobodyさん
2007/04/04(水) 01:23:36ID:???1年ぐらい前にその関数使ってゴニョゴニョしたら5〜6分かかってたバッチ
処理が2秒で終わったことがあった。
ちゃんとテストして処理に抜けとか問題は無かったけどあまりにも早すぎて
怖くなってから元に戻しておいた。
0212nobodyさん
2007/04/04(水) 01:27:53ID:???そんなプログラムの組み立てによって差が出るんですね。
あっても2,3秒のものだと思ってました。
0214nobodyさん
2007/04/04(水) 01:36:18ID:???ツッコまれてる理由は理解したの?
効率とか関係ないから。
> ナンバー 名前 内容 日付 パスワード
「ナンバー」とやらをキーにしてログを削除したいんだろ?
「ナンバー2のログを削除」みたいな感じで。
その「ナンバー」が削除処理の度にコロコロ変わったらマズいのは分かるよな?
分かってるならあとは好きに書けばいい。
ナンバーは消して現在こういう感じで処理してます。
explode以降は改修前のままですので今から直しますが。
$cdlog=file('comment.txt');
for($i=0;$i<count($cdlog)-1;$i++){
$cditems=explode("\t",$cdlog[$i]);
if($items[0]==$_POST['delradio']&&$items[4]==$_POST['delkey2']||$items[0]==$_POST['delradio']&&'pass'==$_POST['delkey2']){
0218nobodyさん
2007/04/04(水) 02:24:38ID:???あなたがページを表示したとする。
あなたはname="delradio" value="5"のカキコを削除したいと思った。(削除ボタンはまだ押していない。)
と、ここで他の誰かが割り込んで、name="delradio" value="4"のカキコを削除した。(削除ボタンを押した。サーバ側で削除処理も完了した。)
あなたは削除ボタンを押した。
あなたは目的のカキコを削除できる?
たまたまじゃなくて必ず削除できる?
0219nobodyさん
2007/04/04(水) 02:29:03ID:???格納した順というか、リソート機能ならPHPMyAdminで一発で出来るし
自前でやるとしても簡単なコードで出来るでしょう。
オートインクリメントしてるなら、それでソートすればいいんじゃね?
もっともこれはPHPMyAdminみたいな、基本ORDER BY付けないGUIで見るときに見やすいとかだけで
普通にDBから検索する場合、大抵はORDER BYつけるしリソートすること自体あんまり意味無いと思うが。
ファイルロックをしないといけないということですよね。
後程完成品をアプしますのでまたお気づきになった点を
ご指摘いただければありがたいです。
0221nobodyさん
2007/04/04(水) 03:08:41ID:???まぁいいやコードが有れば話もしやすいだろうし。
0223nobodyさん
2007/04/04(水) 03:21:56ID:???1 a
2 b
3 c
というデータになっているとしよう。Xという人が1を、Yという人が2を
ほぼ同時に消すという操作をしたとしよう。ファイルロックをしたとして、
XのクエリがYのそれよりも速く到達したときどうなるかというと、
Xのクエリの処理後
1 b
2 c
になる。これはわかるよね。次にYのクエリの処理だが、
これは2を消せという指令だ。ロジックはファイルの中から2を探して消すのだから、最終的には
1 b
になる。でもYが消したかったのは最初のbの行じゃなかったのか?
というのが問題。わかったかな。
と言う事は結局削除文字列代入しか無理と言う結論に?・・・・・・・・・
しっかしよくスレッドフローティング方式の掲示板とか作れますね、
作ってる方尊敬しますわ。
下記は現在作成中のソースです。
一番下のソースはめちゃくちゃなので放置お願い致します。
http://www.pachiweb.com/updir/data/php.txt
したい事は投稿者が自身でコメントか情報かを選択しそれを別々に保存、
そのログから新着5行づつを表示させると言うものです。
ラジヲボタンでその記事を削除したいのですが
なるべく情報、コメント含めラジオボタンで選択→パスワード入力後
ワンクリックで削除という手軽さで削除を行いたいです。
ファイル構成は
本体.php
reference.txt
comment.txt
です。
いろいろご解説頂いて本当にすいません。
マジすいません。
0226nobodyさん
2007/04/04(水) 03:39:33ID:???ごめん、コードを見ずにそういうことをしたい場合の定石を書くw
・ID列と連番列を別に取る
データには一度書いたら書き換わらないID列と、メッセージ番号(seq)を示す数を別に記録しておく
ID seq その他情報
1 1 a
2 2 b
3 3 c
消すときはIDをキーに行を探し、seq列を連番に書き換える。たとえば上の表のID2の行を消したときは
ID seq その他情報
1 1 a
3 2 c
のようにやる。IDは書き換えない
・そもそもseqはファイルに記録せずにいちいち数える
要件にもよるけどこれで十分処理が間に合う場合がけっこうある
IDとSEQに同じように番号を割り振ったとしても
ID側は歯抜け数字列になっても
SEQ側はきれいな数字列に直されると。
要するにID側をvalueに割り振れば問題解決ですか。
とりあえずナンバーをまた採取するようにして
それをIDにしてladioに代入します。
結局、素人の私がナンバーを振り直したいとか
訳わからん事言わなければ普通に解決してた問題なのですね・・・・・・
0229nobodyさん
2007/04/04(水) 05:11:36ID:???処理が増えるようだけど172さんにとってはすっきり書けるような気がする
通番用にはそれの変数一つ増やすだけだし
あと“何が”削除されたのか後で管理者が分かるのもメリットと言えばメリット
書いては消し書いては消しタイプ(削除比率の高いもの)だと
ファイルが膨らむばかりなので向かないけど
0230虚弱PHP
2007/04/04(水) 09:25:54ID:???完全削除は別のオペレーションで。
0231nobodyさん
2007/04/04(水) 09:39:33ID:???「値に入れればいいんですね」とか言ってるのと同じだ
seqを毎回振りなおすほうが面倒じゃないか?
ログ中の順番で表示して番号を付けりゃいいじゃん
っていうか一番楽な方法はDBだけど
0232nobodyさん
2007/04/04(水) 11:22:30ID:???削除の際はそれを入力させれば確認できる。
一番簡単なのはやっぱりデータベースだけど。
0233nobodyさん
2007/04/04(水) 11:31:01ID:???例:
function Controller($request, $session, $result) {
$this->request =& $request;
$this->session =& $session;
$this->result =& $result;
}
0234nobodyさん
2007/04/04(水) 11:34:46ID:???http://jp.php.net/manual/ja/language.references.whatdo.php
■ このスレッドは過去ログ倉庫に格納されています