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

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

■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん2007/09/09(日) 12:42:57ID:64tYOx8R
まず読め→【PHP マニュアル】http://www.php.net/manual/ja/
PHPで最良の教本はこの公式マニュアル。市販の書籍は嘘が多いので鵜呑みにしない。
過去スレ、関連スレ、FAQなどは>>2-10辺り

◆前スレ
【PHP】下らねぇ質問はここに書き込みやがれ 53
http://pc11.2ch.net/test/read.cgi/php/1188047468/

◆質問する時の注意
・ 自分のIDを表示させること。(メール欄に何も記述しないこと。空白も入力しちゃダメ)
・ サーバーのOS(Linux、Windows他)、WebサーバーとPHPの種類やバージョン等を明記すること。
・ 己の行った操作、変更などを詳しく明記すること。
・ エラーメッセージはそのまま表記すること。「エラーが出ます」だけでは回答不可。
・ 質問者として、態度をわきまえること。
・ 事前に公式マニュアル、リファレンス本くらいはちゃんと目を通しておくこと。

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

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

【その他諸注意】
・正規表現・PEAR・テンプレート(Smarty等)・フレームワークは各該当スレへ
・SQLについての質問はデータベース板(PCカテゴリ)の各スレで
0249nobodyさん2007/09/14(金) 01:38:38ID:???
つかmb_substrでいいじゃん。mb_substrがバイト数測るものとは知らなかったけど。
0250nobodyさん2007/09/14(金) 01:56:33ID:rv5QGrrD
>>248
すいません、どうかソースでお願いします。
>>249
文字列を返すものでした。無知です。
0251nobodyさん2007/09/14(金) 02:36:09ID:07nleTLs
すいません、初心者です。お教えいただきたいんですけど、
&&をつかうと"Parse error: syntax error, unexpected T_STRING "
がでてしまいます。
if(($a) == "XX" && ($c) == "XX"){
でなにかおかしいところってありますか?
0252nobodyさん2007/09/14(金) 03:03:06ID:???
>>250
あとは置き換えてやるだけじゃね?
0253nobodyさん2007/09/14(金) 03:11:47ID:???
>>251
($a)($c) のカッコが邪魔
0254nobodyさん2007/09/14(金) 03:26:09ID:n3vYsmYw
OS:Windows
DB:SQL Server or Oracle
Webサーバ:Apache

次のような処理を現在ではPHP(+APC)を使っておこなっています。
これよりも、もっと高速に処理したい場合、どんな手段があるでしょうか?
(例えば、Cで作ったCGIとか、Apacheモジュール使うとか)
また、どの程度(1割くらい、とか倍以上、とかレベルでOK)早くなるでしょうか。

ちなみに、Webサーバを分散させる、マシンのスペックを上げる、そもそもHTTP使うな、
では、ちょっと無理な事情があるので、これ以外でお願いします。

やりたいこと
クライアント(ブラウザではない)からPOSTされてきたデータを元に以下の処理をします。
1.SQL文のWhere句にくっつけて実行、結果の値をクライアントに返す
2.パラメータの値により異なるファイルをダウンロードさせる
3.ファイルがアップロードされてきたときは特定のフォルダに保存
※1〜3はURLによって処理内容を分けています。

これらを1時間に20万リクエストくらいをさくさくこなしたい。
ちなみにサーバはCPU:3GHz、メモリ2〜3GBな感じを考えてます。

よろしくお願いします。
0255nobodyさん2007/09/14(金) 06:54:59ID:???
>>254
Cで専用のApacheモジュールを作るのが1番早いけど
ボトルネックはファイルのアップダウンでプログラムの処理する部分はたいしたことないから全然変わらないと思う
0256nobodyさん2007/09/14(金) 08:34:24ID:???
>>254
20万リクエストなんてそんなこそらじゃ出せないだろ。
会社の宿題かな?
0257nobodyさん2007/09/14(金) 08:36:46ID:???
アップローダでも作るんだろ
Javaで作ったほうがいいと思うが・・・
0258nobodyさん2007/09/14(金) 09:02:48ID:rtA26Ijr
>>254
20万アクセスに耐えるプログラムは組めたとしても
サーバー構成が1台でWEB+DBの設計だと持たないと思われるので
むりじゃね?
0259nobodyさん2007/09/14(金) 09:05:19ID:???
>>254
処理内容を見る限りプログラム側の処理なんて微々たるもので
ほとんどはWebサーバーのパワーと帯域次第って感じに見えるから
PHPでもmod_perlでもJavaでもそんな変わんないんじゃないかな。
(CGIだとCで作ったって何で作ったって確実に今より遅くなると思う。
あとApacheモジュールって…PHPは最初からApacheモジュールなんだが)

ちなみにこれ、
1.Whereに付加する条件って何項目くらいあるの?十分に最適化されてるの?
2.ダウンロード・アップロードするファイルの平均サイズは?
3.ダウンロード・アップロードのリクエスト頻度は?
が気になるけど、処理速度を改善するとしたらダウンロード用か
アップロード用にWebサーバーと回線を分離してやるのがまず第一だと思うけどね。
聞いてる限りじゃボトルネックになりそうなのはここしか見当たらないから
それ以外に改善の余地なんてほとんどない気がする。

まずボトルネックになってるのはどこかちゃんと分析してやりなよ。
少ない資源でチューンしようって言うならそんな漠然とした話じゃ無理。
0260nobodyさん2007/09/14(金) 09:27:38ID:???
test
0261nobodyさん2007/09/14(金) 09:31:26ID:???
>>247
こんなんでどうだろ。
$a = "きしkydpxckdyyrxはにr6ksれなつにxsrrkyちてとyrkきくなにき";
$b = $a;
do {
$a = $b;
$b = mb_ereg_replace('^([^\n]{4})([^\n])', "\\1\n\\2", $a, "m");
} while($a != $b);
var_dump($b);

結果:
string(67) "きしky
dpxc
kdyy
rxはに
r6ks
れなつに
xsrr
kyちて
とyrk
きくなに
き"
0262nobodyさん2007/09/14(金) 09:32:18ID:ri4+Axdv
mb_strlenって文字の長さを取得する関数ですよね?
<?

$text = "あいうえお";

echo mb_strlen($text);

?>
での出力が「8」になるのですがなぜでしょう?
ちなみに、文字コードはUTF-8です。
Shift_JISに直すと「5」と、正常に表示されます。
0263nobodyさん2007/09/14(金) 10:00:05ID:???
>>262
mb_strlen("あいうえお","UTF8");
0264nobodyさん2007/09/14(金) 10:01:15ID:ri4+Axdv
>>263
有難うございます
文字コードを指定して使えるんですね。
完全に見逃していました。
0265nobodyさん2007/09/14(金) 10:08:58ID:???
>>262
>>264
つか、mbstring.internal_encodingの設定はどーなってんのよ。
0266nobodyさん2007/09/14(金) 10:12:11ID:ri4+Axdv
すんません、Shift_JISなってました
0267nobodyさん2007/09/14(金) 13:16:52ID:ri4+Axdv
include専用のPHPを作ったときって
パーミッション何にするのがいいのでしょうか?
0700?
0268nobodyさん2007/09/14(金) 13:22:09ID:???
>>267
パーミッションは特に気にせずDOCUMENT_ROOTの範囲外に置くのがいいと思う。
0269nobodyさん2007/09/14(金) 13:23:29ID:ri4+Axdv
>>268
サンクス
その方法頂きます
0270nobodyさん2007/09/14(金) 13:30:44ID:ri4+Axdv
と思ったらレンサバだから置けなかったorz
0271nobodyさん2007/09/14(金) 13:34:58ID:???
レン鯖でも置けるでしょ。今どきpublic_html内のみなんて鯖あるの?
0272nobodyさん2007/09/14(金) 13:38:12ID:ri4+Axdv
無料鯖ならめちゃくちゃあるね・・・
0273nobodyさん2007/09/14(金) 14:19:16ID:???
それじゃしょうがないな。
600か606にするしかないんじゃないかな。
600にしようと思ったらApacheの実行ユーザで
アップロードしないといかんと思うけど。
0274nobodyさん2007/09/14(金) 14:21:28ID:ri4+Axdv
>>273
そかー
どもです。
0275nobodyさん2007/09/14(金) 14:22:42ID:???
あ、606よりは604がいいのか。
0276nobodyさん2007/09/14(金) 14:47:02ID:???
あたしゃ拡張子を.cgiにしてパーミッションで実行させないように
してるよ。
0277nobodyさん2007/09/14(金) 16:45:35ID:sODpU595
EUC-JPなPostgres上に登録されてある'�@'という文字を含むデータを読み込んできて
EUC-JPなPHPで処理をしているのですが、IE7やFirefoxなどでは化けてしまいます。
JIS-X0213(でしたっけ?)のローマ数字なのだと思うのですが、
正しく扱えない文字なのでしょうか?それともPHPが何か変な変換でも
かましていたりするのでしょうか?

UTF-8を使うのが正解なのかな。
0278nobodyさん2007/09/14(金) 16:50:55ID:???
>>IE7やFirefoxなどでは化けてしまいます。

こういう事では?
0279nobodyさん2007/09/14(金) 18:29:39ID:???
>>277
UTF-8がいいと思うけど
EUC-JPにも種類があってはしごたかやローマ数字等の拡張文字部分に違いがある
Postgresは知らないけどたぶんeucJP-ms(eucJP-win)だと思う
一方IEやFirefoxのEUC-JPはコードページ51932というやつ
最新のPHPではCP51932が使えたと思うから変換すれば使えるかも
$str = mb_convert_encoding($str, "CP51932", "eucjp-win");
でもEUCからEUCへの変換ってあほっぽいよね
何のために文字コード統一したのかわからない
で1行目に戻る
0280nobodyさん2007/09/14(金) 18:46:54ID:sODpU595
まず mb_convert_encoding($str, "utf-8"); のように、
utf-8やsjis-winに変換すると '?' になります。

>>279 さんのを試してみると見事に変換に成功しました。
("utf8", "eucjp-win"); とか("sjis-win", "eucjp-win");
でもうまくいけるようです。

EUCからEUCへ変換するのは確かに間抜けですけど、
まぁ仕方ないのかもしれません。
これがバッドノウハウって奴でしょうか。
0281nobodyさん2007/09/14(金) 18:50:25ID:???
>>274
htaccessが置けるなら、includeされるファイルを置くディレクトリを用意して、直アクセスは弾けば良い
0282nobodyさん2007/09/14(金) 19:23:17ID:sODpU595
>>280 追記
Javaで書かれたコードでは正しく処理されていたので、
Javaはeucjp-winと同じ方法でutf-8と変換していたという事でしょうか。
0283nobodyさん2007/09/14(金) 21:37:58ID:PTuC71hk
前回訪れた訪問日時を表示するように作りたいのですが、何かヒントを下さい・・・
0284nobodyさん2007/09/14(金) 21:41:13ID:???
1.日時を記録する
2.次に訪れたら保存した日時を取り出す+記録する
3.表示する
0285nobodyさん2007/09/14(金) 21:45:51ID:???
>>283
COOKIE
0286nobodyさん2007/09/14(金) 21:46:58ID:???
携帯端末は?
0287nobodyさん2007/09/14(金) 21:50:15ID:???
>>286
機器固有番号
0288nobodyさん2007/09/14(金) 22:09:16ID:PTuC71hk
>>284-285
挑戦してきます。レス有難うございました。
0289nobodyさん2007/09/14(金) 22:53:02ID:???
>>287 意味ねぇじゃん
0290nobodyさん2007/09/14(金) 23:11:59ID:???
前回訪れた訪問日時なんて、
ログイン認証するようなサイトならともかく、
一般的な個人サイトならやめときな。
仕組み知らない訪問者は不気味がってアクセス数減るよ。
0291nobodyさん2007/09/15(土) 02:17:30ID:???
仕組み知ってれば尚更行かないけどな
0292nobodyさん2007/09/15(土) 04:39:32ID:V+kYhkB1
すいません。質問です。
10〜60の時はそのままで、0〜9の時は先頭に0をつけてて00や05にするには
何かいい方法ないでしょうか?
今は、if($a<10){ などとしてるのですが。
0293nobodyさん2007/09/15(土) 04:43:39ID:???
sprintf("%02d",$a);
0294nobodyさん2007/09/15(土) 04:59:01ID:???
>>293
うわ!すごい!ありがとうございます!
いままでifで数行使ってたのが1行で終わりました!
感謝です!
0295nobodyさん2007/09/15(土) 05:59:12ID:???
wwwwwwwwwwwwwwwww
0296nobodyさん2007/09/15(土) 07:51:26ID:rDYCANkK
おーーーーーーーーーーーーーーーーーーーーー
0297nobodyさん2007/09/15(土) 10:58:43ID:???
mbではじまる関数が多いけどこれはなにか意味があるのでしょうか?
0298nobodyさん2007/09/15(土) 11:01:39ID:???
っぱい
0299nobodyさん2007/09/15(土) 11:52:54ID:FRg1UB2S
>>297
マルチバイト関数
0300nobodyさん2007/09/15(土) 12:26:59ID:V+kYhkB1
phpでブラウザーがjavascriptが有効か無効かを調べるのはどうすればいいのでしょうか
0301nobodyさん2007/09/15(土) 13:56:23ID:rxB3R/I3
これって何するスクリプトですか?
危険な香りがするのですあが・・・

ttp://usuarios.arnet.com.ar/larry123/safe.txt
0302nobodyさん2007/09/15(土) 15:25:45ID:???
サーバの情報色々表示するスクリプトだろ
フリーの領域が何バイトあるかとか
別に危険な香りはしない
0303nobodyさん2007/09/15(土) 16:02:42ID:CbXLFV8Y
PHPでは関数オブジェクトって作れないのかね?
$func = new Hoge();
$func('gorua');
こんなふうにやりたいのよ。
0304nobodyさん2007/09/15(土) 16:56:17ID:???
ん?何のために?
03053032007/09/15(土) 17:08:47ID:CbXLFV8Y
いや、特別な理由ではないんですけどね。
オブジェクトの主要目的は関数オブジェクトにしたいなーと。
$factory = new MyFactory();
$obj = $factory->produce('foo');
よりは
$obj = $factory('foobar');
がイイナー。
まぁ、どっちでもいいんですが。
単にできないものかなと。
0306nobodyさん2007/09/15(土) 17:15:52ID:???
正規表現で

$test = GetwordIntag("<title>ほげほげ</title><b>あああ</b><title>いいい</title>");
print_r($test);

function Hoge($str) {
preg_match("/<title>([^<]+)<\/title>/",$str,$match);
return $match;
}

と、このようにして、titleタグで囲まれた文字を配列で全て返すようにしたのですが、結果は
Array
(
[0] => <title>ほげほげ</title>
[1] => ほげほげ
)
となってしまいました。
どなたか、全て返す方法をご存知ではないでしょうか?
0307nobodyさん2007/09/15(土) 17:16:34ID:???
>>306
$test = GetwordIntag("<title>ほげほげ</title><b>あああ</b><title>いいい</title>");
↓
$test = Hoge("<title>ほげほげ</title><b>あああ</b><title>いいい</title>");
です。すみません。
0308nobodyさん2007/09/15(土) 17:23:16ID:???
>>306
ループさせてください
0309nobodyさん2007/09/15(土) 17:27:58ID:???
>>306
preg_match_all はどうですか?
http://jp2.php.net/manual/ja/function.preg-match-all.php
0310nobodyさん2007/09/15(土) 17:29:10ID:???
>>308
>>309
ありがとうございます。
preg_match_allにすることで解決しました。
0311nobodyさん2007/09/15(土) 19:14:03ID:???
PHP + MySQL でスケジュール表を作成中で、
縦に名前、横に日付、で○×という感じのUI (↓が例)にしたいのですが、

     1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 〜 31
名前1
名前2

名前ごとにSQLでforeachをさせるとHTML的にも簡単ですが、SQL回数が人数×日付になり
人数が増えた場合に速度や負荷が心配です。
(まあ気にするほどではないかもしれないが、設計的に間違ったスクリプトは嫌です)

日付でSQLをすると、該当月の末日数のSQLでDB鯖にはやさしいが
まず配列などに結果を入れて、後で表示HTML用にforeachする感じになり複雑です。

時と場合によると思いますが、皆さんは根本的にはどちらが好みでしょうか?
0312nobodyさん2007/09/15(土) 19:22:40ID:???
>>311
日ごとに○と×なら整数型のビットフィールドにするとか。
1回のクエリーで1月分をまとめて取れるYo。
DBのテーブル設計を見直した方がよくないかい。
0313nobodyさん2007/09/15(土) 19:41:30ID:???
test.txtの内容↓
ああああああ
いいいいいい

というのを、phpで

<p>ああああああ</p>
<p>いいいいいい</p>

と<p>タグで囲って出力したいのですが、方法が見つかりません
どのようにすれば良いのでしょうか?お願いします
0314nobodyさん2007/09/15(土) 19:50:25ID:???
>>313
foreach (file('text.txt') as $line) { echo "<p>{$line}</p>\n"; }
こうか?
03153112007/09/15(土) 19:53:28ID:ITnns1Uw
>>312
1回!? マジですか

DBの設計まで行くと板違いになるので、情報小出しのようになってしまいましたが、
月の表示は>>311で、各○の部分はリンクで、押すと該当日のスケジュール(グラフ表示など)
という風にする予定です。 それでDBは日が中心のテーブルになってました。
(id, date, user_no, start_time, end_time, note こんな感じ)

DBのほうで月の表示用テーブルを増やし、各利用者が日のスケジュール登録時に
そっちのテーブルにも記録するような設計にする というのがイイのですかね?
いつもDB設計は変えず、表示のPHP側で色々複雑にしてた場合が多いので参考になります。

ただ、1回のクエリーでまとめて取る方法が分からないです。
もし宜しければ、簡単な表の例でいいのでSQLや処理を御教示お願い致します。
03163122007/09/15(土) 20:12:00ID:???
>>315
スケジュール表が、日ごとの有無と見えたので、
それなら1回のクエリで十分に見えました。
32ビットの整数なら1月分まとめて取り出せるなーと。

あと、1回のクエリで済ますなら配列を使う必要がありますね。

SQLは昔に少しかじった程度なのですぐに例をあげるのは無理です。
なんか偉そうなこといってスマンかった。orz
0317nobodyさん2007/09/15(土) 20:23:33ID:rDYCANkK
>>314
それ行単位で囲むだけじゃん。

答えは>>318がきっと書いてくれるはず。
0318nobodyさん2007/09/15(土) 20:25:18ID:???
断るw
03193172007/09/15(土) 20:26:26ID:rDYCANkK
ごめんなさい。
>>314で正解だ。
0320nobodyさん2007/09/15(土) 20:51:54ID:???
>>314
ありがとうございます。ちょっと頭が固かったみたいです…

何度も質問すみません
今、Wikiもどきを作成しているのですが、
[http://nantoka.com:title=なんとか]
を
<a href="http://nantoka.com";>なんとか</a>
のように出力することは可能でしょうか?
また、その方法があればご教授ください。。。
0321nobodyさん2007/09/15(土) 21:00:43ID:???
>>320
preg_replace
0322nobodyさん2007/09/15(土) 21:06:45ID:jy5G5jnH
phpの某コミュニティーでcookieのことを焼き菓子と読んでいたので、
それがずっと普通だと思っていて、金曜日の会社の設計会議で焼き菓子と何回か
発言したら、参加していた人から総スカンを食らった上に、
先輩に呼び出して、大目玉を食らいました。
ここの人は、cookieのことを焼き菓子って言ったりしますか?
0323nobodyさん2007/09/15(土) 21:15:44ID:???
いわねえよwwwwww
ひさしぶりに吹いた
0324nobodyさん2007/09/15(土) 21:17:09ID:???
>>321
$pattern = '/\[(.*):title=(.*)\]/';
$replace = '<a href="\1">\2</a>';
$str = '[http://hogehoge.com:title=ほげほげ]';
print preg_replace($pattern, $replace, $str);
でできました!
ありがとうございます!
0325nobodyさん2007/09/15(土) 21:18:23ID:???
2ちゃん語をリアルで使うアフォと同じ。
0326nobodyさん2007/09/15(土) 21:21:10ID:???
>>322
初耳だな
クッキーといっても食べれませんよ
程度なら耳にするが。そんな変なコミュあるのか?
0327nobodyさん2007/09/15(土) 21:24:08ID:???
食べ残しに注意
0328nobodyさん2007/09/15(土) 22:17:50ID:???
むぉたぶぇらるぇないよぉ・・もぐもぐ
0329nobodyさん2007/09/15(土) 22:50:03ID:???
>>326
ビジネスの場で「ら」抜き表現は馬鹿っぽいからやめたほうが良いよ。
食べられませんって言ったほうがいい。
細かいけど。
0330nobodyさん2007/09/15(土) 22:52:32ID:???
オマエはATOKか
0331nobodyさん2007/09/15(土) 23:12:15ID:???
どっちかというと、Cookie発行をクッキーを焼く、取得を食べると表現するのを見かける。
0332nobodyさん2007/09/15(土) 23:17:20ID:Xmsi68ZJ
ページ間移動してもプルダウンメニューの選択項目を保持し続けたいのですが、
項目選択後、送信ボタンを押して次ページに遷移し、
「戻る」のリンクをクリックして元のページに戻ると
常に一番上の選択項目が選択された状態となってしまいます。
下記の記述のどの辺りに問題があるかアドバイスいただけると嬉しいです。

mail.php
<?php
if($_POST['submit']){
header("Location: confirm.php");
exit();
}
require("./smarty/Smarty.class.php");
$smarty = new Smarty;
$smarty->template_dir = './smarty/templates';
$smarty->compile_dir = './smarty/templates_c';
$smarty->cache_dir = './smarty/cache';
$smarty->config_dir = './smarty/configs';
$smarty ->display("mail.html");
?>
0333nobodyさん2007/09/15(土) 23:18:18ID:NcWcmSvF
2ch型掲示板をPHPで作っているのですが
「ttp://pc11.2ch.net/test/read.cgi/php/1189309377/」
のように拡張子を消してもPHPを実行させたいのですが、仕組みが分からず困っています・・・
ヒントだけでも構わないのでお願いします。
0334nobodyさん2007/09/15(土) 23:18:41ID:Xmsi68ZJ
>>332の続きです

confirm.php
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>Untitled Document</title>
</head>
<body>
<a href="mail.php">戻る</a>
</body>
</html>


mail.html
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>Untitled Document</title>
</head>
<body>
<form action="mail.php" method="post">
<select name="test">
<option value="あ">あ</option>
<option value="い">い</option>
<option value="う">う</option>
</select>
<br>
<input type="submit" name="submit" value="送信する">
</form>
</body>
</html>
0335nobodyさん2007/09/15(土) 23:24:53ID:???
>>333
$_SERVER
>>334
Session
0336nobodyさん2007/09/15(土) 23:38:19ID:Xmsi68ZJ
>>335
レスどうもです。
Sessionを使う事も試してみたのですが、プルダウンメニューの場合どう記述すればよいか分かりませんでした。

例えばtextareaだと

<textarea>ここに表示したい内容を書いておく</textarea>

でページ移動しても記述内容を保存できるのは確認できたのですが。
0337nobodyさん2007/09/15(土) 23:50:07ID:???
>>334
PHPというよりhtmlの問題じゃないの?selected属性ってなかったか?
0338nobodyさん2007/09/15(土) 23:54:07ID:Xmsi68ZJ
>>337
selected属性も試したのですが、常にselectedを指定したものが表示されてしまうようになりました
(例:「あ」にselectedをつけた所、「う」を選択して送信ボタンを押し、戻るリンクで前画面に戻っても
毎回selectedが効いてしまっているようで、「あ」が選択された状態になってしまいました)。
0339nobodyさん2007/09/15(土) 23:58:12ID:???
>>337
「う」を選択したという情報は$_SESSIONに保存してあるんだよね?
$_SESSIONの情報を元にselected属性を付けないとあかんですよ。
0340nobodyさん2007/09/15(土) 23:59:43ID:???
そりゃ当たり前じゃん・・・

・selectedを付けると選択される
・ある要素を選択させたい
⇒
・ある要素のところにselectedを付ければいい
0341nobodyさん2007/09/16(日) 00:01:28ID:???
「戻る」で入力項目を保持したい場合、通常はsubmitボタン使うけど、
ハイパーリンクにしたいのかな?
その場合はGETでmail.phpにパラメータを渡すか、JavascriptでPOSTに
してしまうか、セッション使うかになるかなあ。
submitボタンのが楽だと思うんだけど。
セッションは複数ブラウザ立ち上げたりするとアレなんで、フォームの
パラメータには使わないようにしてるなあ。

submitボタンを使う場合はhiddenでパラメータをformに埋め込み、
mail.phpにactionさせるだけ。
mail.phpには当然パラメータを受け取ってフォームに流し込む
仕組みが必要だけど、Smartyにはそのための関数やらがいろいろある。
もちっと調べなされ。
select〜optionあたりはべた書きじゃなく、↓みたいなのを使う。
http://smarty.php.net/manual/ja/language.function.html.options.php

個人的にはWebで基本かつ必須のformでの値の受け渡し方を理解していない
気がするので、まずはSmartyとか使わずにやってみた方がいいとおもう。
フレームワークやテンプレートエンジンは作業の効率化のためのものなので、
基本がなっていないと混乱すると思う。
0342nobodyさん2007/09/16(日) 00:06:42ID:84mMghay
>>333
「ttp://pc11.2ch.net/test/read.cgi/php/1189309377/」 は拡張子が消えていませんよ。
「.cgi」 という拡張子が現れています。
0343nobodyさん2007/09/16(日) 00:07:13ID:???
>>341
>セッションは複数ブラウザ立ち上げたりするとアレなんで、フォームの
すいません、アレってどういうこと?
0344nobodyさん2007/09/16(日) 00:16:53ID:ZprS1LjJ
>>339>>340
ご指摘ありがとうございます。
>>332のソースでは省いてますが、一応$_SESSIONに保存しているつもりです。
ただ、>>339>>340でご指摘されているとおり、$_SESSIONの情報を元にselectedをつけないといけないだろうなと言うのは想像が付くのですが、
記述の仕方が分かりませんでした。

>>341
ご指摘ありがとうございます。
submitボタンでは無くハイパーリンクにしたいです。
理由ですが、>>332は簡略化したものですが、実際には既存のソースを改造しています。
そしてご指摘の部分を触る権限があるか微妙なので。
どうしても無理ならsubmitボタンにする事も検討する必要があるとは思いますが。

後、ご指摘のとおりformでの値の受け渡しとか良く分かってません。
どうしても触る必要があり触っているのですが、まずはテンプレートエンジン無しで出来るようにしてみたいと思います。
0345nobodyさん2007/09/16(日) 00:55:38ID:???
>>343
IEでCTRL+Nでブラウザも1個起動した場合、同じセッションが使用され、
サーバからは区別できなくなる。
IE以外のブラウザでも同様の現象が起きたりする。

んで、ブラウザAでページAを開いてて、ブラウザBを起動。
そちらでページBを閲覧し、ページAでsubmitする。
もしページAとページBで$_SESSIONに同じ変数を格納して
いた場合、ページAで入力した値がページBのもので上書きされる。

PHPだけでなくWebプログラム全般で起こる問題。
CRSF用にワンタイムチケット発行するついでに、チケットと
関連付けて入力内容をセッションに保持させればいいのかな〜
とか回避策考えてるけど、めんどいので放置中。
有効な対策とか知ってたら教えてくださいませ。
0346nobodyさん2007/09/16(日) 01:13:14ID:???
>>344
退職者が管理してた社内システムの改修でもやることになったのかね。
PHPを勉強しつつ、ちょこちょこと機能追加や修正とか。

セッションにmail.phpでの入力値を全部格納してるなら、mail.htmlで
その値を取り出して動的に表示する仕組みを追加すればいいだけ。
confirm.phpの適当なところに
<?PHP print_r($_SESSION) ?>
って書けばセッションにちゃんと入ってるかどうかは分かるから確認。

Smartyはテンプレート(ここではmail.html)からセッションの値を
{$smarty.session.test}なんて記述で取得できる。
なんでさっきかいた{html_options}とか利用しつつ動的表示を行います。

でもま、他言語でのWebアプリ作成経験もない状態でアレモコレモは
却って習得に時間がかかると思う。
急がば回れで初心者向けPHPの本片手に基本からやった方がいいと思うよ。
フォームを利用したサンプルなんかは必ず載ってるし。
03473432007/09/16(日) 01:13:51ID:???
>>345
なるほど〜。
Webプログラムは専門じゃないのでこのような問題があるのは知りませんでした。
ありがとうございます。
0348age2007/09/16(日) 02:27:57ID:Ws+84egL
SPLのExceptionの説明ってどっかにないですかね?
どれをどう使えばいいかよく分からないんで

Do You PHP はてな - いつの間にかExceptionの種類が増えてた
ttp://d.hatena.ne.jp/shimooka/20070820/1187594874
■ このスレッドは過去ログ倉庫に格納されています