☆ショッピングカートのCGIを作りたい!Perlで☆ (517レス)
☆ショッピングカートのCGIを作りたい!Perlで☆ http://medaka.5ch.io/test/read.cgi/php/1010660032/
上
下
前
次
1-
新
通常表示
512バイト分割
レス栞
267: 無謀者 [sage] 02/02/02 20:06 ID:??? スイマセン、ちょっと仕事が立て込んでて・・・・ 尻取りスレにでも使っといてください http://medaka.5ch.io/test/read.cgi/php/1010660032/267
268: うぇw [] 02/02/03 01:02 ID:RmsIRY/L 援助交際な出会い http://www.kgy999.net/e.html 女子小学6年生レイプ画像 http://www.kgy999.net/imc/434233455231.jpg 女子小学6年生レイプ動画 http://www.kgy999.net/imc/94324.mpeg ertret r r et rt http://medaka.5ch.io/test/read.cgi/php/1010660032/268
269: 名無しさん@お腹いっぱい。 [sage] 02/02/03 13:52 ID:??? 良くココまで来た・・・。 http://medaka.5ch.io/test/read.cgi/php/1010660032/269
270: 傍観者 [sage:復帰おまちしてますぞ] 02/02/03 16:59 ID:??? ちと進行が遅くなってるのが残念だけど、無謀者氏とレベルが 近しいので、実用的な読み物としてヲチしてます …ま、目先の仕事優先は仕方なし…かな? http://medaka.5ch.io/test/read.cgi/php/1010660032/270
271: 名無しさん@お腹いっぱい。 [sage] 02/02/03 20:00 ID:??? >>267 あんたさ、折角なんとかマトナなスレになりつつあったのに、 尻取りスレにでも、は無いだろう。 一体どういう神経してるんだよ。 それじゃ、始めるぞ。 「パール」 http://medaka.5ch.io/test/read.cgi/php/1010660032/271
272: 名無しさん@お腹いっぱい。 [ ] 02/02/03 20:58 ID:??? >271 まったくだプンプン。 早く帰ってくるのみんな待ってるのに。 「ルビー」 http://medaka.5ch.io/test/read.cgi/php/1010660032/272
273: 名無しさん@お腹いっぱい。 [sage] 02/02/03 21:01 ID:??? おいおい、本当に>>1は呆れた奴だなー 「ビール」 http://medaka.5ch.io/test/read.cgi/php/1010660032/273
274: 名無しさん@お腹いっぱい。 [sage] 02/02/03 22:54 ID:??? 「ルビー」(´Д`;) http://medaka.5ch.io/test/read.cgi/php/1010660032/274
275: 名無しさん@お腹いっぱい。 [sage ] 02/02/03 23:07 ID:??? >274 しりとり侍かよ! フォッフォ 「ビール」 http://medaka.5ch.io/test/read.cgi/php/1010660032/275
276: 名無しさん@お腹いっぱい。 [sage] 02/02/04 08:31 ID:??? 仕事が忙しいのは仕方ないとして、 ttp://cgitest.s7.xrea.com/cart.txt これの再アップだけでもして欲しい・・・ http://medaka.5ch.io/test/read.cgi/php/1010660032/276
277: 名無しさん@お腹いっぱい。 [ ] 02/02/04 16:55 ID:??? なぁ、>>1よ 俺も君と同じようにPerl馬鹿だった。 でもさっきPHPの本を軽く読んでみた。 馬鹿にならんくらい簡単だぞ、これくらいできるようになった君ならあっという間に 完成できるかもしれない。 PHP4をお勧めするよ、マジで。 こんなにセッション管理が楽だとは思わなかったよ。 http://medaka.5ch.io/test/read.cgi/php/1010660032/277
278: 無謀者 [sage] 02/02/04 18:52 ID:??? >>276 お待たせしました。ウプ完了です。 最初のに送料計算用のスクリプトを加えようとしてるんですが、今のところ機能 してません。しばらくいじってなかったらすっかり忘れてるし(w >>271-275 ご協力ありがとうございます。てか、一瞬で終わってるな・・・・ >277 PHPは最初の方でも勧めてくれた方がいたような・・・・ とりあえず現状最もデファクトスタンダードに近いと思われるという事で Perlから始めて見ました。まぁ、こんなタラタラやってるうちにPHP全盛って事に なったりは・・・・しませんよね? というわけでまたボチボチ続きを始めますのでよろしくお願いします・・・(何をだ?) http://medaka.5ch.io/test/read.cgi/php/1010660032/278
279: 無謀者 [sage] 02/02/04 22:26 ID:??? 送料の自動計算と「〜円以上送料無料」のの機能を追加してみました。 未だに微妙に文字化けするのがチョイ鬱・・・・ 文字コードをフォームのHTMLも含めて見直してみます。 http://medaka.5ch.io/test/read.cgi/php/1010660032/279
280: 名無しさん@お腹いっぱい。 [age] 02/02/04 23:06 ID:??? ほう、ちゃんと計算できてんじゃん http://medaka.5ch.io/test/read.cgi/php/1010660032/280
281: 名無しさん@お腹いっぱい。 [sage] 02/02/04 23:44 ID:??? >>279 HTTPヘッダのところでも指定した方が良いよ http://medaka.5ch.io/test/read.cgi/php/1010660032/281
282: 名無しさん@お腹いっぱい。 [sage] 02/02/05 13:50 ID:??? >278 そうだね、現状ではサーバを製作者側で指定できない限りはPHPはまだ使えないね。 シカーシPHPも4になってほぼ機能的に出尽くした感があるし、ぼつぼつ標準設置の レン鯖増えてきたし、WebアプリののRADとして、Perlとはすみわけしながら普及 しそうな勢いがあるな。 ところで設置URIは、上記と同じ ttp://cgitest.s7.xrea.com/cgi-bin/shop4.htm でいいのかえ?最終確認画面で文字化けしちょるようだが http://medaka.5ch.io/test/read.cgi/php/1010660032/282
283: 名無しさん@お腹いっぱい。 [ ] 02/02/05 15:21 ID:??? なかなかのデザインだのう。 はよ完成して動くことを祈る。 http://medaka.5ch.io/test/read.cgi/php/1010660032/283
284: 名無しさん@お腹いっぱい。 [sage] 02/02/05 17:43 ID:??? Mac/iCab2.71で見ると、購入ボタンの次の画面でunknown Content-Type: が出よりますな。 http://medaka.5ch.io/test/read.cgi/php/1010660032/284
285: 無謀者 [age] 02/02/05 22:33 ID:??? CGI中のHTMLヘッダで文字コードを指定する場合って、たとえばeucにしたいのなら "content-type: text/html;charset=EUC-JP\n\n"; で良いんでしょうか?ここで言われたので、ぐぐるで検索掛けてみたら 上のような書き方がちらほらあったので。ただ「文字コード、charset」とかで検索すると ほとんどが<META>タグの記述方法になってるので、いまいちこれでいいのが自信が無い・・・ いまさらながら気が付いたんですが、どの本読んでもhtmlヘッダ に関しては "content-type: text/html\n\n" を書けとしか書いてないんですよね。散々文字コードの事は書いてあってjcode使って コンバートしろとかは書いてあるのに・・・・ http://medaka.5ch.io/test/read.cgi/php/1010660032/285
286: 無謀者 [sage] 02/02/05 22:34 ID:??? スイマセンsage忘れ・・ 間に合いませんでした。 http://medaka.5ch.io/test/read.cgi/php/1010660032/286
287: 名無しさん@お腹いっぱい。 [sage] 02/02/05 23:04 ID:??? >>285 あってる。 ただ、;のあとに半角スペース入れた方がいいのかな 意味あるのかは知らないけど、みんなやってるということで print "Content-type: text/html; charset=euc-jp\n\n"; でもmetaにも書いてくれると親切だ。 http://medaka.5ch.io/test/read.cgi/php/1010660032/287
288: 無謀者 [sage] 02/02/05 23:15 ID:??? ありがとうございます。ヘッダとMETA両方にしつこいくらいに書きます(w しかし、なんで入門書にこれが書いて無いんですかね? 文字コードの自動判定なんてまともに出来ないヴァカブラウザがゴロゴロしていて 純粋なHTMLはS-JISで書くのが一般的(?)なのに・・・ いくらフォームデータエンコードしても、CGI内のHTML表示部分で ちゃんと指定しとかなきゃ行ったり来たりしてる間にブラウザも迷うっちゅねん! と思うのですが・・・・ ところで、皆さんはCGI内のHTML部にMETAとか<HTML></HTML>書くときに 何処に書いたらいいかわからなくなる事無いですか? 一箇所で完結すれば良いんですがHTML出力を前半と後半をサブルーチンで 分けたり、使いまわしたりする時に、</html>は何処に入れるんだ? とかここは<html>はいるのか?みたいに http://medaka.5ch.io/test/read.cgi/php/1010660032/288
289: 名無しさん@お腹いっぱい。 [sage] 02/02/06 00:26 ID:??? >>288 そうだよ両方書くんでちゅ。 それが当たり前でちゅ。 ていうかここで2回も書いたんでちゅ。 ヘッダ出力とフッタ(は要らんかもしれんが)を サブルーチンとかモジュール化したら? CGI.pmでもヘッダ出力できるけど、 日本語の場合、文字コードの指定が必要だから ジブソで用意しました。 http://medaka.5ch.io/test/read.cgi/php/1010660032/289
290: 名無しさん@お腹いっぱい。 [sage] 02/02/06 00:33 ID:??? >>289 うろ覚えだけど、最近の CGI.pmなら 文字コードやContent-Typeとかも 指定できた気がする http://medaka.5ch.io/test/read.cgi/php/1010660032/290
291: sage [sage] 02/02/06 10:33 ID:??? えらいぞ!短期間でよくここまで! 後は289のいうとうりモジュール化することを進めるよ! あとでつかいまわしができるよ! http://medaka.5ch.io/test/read.cgi/php/1010660032/291
292: 名無しさん@お腹いっぱい。 [sage] 02/02/06 10:48 ID:??? CGI.pmでヘッダ出力できるよ。 #!/usr/bin/perl use CGI; $query = new CGI; print $query->header(-charset=>'Shift_JIS'); おいらは最初にヘッダを出力しちゃってそれぞれの出力終了時にフッダの サブルーチンに飛ばしてる。 http://medaka.5ch.io/test/read.cgi/php/1010660032/292
293: 無謀者 [sage] 02/02/06 16:55 ID:??? >>289 >ていうかここで2回も書いたんでちゅ。 そうでしたね。いや、読んではいたんですが、どうしても>>285の方法が はっきり自信持てなかったもんで・・・・ >CGI.pm その辺の事は今後順次勉強していきたいと思います。とりあえずはできるだけ 自分で書くというのも勉強になりますので・・・ >モジュール化 プログラム経験が無いのでモジュールと言うものの概念がいまいちワカランのですが 「良く使うものをサブルーチンにして、それを別ファイルに纏めておく」と言うことで 良いんでしょうか? >>291 ほんとにここでスレ立ててよかったです。本とかWEB情報だけじゃこの短期間ではとてもじゃ 無いけどここまで出来なかったと思います。 調子に乗って「ド素人のド素人のためのCGI入門」のHPでも立ち上げようかな・・とか思ったりしてます(w ここまでやってきて思ったのは「初心者用」とか「入門」といううたい文句の本やWEBの説明も 所詮(失礼ですが)プログラマーの方が書いてるので、「ド素人が如何に無知か」という事がいまいち 理解されて無いようなので・・・ http://medaka.5ch.io/test/read.cgi/php/1010660032/293
294: 名無しさん@お腹いっぱい。 [ ] 02/02/06 17:06 ID:??? >>292 print $query->end_html これで終れる http://medaka.5ch.io/test/read.cgi/php/1010660032/294
295: 259 [sage] 02/02/06 20:31 ID:??? >「良く使うものをサブルーチンにして、それを別ファイルに纏めておく」 >と言うことで良いんでしょうか? サブルーチンをファイルにしてメインからrequireするあたりがモジュール化の第一歩。 そこから名前空間の概念覚えて、別ファイルのほうpackage宣言してみて、って 少しづつ覚えていけばいいと思うよ。(その先がまだ長いんだけれど‥‥) いきなり.pmモジュールなんていうとワケわかんなくなるからね。 で、商品ページの方はどうよ? http://medaka.5ch.io/test/read.cgi/php/1010660032/295
296: 無謀者 [sage] 02/02/06 21:21 ID:??? >>295 なるほど、そんな単純なものではなさそうですね>モジュール >商品ページ いかんせん仕事の都合で間があいちゃったんで全然出来てません。設計書を作ってる 最中だったんですが、今読み返してみるとようワカラン(w もう一度1からやり直しです。最初はフォームからHTML生成しちゃおうと思ったんですが、 在庫数をカウントしたいので、cgiからdatファイルから読み出してHTML表示させるしか無さそう・・・ HTMLにHiddenで入れようとも思ったのですが、商品が減る度にHTML書き直させなきゃならなそうだし。 ただ、全てをCGIにやらせると鯖の負荷も高くなりますよね?どうしたものか・・・・ http://medaka.5ch.io/test/read.cgi/php/1010660032/296
297: 259 [sage] 02/02/07 15:02 ID:??? >296 open (READ,$filename); @data = <READ>; close (READ); #@dataに対して必要な処理 open (WRITE,">$filename"); print WRITE @data; close (WRITE); 式でやると、.datの件数が増えると負荷もかかるしメモリも喰う。 これは鯖屋さんに嫌われる。(警告が来たり、いきなり垢止められたりする) open (READ,$filename); open (WRITE,">$tempfile"); while($line = <READ>){ #$lineに対して必要な処理 print WRITE $line; }; close (WRITE); close (READ); rename ($tempfile, filename); 式でやるなら、1セッション中に(検索と在庫デクリメント程度であれば) 複数回処理かけても大した負荷(プロセス時間)にはならないし、メモリも 喰わない。この方式で数百〜1万件(行)程度の処理しつつHTMLを吐かせる CGIを一般の複数件のレン鯖に置いているけれど、苦情は来たことがないぞ。 この場合、.datはTABまたはSPACE区切りテキストがいいな。 一般配布のCGIにはカンマ区切りが多いけど、UNIX育ちのPerlのsplitは/\t/ や/\s+/に対し最適化されているから、行数が大きくなったときの処理時間の 差は結構馬鹿にならない。 カンマ区切りだと例外処理がウザい(書き込み時にデータにカンマがないか チェックするか、Excelなcsvにすべくクオート処理せねばならん。後者の場 合、単純にsplit出来なくなる)しね。 プチECとしてはデータ内に半角スペースも含まれるだろうから、TAB区切りが 一番いいだろう。 http://medaka.5ch.io/test/read.cgi/php/1010660032/297
298: 無謀者 [] 02/02/08 21:13 ID:VrHm3ZfY えーとパスワード認証してるCGIに直接アクセスするにはどうしたら? フォームが <input type="password" name="pass" size="10"> <input type="hidden" name="mode" value="login" > になっていて、 &ReadParse(*form); $pass=abc; $fpass=$form{'pass'}; if ($fpass eq $pass){ #−−−メニュ画面ーーーーー# } ってなってるんですが、後の(他の)処理の中でその処理終了後 メニューに飛ばしたいんです。hogehoge.cgiになんかくっつけて呼び出す(?pass=とか?) ような感じになるんじゃないか?というところまではたどり着いたんですが・・・・・ http://medaka.5ch.io/test/read.cgi/php/1010660032/298
299: 名無しさん@お腹いっぱい。 [sage] 02/02/09 09:04 ID:??? ハァ? メニューに飛ばす? なんか意味わかんねぇ http://medaka.5ch.io/test/read.cgi/php/1010660032/299
300: 無謀者 [sage] 02/02/09 11:30 ID:??? すいません。書き方悪かったですね・・・・流れとしては フォーム(HTML)からパスワード入力>menu画面(menu.cgi)>データ入力 >データ入力後refreshでもう一度menu画面に戻る。 てのをやりたいんですが、戻り先をmenu.cgiにするのにパスワード を渡す方法をがわからないんです。そもそもFORMのinputで渡すような項目を Formを使わずに渡す方法ってどんなのがあるんでしょう? http://medaka.5ch.io/test/read.cgi/php/1010660032/300
301: 名無しさん@お腹いっぱい。 [ ] 02/02/09 13:35 ID:??? >>300 方法としてアドレスに埋め込む(リフレッシュ先のアドレスに仕込む) hoge.com/menu.cgi?id=hoge&pass=hoge HIDDENを使う データ入力の度に <INPUT HIDDEN NAME=id VALUE=hoge><INPUT HIDDEN NAME=pass VALUE=hoge> これを必ず仕込んでおく なお、どちらの方法でもmenu画面で逐次パラメータを取得して次に渡す必要がある 的外れの返答かな? http://medaka.5ch.io/test/read.cgi/php/1010660032/301
302: 名無しさん@お腹いっぱい。 [ ] 02/02/09 13:36 ID:??? 自己訂正 当然ながらHIDDENを使うときはFORMタグを必要としますからね。 http://medaka.5ch.io/test/read.cgi/php/1010660032/302
303: 無謀者 [sage] 02/02/09 13:50 ID:??? ありがとうございます。その辺を知りたかったんです。 つまり、通常フォームから <input type="password" name="pass" size="10"> <input type="hidden" name="mode" value="login" > と言う内容をsubmitボタンを押すことにより送信するんですが、 その内容をフォームを使わずに渡す方法を知りたかったんです。 >>301の説明だと menu.cgi?mode=login?pass=123 とかで良いんですかね? でスクリプト中で$loginpass=123とか指定しておけば、cgi内から上記のように リンクかける場合は menu.cgi?mode=login?pass=$loginpass としておけば大丈夫って事ですよね? とりあえずやってみます。 http://medaka.5ch.io/test/read.cgi/php/1010660032/303
304: 名無しさん@お腹いっぱい。 [sage] 02/02/09 14:13 ID:??? パラメータは&で繋ぐ http://medaka.5ch.io/test/read.cgi/php/1010660032/304
305: 名無しさん@お腹いっぱい。 [] 02/02/09 14:14 ID:2AUefyPU >>303 そのとおり。 あと老婆心ながらHTMLのタグを書くときに""(クオーテーション)はいらない。 ""がいるのはスペースが含まれる場合のみ。 ""を省略するだけで結構処理スピードがあがるよ。 http://medaka.5ch.io/test/read.cgi/php/1010660032/305
306: 無謀者 [sage] 02/02/09 14:26 ID:??? ありがとうございました>教えてくださった皆様・ うまくいきました。 ちなみにこれと同じ方法を使ってFORM内の Submitボタンを画像とかに置き換える事は可能なんでしょうか? ボタンの変わりに画像貼ってそれのリンク先をmenu.cgi?neme=submit ってやるとsubmitボタンとして動作します? http://medaka.5ch.io/test/read.cgi/php/1010660032/306
307: 名無しさん@お腹いっぱい。 [sage] 02/02/09 14:58 ID:??? >>306 <input>タグでできる。 http://medaka.5ch.io/test/read.cgi/php/1010660032/307
308: 名無しさん@お腹いっぱい。 [sage] 02/02/09 18:56 ID:??? http://tohoho.wakusei.ne.jp/html/input.htm http://medaka.5ch.io/test/read.cgi/php/1010660032/308
309: 無謀者 [sage] 02/02/09 19:23 ID:??? 皆様いつもありがとうございます。 商品ページ作成部分が若干出来たのでウプしました。 ttp://cgitest.s7.xrea.com/cgi-bin/admin.htm から入れます。パスワードは「123」です。 今のところ、商品カテゴリーの作成と商品の追加しか動きません。 カテゴリーを追加した後に商品を追加する事になります。既存のカテゴリーは 「商品群1」と「商品群2」です。 商品群1の内容は ttp://cgitest.s7.xrea.com/cgi-bin/main.cgi?mode=show&fname=test で 商品群2の内容は ttp://cgitest.s7.xrea.com/cgi-bin/main.cgi?mode=show&fname=test2 で見られます。 カテゴリーを新規作成の際のファイル名は拡張子無しで。新しく作ったカテゴリーの 内容を見るときは ttp://cgitest.s7.xrea.com/cgi-bin/main.cgi?mode=show&fname=”作成時につけたファイル名” できるはずです。 http://medaka.5ch.io/test/read.cgi/php/1010660032/309
310: 無謀者 [sage] 02/02/09 20:31 ID:??? あ、今現在新規商品作成時に指定したオプション項目は反映されません。 「,」で区切って入力してもらって、そこからセレクトボックス生成させる のを今作ってます。 http://medaka.5ch.io/test/read.cgi/php/1010660032/310
311: 名無しさん@お腹いっぱい。 [sage] 02/02/10 16:31 ID:??? うーん、せっかく上手くいっているところに水を差すようだが、 URIでパスワード指定やっちゃうと、認証もクソもないぜ。 URIがバレた時点でソッコーで改ざんされっぞ。 googleツールバーの高機能版では閲覧中のURI自動通知されちまうしな。 「登録しました」のページに「メニューに戻る」ボタンをつけて、 hidden渡しじゃだめなんかい? どうしてもrefreshでやりたいなら、refererとってCGIと認証ページからの アクセスのみ許可するとかやってやんねーと。 http://medaka.5ch.io/test/read.cgi/php/1010660032/311
312: 無謀者 [sage] 02/02/10 20:00 ID:??? >>311 確かにそれは思ったんですけど、一応pass入れたあとの管理者用画面だから 大丈夫かな・・・と考えてたんですが・・・・・ hiddenで入れてもソース見ればそのままpassが見えちゃうわけですし・・・・ http://medaka.5ch.io/test/read.cgi/php/1010660032/312
313: 311 [sage] 02/02/10 23:43 ID:??? >>312 postで(formから)passが入ってこないときadmin.cgiがエラーメッセージ吐いて 終了するようにすりゃいいんだよ。したら、URIがバレても簡単にはアクセスでき ないだろ? #!/usr/bin/perl require 'cgi-lib.pl'; my $method=$ENV{REQUEST_METHOD}; $pass='123'; &ReadParse(*form); if ($form{'pass'} ne $pass or $method ne 'post'){ #passミスマッチとGET拒否 print "Content-type: text/plain\n\nForbidden."; exit; } #──以下処理。formを吐く場合は必ず #<input type=hidden name=pass value=$pass>を仕込む GET全拒否しちまってるけど、たとえば、こうよ。 >hiddenで入れてもソース見ればそのままpassが見えちゃうわけですし・・・・ 上みたいな処置しときゃadmin.cgiにマトモにソースを吐かせるのに絶対にpostで pass渡さなきゃいけねーから、過信は禁物だがpassを知らない限りソースも見れん ワケよ。admin.htmにはpass書くわけじゃねーんだしさ。 #漏れはCGI.pm詳しくないんだが、CGI.pmでpostとgetの読み分けは出来んのかなあ。 #詳しい奴フォロータノム 後、>>311でも書いたがrefererとって ttp://cgitest.s7.xrea.com/cgi-bin/admin.cgi ttp://cgitest.s7.xrea.com/cgi-bin/admin.htm 以外からのアクセスは弾いちまえばいいんだよ。 http://medaka.5ch.io/test/read.cgi/php/1010660032/313
314: 無謀者 [sage] 02/02/11 02:03 ID:??? ちょっと機能追加 登録済み商品の修正が出来るようになりました。 >商品登録テストしてくれて人 今のところ、文字置換やエラー処理全然いれて無いので、コメントのところで 改行入れるたり、新規ページ作成時に、ファイル名入れないと、データボロボロになります(汗 明日(今日か・・)必要フォーム項目未記入時のエラー処理と、改行その他、文字列の 置換処理を出来るようにします。 >>311=313 なるほど・・・・と入っても、いまいち管理用画面でのその辺のセキュリティの必要性が 理解できて無いんですが・・・・・ どっちにrefererとって弾く事だけはやっておいた方がよさそうですね。 http://medaka.5ch.io/test/read.cgi/php/1010660032/314
315: 無謀者 [sage] 02/02/11 02:16 ID:??? ところで、今回、新規データ入力時に @data=($no,$hoge,$mona,$gik) $line=join("\t",@data); open(FH,$file); @logdata=<FH>; close(FH); open(WRITE,">$file"); print WRITE $line; print WRITE @logdata; close(WRITE); として、新しいものが上に来るようにしました。 で商品修正時にココの前で教えてもらった方法2の応用で @newdata=($no,$hoge,$mona,$gik); $line=join("\t",@data); open(IN,"$file"); open(TMP,">$temp"); print TMP "$line; while(<IN>){ my @cell = split/\t/; if($cell[0] ne "$no"){ print TMP; } } rename($temp,$file) ってやってるんですが、この方法だと、修正したファイルがデータの一番上(一行目)に 来ちゃうんですよね(そういう風にしてるんですが) これって、たとえば4行目のデータだったら、また同じ所にかき戻す方法ってどうやれば良いんですか? if($cell[0] ne "$no"){ print TMP; の後に if($cell[0] eq "$no"){ printTMP $line; でうまくいかなかったです。書く位置がまずかったんでしょうか? http://medaka.5ch.io/test/read.cgi/php/1010660032/315
316: 297(=259) [sage] 02/02/11 03:41 ID:??? $noは数値だよね? なら、 while(<IN>){ my @cell = split/\t/; $_ = $line if $cell[0] == $no; print TMP; } で数値評価したらどうかな? なんとなくだけど、$cell[0]か$noに空白とか含まれてそうだったんで。 http://medaka.5ch.io/test/read.cgi/php/1010660032/316
317: 無謀者 [sage] 02/02/11 18:26 ID:??? >>316 うまくいきました。ありがとうございます<IN> で変数が$_に入ってるってのがすっかり頭から飛んでました・・ ところで、正規表現なんですが、たとえば$priceに半角数字以外(「,」とか)が入ってた場合に エラーを表示させるのって if ($price eq ~/\D/){ print "価格はカンマ無しの半角数字で入力してください"; } で良いんですよね? http://medaka.5ch.io/test/read.cgi/php/1010660032/317
318: 名無しさん@お腹いっぱい。 [] 02/02/11 22:44 ID:+mlK3wYT >>317 全然違う。検索は $scalor =~ /$hoge/; だぞ。 if ($price =~ /\D/) { print "価格はカンマ無しの半角数字で入力してください"; } まあがんばれ。 http://medaka.5ch.io/test/read.cgi/php/1010660032/318
319: 無謀者 [sage] 02/02/11 23:18 ID:??? ↑の通りに書いてみたら,半角数字も弾かれちゃいました・・・・・ http://medaka.5ch.io/test/read.cgi/php/1010660032/319
320: 名無しさん@お腹いっぱい。 [sage] 02/02/11 23:24 ID:??? >319 \Dは数字以外じゃない? http://tohoho.wakusei.ne.jp/wwwperl1.htm#Expr http://medaka.5ch.io/test/read.cgi/php/1010660032/320
321: 無謀者 [sage] 02/02/11 23:28 ID:??? そうだと思うんですが・・・・ だから $price=~/\D/; だと「$priceに数字以外のものが含まれていれば」 って事になりますよね? http://medaka.5ch.io/test/read.cgi/php/1010660032/321
322: 名無しさん@お腹いっぱい。 [sage] 02/02/11 23:32 ID:??? だから半角数字だけならエラーにならないんじゃ? http://medaka.5ch.io/test/read.cgi/php/1010660032/322
323: 無謀者 [sage] 02/02/11 23:34 ID:??? のはずなんですが・・・・弾かれちゃうんですよ・・・ もう一度ソース見直してみます。 http://medaka.5ch.io/test/read.cgi/php/1010660032/323
324: 名無しさん@お腹いっぱい。 [ ] 02/02/11 23:35 ID:??? ってかさ、数字以外は取り除けばいいんでない? そっちの方がユーザーライクだと思うが。 $price =~ tr/0-9//cd; http://medaka.5ch.io/test/read.cgi/php/1010660032/324
325: 名無しさん@お腹いっぱい。 [sage] 02/02/11 23:38 ID:??? >>319 スペースも渡されてるとか http://medaka.5ch.io/test/read.cgi/php/1010660032/325
326: 無謀者 [sage] 02/02/11 23:40 ID:??? それも考えたんですが、全角数字入れられた時の対応も一緒に やっちゃおうと思ったので。 http://medaka.5ch.io/test/read.cgi/php/1010660032/326
327: 無謀者 [sage] 02/02/11 23:44 ID:??? >325 そう思って [\D\s\t]とかもやってみたんですが・・・ダメ http://medaka.5ch.io/test/read.cgi/php/1010660032/327
328: 名無しさん@お腹いっぱい。 [sage] 02/02/11 23:48 ID:??? 適当なファイルに書き出して見てみたら? CGI::Carpとかでハンドルしてるなら warnや dieで見てもいいけど。 http://medaka.5ch.io/test/read.cgi/php/1010660032/328
329: 名無しさん@お腹いっぱい。 [] 02/02/11 23:52 ID:pHWWFybw もうめんどくせえから、全部最初からやり直せ!! http://medaka.5ch.io/test/read.cgi/php/1010660032/329
330: 297 [sage] 02/02/11 23:52 ID:??? そうか、上手く逝ったか。漏れこのスレ、検証してないやつばっか(297とか^^;) 書いてるから、ちょっと心配してるんだな。 > で変数が$_に入ってるってのがすっかり頭から飛んでました・・ 慣れると便利なんだよ、デフォルト変数$_。 はまると怖いけどね。 で、正規表現検索は相手が文字列でも if ($price =~ /\D/)・・・ だよ。 http://medaka.5ch.io/test/read.cgi/php/1010660032/330
331: 無謀者 [sage] 02/02/11 23:52 ID:??? えっと、上記の処理より前に if ($price eq ""){ print"error" } ・ ・ #その他変数の未記入チェック ・ ・ ってやってから上の処理やってるんですけど、その辺は関係あります? 一応、未記入のエラーはちゃんと表示されます。 で、上記の検索を書くと、数値だろうがなんだろうが弾かれちゃう・・・ http://medaka.5ch.io/test/read.cgi/php/1010660032/331
332: 無謀者 [sage] 02/02/11 23:59 ID:??? うわ、 if ($price =~ /\D/){ print "$price"; } ってやったら、入力したのと違う数字が出てきた・・・・・ この数字どっから来たんだろ??? 198000って入力したのに429467294って・・・たかどんな数字入れても おんなじ数字が吐き出されてる????何でだ? ちなみに置換処理を無くして実行すると、ファイルにはちゃんと入力した 数字が書き込まれてます。 http://medaka.5ch.io/test/read.cgi/php/1010660032/332
333: 297 [sage] 02/02/12 00:02 ID:??? >>330 うわ、とっくに話題が過ぎ去ってやがる。リフレ忘れた。鬱打 &jcode::tr(\$price, '0-9', '0-9'); #全角数字を半角に変換 if ($price !~ /0-9/){ print "価格はカンマ無しの半角数字で入力してください"; } あたりではどうかな? http://medaka.5ch.io/test/read.cgi/php/1010660032/333
334: 名無しさん@お腹いっぱい。 [] 02/02/12 00:06 ID:r54lTbCX >>332 という事は、その処理以前にどこかで$priceに値が代入されてるんだよ。 探しなさい。 http://medaka.5ch.io/test/read.cgi/php/1010660032/334
335: 無謀者 [sage] 02/02/12 00:07 ID:??? え〜〜〜〜 解決したっぽいです・・・ どうやら、使ってるエディタにバグがあるらしく、上書き保存するとなぜか s-jisで保存されてたっぽい、のが原因みたいです。(設定はEUCにしてるのですが) お騒がせして本当に申し訳ありませんでした・・・・m(__)m エディタ変えようかな・・・・・ http://medaka.5ch.io/test/read.cgi/php/1010660032/335
336: 名無しさん@お腹いっぱい。 [] 02/02/12 00:09 ID:r54lTbCX >>335 俺はいまだにメモ帳使ってるぞ。メモ帳最強。 http://medaka.5ch.io/test/read.cgi/php/1010660032/336
337: 無謀者 [sage] 02/02/12 00:12 ID:??? あと、 >&jcode::tr(\$price, '0-9', '0-9'); #全角数字を半角に変換 jcodeでこんな事も出来るんですね。フォームデータ受け取り時に h2zでカタカナは全部置換させてるんですが、そこで数値にしなければならない 変数も全部変換掛けといた方がよさそうですね。 とりあえずご迷惑したお詫びに町内10周走ってきます。 http://medaka.5ch.io/test/read.cgi/php/1010660032/337
338: 無謀者 [sage] 02/02/12 01:01 ID:??? 皆様の暖かいご支援のおかげで、 新規ページの追加、商品の登録、編集、削除 までできるようになりました。また 「簡易商品ページメニュー」を作り、そこから商品ページにアクセス 出来るようにしました。(管理画面の中) ココに表示されるURLをコピペすれば、使う人は、メニューページを 自由に作れるのでは無いかと・・・・ ttp://cgitest.s7.xrea.com/cgi-bin/admin.htm パスワードは123です。 ある程度のエラー処理と文字列置換は入れたつもりなのですが・・・・ http://medaka.5ch.io/test/read.cgi/php/1010660032/338
339: 名無しさん@お腹いっぱい。 [sage] 02/02/12 02:46 ID:??? >>338 適当に弄ってれば誰でも使えそうなカンジですね。 って、弄ってみました。 感想: どのページからでも管理画面に戻れると良いかなあ。 (ページ作る時に何回も戻ったので…) http://medaka.5ch.io/test/read.cgi/php/1010660032/339
340: 311 [sage] 02/02/12 05:58 ID:??? >>314 >いまいち管理用画面でのその辺のセキュリティの必要性が理解できて無いんですが・・・・・ だーかーらー、http://うんちゃらかんちゃら/admin.cgi?mode=login&pass=xxxって URIがばれちまったらイッパツで商品ページ改ざんされちゃうだろっていってんの。 PasswordをGETに含めるのはヤバいんだって。直リンオッケーだしな。 知り合いとはいえ金絡んでやってんだろ?しっかりしろよ。 商品価格書き換えられたところに注文とか去れちまったら大損害だろ? URIバレた瞬間にPasswordもってかれちまうんだから、ほんとはPOSTがいいんだけどな、 せめてリファラチェック(GETメソッドはCGI自身からのアクセスみ許可)と、 本稼動のときは変な名前のディレクトリ作って、cgi本体の名前からは予想も出来ねー よーな名前でrobotよけのMETAつけた認証ページ設置するぐらいの対策はぐらいはしとけよ。 http://medaka.5ch.io/test/read.cgi/php/1010660032/340
341: 名無しさん@お腹いっぱい。 [sage ] 02/02/12 06:25 ID:??? >340 robotよけのメタは、誰も見ていないです。きっと。 http://medaka.5ch.io/test/read.cgi/php/1010660032/341
342: 無謀者 [sage] 02/02/12 13:16 ID:??? >340 詳しい説明ありがとうございます。リフレッシュを止めて、フォームボタンで hiddenを渡し、リファラチェックも入れるようにします。 ところで、一つのサブミットボタンで二つ以上のアクションを指定する事って 出来るんでしょうか?たとえば <form method=post action=hoge.cgi> <form method=post action=hage.cgi> <input ... <input.... <input type=submit value=OK> </form> </form> とかやっておけば、submit押した時に、両方にフォームの内容が送られるんでしょうか? http://medaka.5ch.io/test/read.cgi/php/1010660032/342
343: 名無しさん@お腹いっぱい。 [さげ] 02/02/12 18:27 ID:??? むり(やったことないけど)。 仮に出来たとして、ブラウザはどっちに応答すればいいのさ。 http://medaka.5ch.io/test/read.cgi/php/1010660032/343
344: 名無しさん@お腹いっぱい。 [あ] 02/02/12 21:09 ID:??? >>342 二つ以上アクションさせたい場合はhiddenでvalueを送ってスクリプト のなかのifで受ける。 例: <form method=post action=hage.cgi> <input type=hidden name=action value=hoge> <input type=hidden name=action value=hage> <input type=submit value=OK> </form> 〜hage.cgi〜 if ($DATA{'action'} eq 'hoge') { ******************* } if ($DATA{'action'} eq 'hage') { ******************* } http://medaka.5ch.io/test/read.cgi/php/1010660032/344
345: 無謀者 [sage] 02/02/13 00:04 ID:??? >>343-344ありがとうございました。 今、注文受けたら在庫数を減らすってところを作ってるんですが これが結構大変そうです・・・・・ http://medaka.5ch.io/test/read.cgi/php/1010660032/345
346: 無謀者 [sage] 02/02/13 01:26 ID:??? う〜ん、注文が確定した時(メールを送信する直前)にカートに入ってる 各商品の注文数を、商品ごとに各商品ファイルと照合して、注文数>在庫数 又は在庫数=0ならエラー、もし注文数<在庫数なら、「在庫数ー注文数」して 商品ファイル内の該当商品の在庫数を修正・・・・・ それぞれの処理は、今まで教えていただいた事でかけそうなんですが、データの抽出、条件分岐が非常に複雑になりそうです。 http://medaka.5ch.io/test/read.cgi/php/1010660032/346
347: 名無しさん@お腹いっぱい。 [sage] 02/02/13 05:09 ID:??? >>346 それって全然簡単じゃない?例としては if ($ORDER{'mona'} > $ZAIKO{'mona'}) { print "申し訳ありません。只今$ORDER{'mona'}は在庫を切らしております。\n"; } else { $ZAIKO{'mona'} -= $ORDER{'mona'} } こんな場合こそ、パール独特の変数、ハッシュが力を発揮する時だよ。 ハッシュを上手く使ってね。 http://medaka.5ch.io/test/read.cgi/php/1010660032/347
348: 無謀者 [sage] 02/02/13 10:05 ID:??? >347 えっと、カートの中身が複数だった場合商品によって、格納されているファイルがそれぞれ違うので まずforeachとかで順にカートの中身を取り出しながら商品の格納されているファイルを、検索(hidenでファイル名を渡してある)して、見つかったファイル名をまたforeachなりwhileなりで 検索して、商品名がマッチしたら在庫数と注文数を比較、それで0か足りない場合は エラー、もし大丈夫なら、在庫数から注文数を引いて、ファイルに書き直し・・・・ みたいな事をやらなければダメな気がするんですが・・・ http://medaka.5ch.io/test/read.cgi/php/1010660032/348
349: 297 [sage] 02/02/13 12:22 ID:??? @files=glob "$dir/*.dat"; # $dirはディレクトリ名。*.datのlistを得る foreach $file(@files){ open FILE,$file or &error; while(<FILE>){ my($no, $hinmei, $zaiko・・・) = split /\t/; #左辺のmyのリストは適当に $zaiko{"$file::$hinmei"} = $zaiko; } close FILE; } とかやって%zaiko{"ファイル名::品名"}(%zaiko{"ファイル名::商品番号"}?)に 代入して、%zaikoに対しデクリメント。 >>347さんの言うとおりhashならサーチ用にループしなくてイイからね。 で、 foreach $file(@files){ open FILE,$file or &error; open TMP,">$temp" or &error; while(<FILE>){ my(@dummy) = split /\t/; @dummy[2] = $zaiko{"$file::$hinmei"} if exists $zaiko{"$file::$hinmei"}; #$dummy[2]は適宜変更 print TMP @dummy; } close FILE; close TMP; rename $temp,$file; } とかやって戻してやるってのはどうかな? あ、ここまでやって思いついたが、カートの中身を %cart{ファイル名::商品名}=注文数 ってハッシュにして、後者の書き戻しループで在庫チェックさせればイッパツだ。 そのほうがイイや。速いし。 http://medaka.5ch.io/test/read.cgi/php/1010660032/349
350: 297 [sage] 02/02/13 18:52 ID:??? えーと、ちょっとヒマがあったんで上の追記を。 カートの中身を $cart{ファイル名::商品名}=注文数 (注文がない場合は0でなくハッシュを生成しない) ってハッシュにしてあるとして、 @files=glob "$dir/*.dat"; foreach $file(@files){ open FILE,$file or &error; open TMP,">$temp" or &error; while(<FILE>){ my(@data) = split /\t/; my $key = "$file::$data[2]"; # $data[2]は商品名ね if (exists $cart{$key}){ if ($data[1] < $cart{$key}){ #$dummy[1]は在庫 print "$data[2]は在庫が不足しています"; }else{ $data[1] -= $cart{$key}; } } print TMP @data; } close FILE; close TMP; rename $temp,$file; } で、読み出し→在庫チェック→在庫デクリメント→書き戻し が1回で終わると思うんだな。 まあ例によって書きなぐりだから、globでファイルリストを取り出し、 cartをexistsで調べて在庫チェックとデクリメント処理する、 という流れだけ理解してもらえれば。 http://medaka.5ch.io/test/read.cgi/php/1010660032/350
351: 無謀者 [sage] 02/02/14 15:56 ID:??? >>350=297さん いつもありがとうございます。 せっかく、頂いたんですが、違う方法で実装できました。 次は「在庫がありません」だけではちょっと不親切なので「在庫が無いので買物カゴから削除しました」 と「在庫が足りないので$cyumon個を$zeiko個に変更しました」と表示して カートの中身を書き換える機能を作成中です。一度に商品ファイルとカートファイルを の二つをハンドルするので、ループ中の何処で、書き込んで、何処でテンポラリーファイルを リネームするのかが、書いててわからなくなる・・・・(苦笑 スクリプト一行書くごとに、print"処理結果" and exit;で出力内容を確認しながら 進めてます http://medaka.5ch.io/test/read.cgi/php/1010660032/351
352: 無謀者 [sage] 02/02/15 00:25 ID:??? 買物を途中で止められた場合、datファイルが残ってしまっているので、それを 定期的に消したいんですが、たとえば最終更新時間から$time以上経過したら 削除させるのって @files=glob("./cart/*.dat"); foreach(@files){ @info=stat $_; $deltime=time-60*60*$time if ($info[9] >$deltime){ unlink $_; } } で、大丈夫ですか? これを、買物終了時かなんかに実行されれば、誰かが買物を完了してくれたら自動的に 入らないファイルが消える、というふうにしようと思うんですが・・・・ statで得られる時間って time関数と同じで方式(1700年からの秒数?)ですか? http://medaka.5ch.io/test/read.cgi/php/1010660032/352
353: 無謀者 [sage] 02/02/15 00:39 ID:??? なんか誤字だらけ・・・ ×入らないファイルが消える ○要らないファイルが消える http://medaka.5ch.io/test/read.cgi/php/1010660032/353
354: 297 [sage] 02/02/15 01:39 ID:??? おお、自力で実装できたか。ガンガン腕を上げていますね。 あとは欲張って機能拡張しすぎてスパゲッティにならんようにね。 statで得られるのはtimeとおなじ*1970年からの*通算秒だよ。 最終更新からの経過だけ調べるだけなら、ファイルテスト演算子-Mで 最終更新からの*経過日数*が得られるよ。 foreach(glob("./cart/*.dat")){ unlink if -M $_ > $time; # $timeは日数、0.5なら12時間 } とか。 http://medaka.5ch.io/test/read.cgi/php/1010660032/354
355: 無謀者 [sage] 02/02/16 01:32 ID:??? 画像のアップロードって、難しいですね・・・・ http://medaka.5ch.io/test/read.cgi/php/1010660032/355
356: 名無しさん@お腹いっぱい。 [] 02/02/16 15:01 ID:BlI0w0O/ 大人のCGI(書籍) ttp://www.byakuya-shobo.co.jp/hj21/otona/main.html あたり読んで、パクれ。 今のお前ならもうこの本のスクリプトを解析、応用できるはずだ。 http://medaka.5ch.io/test/read.cgi/php/1010660032/356
357: 無謀者 [sage] 02/02/16 16:40 ID:??? 持ってたりします・・・>大人のCGI 実は他でソースパクってUpload.cgi作ったら動いた事は動いたんですが それを、admin.cgiにサブルーチンとして埋め込むと動かなくなります。 そのソースは、CGI.pm使ってたんですが、enctype="multipart/form-data" で受け取ったデータを ReadParseかけちゃってるのが問題なのかな?とか思ってたりするんですが、関係あります? http://medaka.5ch.io/test/read.cgi/php/1010660032/357
358: 名無しさん@お腹いっぱい。 [] 02/02/16 17:51 ID:BlI0w0O/ そこだ。ファイルデータは生で扱え。 その動いたっちゅうUpload.cgiで、どこをパースしてどこを生で扱っているか 解析してみるのだ。この件に関して間違いのない文書はRFC1867。 http://medaka.5ch.io/test/read.cgi/php/1010660032/358
359: 無謀者 [sage] 02/02/16 19:24 ID:??? ちょっと、頭の中がテンパって来たので、気分転換で、管理画面のUIを整理しました。 ttp://cgitest.s7.xrea.com/cgi-bin/admin.htm 各画面から必要なページに戻れるようにボタンをつけました。 あと、新規ページ作成時と、デザイン変更時に作成結果(変更結果)が確認できるようにしました。 http://medaka.5ch.io/test/read.cgi/php/1010660032/359
360: 名無しさん@お腹いっぱい。 [ ] 02/02/16 20:34 ID:??? うぷろだでわかんないってどの辺?よかったら書いてみ http://medaka.5ch.io/test/read.cgi/php/1010660032/360
361: 無謀者 [sage] 02/02/16 22:34 ID:??? なんか、今日xreaが調子悪くないですが? 私のPCのせいだろうか・・・・ http://medaka.5ch.io/test/read.cgi/php/1010660032/361
362: 名無しさん@お腹いっぱい。 [sage] 02/02/17 01:51 ID:??? しかし、1/10に > Perlも、いやプログラミングさえ未経験。「必ずわかるCGI」と > その他の入門書で何とか「掲示板」の仕組みがようやく理解できました。 んな事書いてた>>1が一ヶ月でここまで来るとは正直予想できなかった。 http://medaka.5ch.io/test/read.cgi/php/1010660032/362
363: 名無しさん@お腹いっぱい。 [sage] 02/02/17 09:32 ID:??? マジすごい! 無謀者さん 素直に感動しました http://medaka.5ch.io/test/read.cgi/php/1010660032/363
364: 名無しさん@お腹いっぱい。 [] 02/02/17 10:54 ID:FSHvXFjS 俺モジュール使え無い。つまり1にいつの間にか越された。ウツウツウツウツウツウツ。。 http://medaka.5ch.io/test/read.cgi/php/1010660032/364
365: 名無しさん@お腹いっぱい。 [sage] 02/02/17 11:14 ID:??? >356 そんなクソ本を紹介すんな。 誤字脱字だらけ&ヘタレすぎ。立ち読みしてて叩きつけたくなった。 http://medaka.5ch.io/test/read.cgi/php/1010660032/365
366: 名無しさん@お腹いっぱい。 [sage] 02/02/17 11:50 ID:??? >>365 マジっすか?? 近くの書店で注文しましたが・・・・ http://medaka.5ch.io/test/read.cgi/php/1010660032/366
メモ帳
(0/65535文字)
上
下
前
次
1-
新
書
関
写
板
覧
索
設
栞
歴
あと 151 レスあります
スレ情報
赤レス抽出
画像レス抽出
歴の未読スレ
AAサムネイル
Google検索
Wikipedia
ぬこの手
ぬこTOP
0.021s