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

【PHP】下らねぇ質問はここに書き込みやがれ 43

■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん2007/04/01(日) 04:21:50ID:VGqlLhlD
まず読め→【PHP マニュアル】http://www.php.net/manual/ja/
PHPで最良の教本はこの公式マニュアル。市販の書籍は嘘が多いので鵜呑みにしない。
過去スレ、関連スレ、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
0120nobodyさん2007/04/03(火) 11:50:16ID:???
変数の内容を全部書き出して確認しましたか?
0121nobodyさん2007/04/03(火) 12:07:54ID:???
>>119
getHostByAddr($_SERVER['REMOTE_ADDR']) === $_SERVER['REMOTE_ADDR']
これが真になれば逆引きできねーってことになって判定するとか。
01221192007/04/03(火) 13:25:08ID:FtC4cK4M
>>121
ありがとうございます。
教えていただいたものを使ってみたところ、
診断くんで?判定になるProxyでも見事Proxy判定にすることができました。
こんな簡単なスクリプトだとは思っておりませんでした。
まだ取りこぼしているものもあるようなので、
他の方法を探して、それと組み合わせて使うことにします。
0123nobodyさん2007/04/03(火) 14:11:47ID:???
php+MySQLで会員制サイト作ってるんですが、
例えば、会員情報の変更phpで、
WHERE句を忘れていて、謝って全会員の情報を変更してしまう、
といったポカミスが発生しやすいあふぉな俺なんですが、
MySQLレベルでこれを防ぐ方法ってないでしょうか。

0124nobodyさん2007/04/03(火) 14:16:04ID:???
ユーザの権限制限でいけるだろ。

勉強ならいいが、公開する気なら・・
0125nobodyさん2007/04/03(火) 14:16:51ID:???
>>123
バックアップとってから開発とかデバッグとかすればいいんじゃないの?
それ以前に実地以外でテストするとか。
0126nobodyさん2007/04/03(火) 14:34:41ID:???
全テーブルをInnoDBとかで作っておいて、
変更する前には必ず
 BEGIN;
で、「あっー」ってときは
 ROLLBACK;
でいいんじゃね?
0127nobodyさん2007/04/03(火) 14:46:19ID:???
>>123
つうか、本番環境で作業するな
開発環境を別途作ってやれ
0128nobodyさん2007/04/03(火) 15:18:52ID:???
どこにも本番でやってるとも書いてないわけだが
0129nobodyさん2007/04/03(火) 15:20:50ID:pT0TAH0V
mysqlのmediumtextで格納しているデータを出力できません。

echo $row["comment"];

のような形では出力できないんでしょうか?
01301292007/04/03(火) 15:33:12ID:???
すみません。勘違いでした。
0131nobodyさん2007/04/03(火) 15:57:50ID:???
>>128
そりゃそうだ生本番は危険だぜ
0132虚弱PHP2007/04/03(火) 16:15:10ID:???
>>123
常にスクリプトを通してDBいじるしかないんじゃ。
スクリプトではWHERE句が付いてなかったらNGとか。

UPDATEには必ずLIMIT句つけるとか。
でも、これだと逆に問題の発覚が遅れる恐れ有り。
0133nobodyさん2007/04/03(火) 16:26:24ID:???
echoとprintどっちが速い?
0134nobodyさん2007/04/03(火) 16:27:44ID:???
>>133
テンプレ
0135nobodyさん2007/04/03(火) 16:38:45ID:???
DAOとビジネスロジックとの境界がよく分からないのですが教えて下さい。
例えば複数のデータをinsertする場合、全件のデータをDAOに渡してDAOの中でループさせてクエリを発行しますか?
もしくはロジック側でループさせて最小単位まで分割し、1行ごとにDAOを実行しますか?

またDAOのメソッドは一つの機能に特化して実装すべきですか?それとも汎用性を持たせるべきですか?
where句やorder句などをDAOメソッド内で記述してその条件のみ取得させるか、
ロジックからDAOへ引数としてそれらを渡す形にして他の場所でも使えるようにするかで迷っています。
0136nobodyさん2007/04/03(火) 16:48:46ID:???
>>133
echoが一文字分早い
0137nobodyさん2007/04/03(火) 16:51:20ID:???
どっちもかわんない。
おれはデバックはprintにしてメインはecho
0138nobodyさん2007/04/03(火) 16:52:11ID:UEWlkpj3
ライブチャットみたいなの作りたいんですけど、あれはPHPと何を連携したらいいのですか?
0139nobodyさん2007/04/03(火) 17:30:34ID:???
>>135
落ち着け、どこにもPHPと絡んだ質問ないぞ
0140nobodyさん2007/04/03(火) 17:41:00ID:???
>>135
時と場合によるとしか言いようがない

DAOのメソッドなんて、追加、更新、削除と
条件検索くらいじゃないの
0141nobodyさん2007/04/03(火) 17:49:25ID:???
>>135
DAOのベースになるクラスで汎用的なメソッドを実装して
各モデル毎のDAOで必要になる固有のメソッドを
ベースクラスの汎用的なメソッドを使いつつ実装していけばいいんじゃない?
機能に特化したメソッドにするかしないかは
機能次第で使いまわすケースが多ければ
引数である程度自由度を持たせるとか
その例だと複数のデータをinsertする箇所がたくさんあるなら
それのためだけのメソッドを用意して、そうでなければ
ビジネスロジック側でループさせてもいいんじゃない?
0142nobodyさん2007/04/03(火) 18:12:24ID:???
>>138
Flash
0143nobodyさん2007/04/03(火) 18:33:32ID:???
>>138
Javaアプレット
0144nobodyさん2007/04/03(火) 19:11:46ID:UEWlkpj3
>>138
Flex
0145nobodyさん2007/04/03(火) 19:15:57ID:???
>>138
俺とお前
0146nobodyさん2007/04/03(火) 19:18:30ID:???
(;´Д`)ハァハァ
0147nobodyさん2007/04/03(火) 19:41:36ID:???
>>133
echoのがカンマで区切って複数出力できるので便利。
速度的には変わらん。
0148nobodyさん2007/04/03(火) 20:14:32ID:???
おまえらに質問。
ハゲてるだろ?
0149nobodyさん2007/04/03(火) 20:20:38ID:???
>>147
なにそれ礼を出してくれると嬉しい。

echo(test,dayo,kana);
とか出来るのかな・・
0150nobodyさん2007/04/03(火) 20:23:09ID:????2BP(396)
ナンバー 名前 内容 日付 パスワード

上記ログが連なったログの一行を削除して
再度番号を振り、配列しなおす場合具体的にどのような
プログラムになるのでしょうか?
01511492007/04/03(火) 20:24:56ID:???
>>149
echo "test" , "test" ;
こういう事かな。
ドット( . )でもいいんじゃないの?
0152nobodyさん2007/04/03(火) 20:36:40ID:???
>>150
日本語でおk
0153nobodyさん2007/04/03(火) 20:36:43ID:???
>>149
echoに括弧を付けてはいけない。

echo $hoge,$hoge * 1000,number_format($hoge);

ドット演算子だと

echo $hoge.($hoge * 1000).number_format($hoge);

こうしないといけないし内部的に結合してやる必要性はないと思う。
0154nobodyさん2007/04/03(火) 21:05:30ID:???
CやPerlから入ってきた身としては、echoでは違和感を感じる・・・
デバックのときくらいしか使わないかな〜
01551112007/04/03(火) 21:08:25ID:3FiNTxl4
>>115
>>117
レスサンクス

var_dump ( mb_ereg ( $pattern, $hoge ,$c ) ) ;
var_dump ( $c ) ;

ってやったら、なんでtrueが帰るのか解りました。
"^[^!-`].*}$"
こんな感じかな?
自分のかきこ良く見ると英数記号とあるけど、半角記号と数字以外の間違いでした。
だから、範囲の指定もこんな感じかな。

>>115
ちなみに[]の中はエスケープ不要みたいですよ。
0156nobodyさん2007/04/03(火) 21:09:39ID:???
言わなくていいものを・・・
俺様に恥をかかせるのか!
01571152007/04/03(火) 21:15:52ID:???
>>155
ちなみにも糞もないなあ。
一般論で書いただけで、それを跡付け学習でエラソウに書くお前はなんだと思うが。
0158nobodyさん2007/04/03(火) 21:20:05ID:???
<pre>を使って、print_preなるテスト用の関数を作りました。

これを使うために、いちいちすべてのファイルでrequire_onceするのが面倒なんですが、
何かいい方法はありませんか?
0159nobodyさん2007/04/03(火) 21:28:39ID:???
>>157に対して>>155の反論
0160nobodyさん2007/04/03(火) 21:28:58ID:???
│  ↑
└─┘
おらっしゃあぁぁ!!!
 ∩∧ ∧
 ヽ( ゚Д゚)
   \⊂\
    O-、 )〜
      ∪
0161nobodyさん2007/04/03(火) 21:33:47ID:???
>>158
意味不明なんだが・・・
0162nobodyさん2007/04/03(火) 21:40:10ID:???
>>158
php.ini auto_prepend_file
・PHPで書く
・問答無用で一番最初に読み込まれる

php extensionとしてphpの関数に含める
・Cで書く
0163nobodyさん2007/04/03(火) 21:43:42ID:???
>>159-160
ワロタ
0164nobodyさん2007/04/03(火) 21:46:37ID:???
別に笑うところじゃないよ
0165nobodyさん2007/04/03(火) 21:49:35ID:y3kK4c5q
$subject = "needed: two potatoes, three carrots, five tomatoes";
$pattern = '/two (.+)\,/';
preg_match($pattern, $subject, $matches);

print_r($matches);

/* 出力結果:
Array
(
    [0] => two potatoes, three carrots,
    [1] => potatoes, three carrots
)
*/

正規表現で "potatoes" をマッチさせたいのですが、$matches[1]を見ると
コンマの後ろの文字列までマッチしてしまいます。

どうしてでしょうか?
0166nobodyさん2007/04/03(火) 21:50:37ID:???
>>165
そういうふうに命令してるからだろ
0167nobodyさん2007/04/03(火) 21:56:57ID:y3kK4c5q
>>166
"potatoes"がマッチするにはどう表現すればいいのでしょうか?
0168nobodyさん2007/04/03(火) 21:58:31ID:???
>>165
正規表現は原則として、最長最左一致をします。
これはどういうものかというと、可能な限り長めにマッチするということです。
その正規表現の例で言うと"two "のあとに1文字以上の任意の文字が来て、
その後にカンマがついていればいいことになります。
そしてその最長のパターンはというと、あとは考えてみてくださいw
0169nobodyさん2007/04/03(火) 21:59:58ID:???
>>167
$pattern = '/two (potatoes)/';
0170nobodyさん2007/04/03(火) 22:02:20ID:???
>>165
$pattern = '/two ([[:alpha:]]+),/';
というか妙な正規表現の使い方だな。
0171nobodyさん2007/04/03(火) 22:03:04ID:???
>>153
カッコが省ける
さらに、 カンマは結合しないからローコストって事かな・・
0172nobodyさん2007/04/03(火) 22:07:10ID:????2BP(396)
ナンバー 名前 内容 日付 パスワード
上記ナンバー+1 名前 内容 日付 パスワード
上記ナンバー+1 名前 内容 日付 パスワード

このようにログが並んでいるのですが
例えば上から二行目のログのみを
削除する場合具体的にどのような関数を私用すればいいのでしょうか?
その際削除した行以降のナンバーを再度正しく振り直したいのです。
0173nobodyさん2007/04/03(火) 22:07:30ID:???
>>165
$pattern = '/two (.+?),/';
$pattern = '/two ([^,]+)/';
0174nobodyさん2007/04/03(火) 22:11:45ID:???
>>172
必死で書き直してきたか。
いまアドバイス書いてやるからまってろ
0175nobodyさん2007/04/03(火) 22:13:04ID:y3kK4c5q
自己完結しました(・∀・)
0176nobodyさん2007/04/03(火) 22:23:01ID:???
>>172
file_get_contents
explode
implode
file_put_contents
0177nobodyさん2007/04/03(火) 22:23:50ID:???
>>172
それ掲示板のログだろ。
なんでナンバーをいじくる必要があるんだよ
0178nobodyさん2007/04/03(火) 22:25:27ID:???
>>172
<?php
ログを配列に読み込む処理
配列の上から2件を削除する処理
配列をログに書き込む処理
?>
こんな感じでいかがか?
0179nobodyさん2007/04/03(火) 22:29:36ID:???
>>172がいってるナンバーを正しく振り分ける理由がわからんが、無駄だからやめろ
0180nobodyさん2007/04/03(火) 22:33:57ID:????2BP(396)
>>174
すいません、関数自体あまり把握できてなくて
ちょっとつまづいております、
ありがとうございます。

>>176
関数の意味を調べてみます、
お手数おかけします。

>>177
このログにフォームのラジオボタンつけて出力する時に
利用するからだったと思います。
自分で作っといてあれですが目の前の事で手一杯で。

>>178
十分です、
本当にすいません。
0181nobodyさん2007/04/03(火) 22:40:23ID:???
>>178
ログを全部読み込むのかよ…。と思った俺は貧乏人なのかもしれない。
0182nobodyさん2007/04/03(火) 22:43:07ID:/5XcJrtX
RSSのデータをPEARのXML/Unserializerで取り出して
必要な部分をeucのページに表示させたいと思っています
echo mb_convert_encoding($str_utf8, "EUC-JP", "UTF-8");
としてみたのですが、丸数字(@A…)が半角の“?”になってしまいます
ご教示いただけませんでしょうか
0183nobodyさん2007/04/03(火) 22:45:11ID:???
>>162
ありがとうございます
0184nobodyさん2007/04/03(火) 22:46:11ID:???
>>182
php.ini文字コード設定関連をチェック
0185nobodyさん2007/04/03(火) 22:50:35ID:???
>>182
eucJP-win
01861722007/04/03(火) 22:52:04ID:????2BP(396)
http://www.pachiweb.com/card-walin/card-walin.php
http://www.pachiweb.com/updir/data/card.jpg
データベース機能とゲストブック機能を合わせた
phpを作りたいと思い先程書き込ませていただきました。
ログに番号ふっているのはログを出力する際、
フォームのラジオボタンのvalueに代入して
削除に利用するためです。

現在、書き込みの際に情報かコメントか分けて保存し
最新の情報書き込み5行、
コメント書き込み5行を表示するところまでは
完成しました。
01871822007/04/03(火) 23:11:04ID:???
>>184
検索などをしてみてはいたのですが、php.iniの文字コード設定を、
というのが多くていろいろ試行錯誤してみてはいるのですが・・・
再度見直してみたいと思います

>>185
mb_convert_encodingの引数ですよね?今検索して初めて知りました
こちらも試してみたいと思います

おふた方どうもありがとうございました
0188nobodyさん2007/04/03(火) 23:14:20ID:???
>>182

ファイルの文字コードを元からutfで作っとけば悩まずにすむ
0189nobodyさん2007/04/03(火) 23:19:03ID:???
>>186
1. A君がフォームを表示。
2. B君がフォームを表示。
3. A君が番号2のログを削除。
4. B君が番号3のログを削除。
5. (ノ∀`) アチャー
01901722007/04/03(火) 23:24:05ID:????2BP(396)
>>189
現在のプログラム自体アウトですかね?
一応、
現在作成中のものはバリューに入れる番号をコメントは1,2
情報はa1,a2になるようにしようと思うのですが。
そういう問題ではなくて?
01911822007/04/03(火) 23:39:28ID:???
>>188
ほんと、おっしゃる通りだと思います・・・

>>190
横からなんなんですが、削除が起こってもそこを埋めない(書き込み)通番を
持っておくべきだと思います
表示上番号が飛ぶのが気持ち悪いのでしたら行番号を表示されればいいのでは
ないでしょうか
01921722007/04/03(火) 23:43:42ID:????2BP(396)
>>191
おっしゃるとおりですね、
行番号をvalueに挿入するようにします。
これがかなりネックになってましたので。
01931552007/04/04(水) 00:03:54ID:jkYA50BD
>>157
そんなつもりはなかったんだ。
「ちなみに」っていうのはまずかったね。
すまん。

ところで>>155のレスでもまたASCIIコード見間違えてて微妙に間違ってたOTZ
いないとは思うけど、ここ見てあれ使う人がいたら悪いので一応報告しとく

最初の文字が数字と記号と制御文字以外の文字列にマッチする正規表現は
'^[^\W0-90-9].*$'
こんな感じでどう?

なんか微妙に板違いだけど・・・
0194nobodyさん2007/04/04(水) 00:11:38ID:???
>>192
おまえは勘違いしている。行番号はソースにふくめるな。
エディタで行番号表示させて確認するだけにしろ
0195nobodyさん2007/04/04(水) 00:14:16ID:???
いや表示のときに連番にすりゃいいだけの話だろ
01961722007/04/04(水) 00:25:17ID:????2BP(396)
>>194
count($file)で行数カウント後の番号を利用しちゃ駄目という事ですかね?
01971722007/04/04(水) 00:27:27ID:????2BP(396)
>>195
ログを全て表示した時にも
ラジオボタン削除利用したいので
フォームへのvalue値の自動挿入はしときたいのですが
無謀ですかね。
0198nobodyさん2007/04/04(水) 00:30:35ID:???
削除されたら名前・内容を“あぼーん”に書き換える処理にしとけば解決。
0199nobodyさん2007/04/04(水) 00:35:05ID:???
>>197
番号抜けアリのラジオボタンを並べりゃ「ラジオボタン削除が利用できる」けど
富豪的に>>178でやればいいよ。配列に何MB食わせるのか知らないけど。

削除用のラジオボタンとやらをログのナンバーと無関係に連番振って吐いてるのかな。
0200nobodyさん2007/04/04(水) 00:42:47ID:???
>>197
っつーか何がしたくて今何が問題なのかがよくわかんないんだけど.。
ログを全て表示した時にラジオボタン削除(って何なのか知らんけど)をするために
フォームへのvalue値の自動挿入(hiddenのことか?)することは
別に無謀でも何でもないからさっさと作ればいいと思うけど
0201nobodyさん2007/04/04(水) 01:01:03ID:???
行を削除したあとに連番に数をそろえないていいから。
そろえたものをログに書き込むのは必要ないし効率が悪いからやめたまえ。
ログを配列に読み込んで、その配列を連番でvalueに利用すればおまえのやりたいことはできる。
つべこべいわずだまってマニュアルみろ。

16歳、工業高。

0202nobodyさん2007/04/04(水) 01:02:13ID:???
つけわすれた。

氏ね
02031722007/04/04(水) 01:02:18ID:????2BP(396)
アドバイス頂いてありがとうございます、
countでカウントしたものを
ラジオ削除のナンバーに置き換えて処理するようにして
それで手におえないようなら
番号抜け削除を次候補という事で考えてみます。
本来ならあぼーんが掲示板の性質上いいのでしょうが
今回は比較的単純なスクリプトで後に大量設置する可能性があるもので
文字数省略できるところはしとこうかと。

>>199
削除用番号はログのナンバーを引用してます。

>>200
すいません、
html部分に先にvalue手打ちで書き込んどけということかと思ったもので
ログ利用では駄目なのかなと。
0204nobodyさん2007/04/04(水) 01:02:42ID:???
ってか、DBで行の入れ替えってできないんだな
02051722007/04/04(水) 01:03:29ID:????2BP(396)
>>202
わざわざありがとうございます。
0206nobodyさん2007/04/04(水) 01:03:41ID:???
は?
0207nobodyさん2007/04/04(水) 01:04:17ID:???
DBで行の入れ替えができないとでも?
0208nobodyさん2007/04/04(水) 01:08:09ID:???
いや行の入れ替えができるとかできないじゃなくて、
そもそも「行の順番」て何だ? DBでそんな概念あるか?
0209nobodyさん2007/04/04(水) 01:11:23ID:???
>>208
DBに格納した順番
0210nobodyさん2007/04/04(水) 01:12:03ID:???
ORDER BYとか指定しない限りINSERTした順に表示されるとかそんな保証はないでしょ
0211nobodyさん2007/04/04(水) 01:23:36ID:???
連想配列のキーと値を入れ替える関数あるじゃん?
1年ぐらい前にその関数使ってゴニョゴニョしたら5〜6分かかってたバッチ
処理が2秒で終わったことがあった。






ちゃんとテストして処理に抜けとか問題は無かったけどあまりにも早すぎて
怖くなってから元に戻しておいた。
0212nobodyさん2007/04/04(水) 01:27:53ID:???
テストの結果は正しくても、書いたロジックに自信のないvoodooプログラミングなのであればそれが正解かも
0213nobodyさん2007/04/04(水) 01:28:15ID:????2BP(396)
まだ勉強し始めたばかりですが
そんなプログラムの組み立てによって差が出るんですね。
あっても2,3秒のものだと思ってました。
0214nobodyさん2007/04/04(水) 01:36:18ID:???
>>172
ツッコまれてる理由は理解したの?
効率とか関係ないから。

> ナンバー 名前 内容 日付 パスワード
「ナンバー」とやらをキーにしてログを削除したいんだろ?
「ナンバー2のログを削除」みたいな感じで。
その「ナンバー」が削除処理の度にコロコロ変わったらマズいのは分かるよな?

分かってるならあとは好きに書けばいい。
0215nobodyさん2007/04/04(水) 01:47:37ID:???
>>212
いやマジであれはやばいって絶対何かの呪いだもん


「なんか」で変換すると「男か」ってでるな
0216nobodyさん2007/04/04(水) 01:48:18ID:????2BP(396)
>>214
ナンバーは消して現在こういう感じで処理してます。
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']){
0217nobodyさん2007/04/04(水) 01:54:35ID:???
>>215
その5分が2秒に劇的改善した処理ってどんなのなの?
0218nobodyさん2007/04/04(水) 02:24:38ID:???
>>216
あなたがページを表示したとする。
あなたはname="delradio" value="5"のカキコを削除したいと思った。(削除ボタンはまだ押していない。)
と、ここで他の誰かが割り込んで、name="delradio" value="4"のカキコを削除した。(削除ボタンを押した。サーバ側で削除処理も完了した。)
あなたは削除ボタンを押した。

あなたは目的のカキコを削除できる?
たまたまじゃなくて必ず削除できる?
0219nobodyさん2007/04/04(水) 02:29:03ID:???
>>209
格納した順というか、リソート機能ならPHPMyAdminで一発で出来るし
自前でやるとしても簡単なコードで出来るでしょう。
オートインクリメントしてるなら、それでソートすればいいんじゃね?
もっともこれはPHPMyAdminみたいな、基本ORDER BY付けないGUIで見るときに見やすいとかだけで
普通にDBから検索する場合、大抵はORDER BYつけるしリソートすること自体あんまり意味無いと思うが。
0220nobodyさん2007/04/04(水) 02:59:00ID:????2BP(396)
>>218
ファイルロックをしないといけないということですよね。
後程完成品をアプしますのでまたお気づきになった点を
ご指摘いただければありがたいです。
■ このスレッドは過去ログ倉庫に格納されています