☆ショッピングカートのCGIを作りたい!Perlで☆
■ このスレッドは過去ログ倉庫に格納されています
0001無謀者
02/01/10 19:53ID:XY4TxmilフリーのショッピングカートCGIは設置は簡単でも、商品の登録
とかが手作業だったりで使い勝手が悪いです。
で、短絡的に「自分で作ってみようか」と思っているのですが・・・・
Perlも、いやプログラミングさえ未経験。「必ずわかるCGI」と
その他の入門書で何とか「掲示板」の仕組みがようやく理解できました。
やっぱ、無謀ですかねぇ・・・・・・
0108名無しさん@お腹いっぱい。
02/01/15 01:20ID:???0109無謀者
02/01/15 14:10ID:???いや、人違いだと思いますよ。この板本格的に見始めたの極最近なので。
>>106-107
ご忠告、ご提案ありがとうございます。やはりセキュリティ関連の勉強は必須
ですかね。今はともかPerlでCGIを書けるようになることでイッパイイッパイですが、
時間のあるときにその手の本も目を通してみます。
0110名無しさん@お腹いっぱい。
02/01/15 15:58ID:???106ではないのだが、共用鯖でセキュリティといっても限界があると彼は言ってる
のだと思われ。
テストでサンプルデータ入れるのは問題ないけどそれを本格運用する場合には
気をつけてくれってことだろ。
とにかく形にもなってないんだろうからがんばれよ
0111名無しさん@お腹いっぱい。
02/01/15 16:43ID:???本当に書いてるなら、できあがってるところまでのコードを見せてよ。
どこかでDLしたものはナシね。
0112無謀者
02/01/15 16:55ID:???了解です。>セキュリティの件
あと励ましありがとうございます。
>>111
本当に書いているんでが・・・・
今のところ、あれこれいじりながら、何をすれば何が起きるのか?ってのを
確認してる段階なので・・・
Hallo World! に毛が生えた程度のもの晒すのもどうかと・・・
0113名無しさん@お腹いっぱい。
02/01/15 17:01ID:???2か月くらいかかったけど素人でもできたから。
0114名無しさん@お腹いっぱい。
02/01/15 17:16ID:???何でそれらを使わないの?
http://www.cubit.co.jp/shopgear.html
http://www.mallkun.com/
このへんで良いじゃん。
0115名無しさん@お腹いっぱい。
02/01/15 18:19ID:2BhpAmH6商売にしたいんじゃないの。
0116名無しさん@お腹いっぱい。
02/01/15 19:03ID:???使う人間が便利だと思えばね。
GPLにしてくれとはいわないよ(笑)
0117115
02/01/15 19:42ID:2BhpAmH6俺も別に悪いとは思わないよ
0118名無しさん@お腹いっぱい。
02/01/15 21:11ID:???シェアウエアがあるのは知ってるがフリーな物も沢山あるし
無料レンタルもあるからよっぽど使いやすく堅牢な奴でないと
買う奴は居ないと思うが。
0119名無しさん@お腹いっぱい。
02/01/15 21:53ID:???作ってやれば需要はあると思われ。
堅牢性は本来最重要なのだが評価されにくいね。
0120名無しさん@お腹いっぱい。
02/01/15 22:07ID:???堅牢性は知識無いから考えないことにしよう(藁
0121名無しさん@お腹いっぱい。
02/01/15 22:26ID:???脆弱そうなところに堅牢なのを売る、と。
0122無謀者@表示時間の桁合わせが・・・・・
02/01/15 22:39ID:???商売については・・・頭の隅の方に無いって言えばウソになりますが、
とてもじゃ、無いですけど今の段階じゃ(藁
確かに、シェアやフリーであることは有るんですが、いろいろ調べてみると
結構痒い所に手に届いてるものが無い。思うに「通販サイト」に直接
携わってない人たちが作ってるのでは無いかと・・・
実際、頼まれて見ると、運用者側に親切な機能が搭載されて無かったりします。
ページの生成機能なんて最たるものですね。
ここの皆さんのように、スクリプトをホイホイ書けるような人たちなら
小遣い稼ぎくらいすぐ出来るんじゃないですか? ”商売”ってなるとまた難しいでしょうが・・・
0123名無しさん@お腹いっぱい。
02/01/15 22:47ID:???0124名無しさん@お腹いっぱい。
02/01/15 23:16ID:???>>1さんのような人も使うと思うとやっぱりフリーで免責事項書いたって
やだな(わら
別に>>1は嫌いじゃないぞ、そういう何かに挑む姿勢は好きだ。
いろいろ試してみて3ヵ月後くらいにはいい友達になれそうだ、がんばれ
0125無謀者@表示時間の桁合わせ・・・解決
02/01/15 23:56ID:???それは、素人が使って、あとからうだうだ言われるのがたまらん!
という事でしょうか?
確かにそうかも知れませんね。ボロクソ言われているKENT氏にしたって
サポート面だけは評価されてるようですし。ソフト(スクリプト)ってのは
例えどんなに良いものが書けても、使う側ってのは自分の能力じゃなく
そのソフト(製作者)に全責任を取らせようとしますからね(藁
あと、激励本当に感謝です。地道に勉強を続け、ここで進捗状況を報告させていただき、
たまには、質問もさせていただこうと思います。
って、「日記に使うなヴォケ!!」とか言われそうですが(w
0126名無しさん@お腹いっぱい。
02/01/15 23:59ID:???日記につかったら呪いますから。
0127名無しさん@お腹いっぱい。
02/01/16 01:54ID:???それは一理ありますね。
自分の場合、ネットショップやってて、カートも自作ですが
商売をしてない人が作ったカートは、やはりそれなりです。
ショップ側にも、お客さん側にも細かい気配りができていない
ことが多いです。
まぁ、1つも作っていないくせにKENTさんのことを言ってる
ヴォケよりはマシだけどね。
0128無謀者
02/01/16 02:06ID:???すいません、私の書き方がマズかったでしょうか・・・
私自身がKENT氏をどうこう言う立場に無いのは100も承知のつもりです。
実際、趣味でやってるHPでも使わせてもらってますし。
そんなんで、たまたまこの板のKENT氏関連のスレ見たら、ワリと評判が悪く、
それでもコトアフターフォロー(サポート)に関しては悪く言ってる方が
いなかったので、引き合いに出させていただきました。
お気を悪くなされたのでしたら、申し訳ありませんでした。
0129無謀者
02/01/16 02:16ID:???その中身が
商品名 価格 個数 値段
みたいになってるんです。でカートの中身が増えていくと行が増える。
で、最終的に合計金額を求めるのに、
open (FH,$file){
@list=<FH>;
close(FH);
foreach $line(@list){
@item=split(/\t/,$line);
$count=unshift(@list);
$total=$item[4]*$count;
}
}
とやっているのですが・・
他にもっとスマートなやり方って有るのでしょうか?
一応走らせてみると期待通りの結果は得られてるんですが。
0130無謀者
02/01/16 02:30ID:???↑じゃダメだった・・・
足し算を繰り返さなきゃダメですね・・・・・やりなお〜し
0131名無しさん@お腹いっぱい。
02/01/16 02:46ID:???それだけで、かなりの売り上げ増に結びつくから
あなたが通販やった方が良いですよ。
これだけスレが伸びるのが、その証拠。
カートの使いやすさも大事だけど、個別の対応も大事。
と、関係ないマジレスしたりして。
0132無謀者
02/01/16 05:15ID:???$total=$kingaku+$kingaku+kingaku+kingaku・・・・・・
ってのをやりたいんです。で$kingakuてのが何回来るかわからず、
$kingakuが一定なら>>129でやったみたいに個数だして掛け算すれば
良いんですが・・・・・
0133名無しさん@お腹いっぱい。
02/01/16 05:33ID:hnHzn5xQ中身は良く知らないけど、価格が販売価格、値段が価格×個数ということでいいのかな?
だとしたら、
open (FH,$file);
while($line=<FH>) {
($hinmei,$kakaku,$kosuu,$nedan)=split(/\t/,$line);
push (@kakakus,$kakaku);
}
close(FH);
$all_kakaku = 0;
foreach $kakakus(@kakakus) {
$total = $total + $kakakus;
}
で、良いのでは?
きっと誰かが最適化してくれるだろうけど。
0134名無しさん@お腹いっぱい。
02/01/16 05:35ID:hnHzn5xQあ、訂正。
> close(FH);
> $all_kakaku = 0;
> foreach $kakakus(@kakakus) {
の、$all_kakaku ってのを、$totalになおしてね。
0135名無しさん@お腹いっぱい。
02/01/16 05:49ID:hnHzn5xQほかの処理が泣く、単に合計出すだけだったら、
$total = 0;
open (FH,$file);
while($line=<FH>) {
($hinmei,$kakaku,$kosuu,$nedan)=split(/\t/,$line);
$total = $total + $nedan;
}
close(FH);
だな。
しかも、前の、ちょっと間違ってるし。
0136名無しさん@お腹いっぱい。
02/01/16 08:51ID:udXTb4FH$nadanはchompしないでOKなんですか?
俺はいつもやっちゃうけど無駄なんですか?
あと、
$total += $kosuu * $nedan;
かと思った。
0137136
02/01/16 08:51ID:???0138名無しさん@お腹いっぱい。
02/01/16 09:19ID:QRv7obuWわかんない。動作確認してないし、サンプルデータもないし。
下書きも校正もしないで書き終わったらがんがん書き込んじゃったから。
0139名無しさん@お腹いっぱい。
02/01/16 12:13ID:???追加、削除、計算も簡単だし。
0140名無しさん@お腹いっぱい。
02/01/16 13:43ID:KcWg2TMrPostgreSQLPostgreSQLPostgreSQLPostgreSQLPostgreSQL
PostgreSQLPostgreSQLPostgreSQLPostgreSQLPostgreSQL
PostgreSQLPostgreSQLPostgreSQLPostgreSQLPostgreSQL
PostgreSQLPostgreSQLPostgreSQLPostgreSQLPostgreSQL
PostgreSQLPostgreSQLPostgreSQLPostgreSQLPostgreSQL
PostgreSQLPostgreSQLPostgreSQLPostgreSQLPostgreSQL
PostgreSQLPostgreSQLPostgreSQLPostgreSQLPostgreSQL
PostgreSQLPostgreSQLPostgreSQLPostgreSQLPostgreSQL
0141sage
02/01/16 16:21ID:???質問もすごく初歩的な四則演算とかしてるぐらいなんだから
アルゴリズムについてもっと勉強してからスレッドたてれ!
PGってそんなあまくないよ!!
設計の手法だって勉強しないといけないしさ!
初心者だから?
おいおい・・・・・システム作るのがドンだけ大変か
なんか怒りを覚えてきたぞ!
PERLの特性ってしってんのか?
PERLでやるよりプログラムの基礎勉強しろ
ああ
はらたってきた
0142名無しさん@お腹いっぱい。
02/01/16 16:29ID:???( ´ ・∀・`) へー
0143名無しさん@お腹いっぱい。
02/01/16 17:12ID:???0144名無しさん@お腹いっぱい。
02/01/16 23:51ID:???まあ、そう怒らずに。
これから>>1が身をもって知るんだから。
0145名無しさん@お腹いっぱい。
02/01/17 12:12ID:???・共用サーバーで運営する(?)
・言語はperlで
・RDBMなどは使わずCSVファイルにてデータを管理
・今あるものは使いにくいからインターフェースにはこだわりたい
・>>1はまったくの素人である
・合計金額だすだけであたふたする>>1の支援人ももうちょっと勉強しろ
これくらいでよろしいか?
0146名無しさん@お腹いっぱい。
02/01/17 13:41ID:???・>>1には絶対無理
でよろしいか?
0147名無しさん@お腹いっぱい。
02/01/17 14:23ID:wRcZzrUC>・合計金額だすだけであたふたする>>1の支援人ももうちょっと勉強しろ
ああこれおれのことか(笑)
勉強というか、ちゃんと睡眠取るようにするよ(笑)
0149名無しさん@お腹いっぱい。
02/01/17 14:37ID:???( ´ ・∀・`) へー
0150名無しさん@お腹いっぱい。
02/01/17 17:46ID:???0151名無しさん@お腹いっぱい。
02/01/17 19:20ID:???社会的弱者は役に立たないから、2ちゃんねるに来なくていいよ。
0152無謀者
02/01/17 19:50ID:???別に、プログラムを馬鹿にしているつもりは無いんですが、気分を害されたようなら
申し訳ありません。四則演算云々に関してはおっしゃる通りです。学生の頃
もっと数学勉強しときゃよかった・・・・
いろいろ、親切にレス頂いてる方もいるので、ありがたい限りですが、
やはり大勢として「システム構築」「セキュリティ」「運用」という
話が結構出てきますね。やはりプロフェッショナルな方が多いからでしょうか?
自分としては、それこそ「とりあえず動くスクリプト」という気持ちで
作り始めてるので、舐めてるといわれればその通りかも知れません。
ここにスレ立てたのは、外部と違って、多方面の情報をいただけるかな・・・と・・・
現在の進捗状況。
合計を出すのは>>135でいけました。ありがとうございました。が・・・
ここまで来て気が付いたんですが、注文ボタン押すたびにtmpファイルに書き込んでたんじゃ、
同時に二人以上の人が使えないですよね・・・
注文の最終段階まで配列で処理していって、最後に吐き出すようにしないとダメなのかなぁ・・・・
というわけで、振り出しに戻ってます(藁
0153名無しさん@お腹いっぱい。
02/01/17 22:22ID:???0154名無しさん@お腹いっぱい。
02/01/17 23:21ID:???過去のログは読んでるかい?たとえば>>99なんて結構親切に書いてくれ
ていると思わないかい?
我々も段階を追ってアドバイスしてるのだ、だがどうしても説明しき
れないことがあるから具体例も出している。
経験して失敗するのはかまわない、そっちの方が身になって覚えるこ
とができるからな。でももし>>99のようなアドバイスを難しいから
とか面倒だからと言って聞き流してるとだれもアドバイスをくれなく
なるよ。
だから>>153のキーワードも大切にして欲しい。
多分セッション管理と聞いて難しいことをしているように思えるだろ
う、説明している人によっては理解不能なくらい難解な言葉を使って
いて読みにくいことだろう、でもperlには効率的なセッション管理は
苦手とする分野だ。
>>141のぶち切れてる部分を除いて読んでみて、perlの特性と言って
るがセッション管理にも十分出ている。たとえばこれをPHP4でやろう
とすれば簡単にできるのだよ。
とりあえずはperlでできることを学んで行こう。キーワードはわかる
ね、セッション管理だ。
0155名無しさん@お腹いっぱい。
02/01/17 23:46ID:???( ´ ・∀・`) へー
0156名無しさん@お腹いっぱい。
02/01/18 00:57ID:???無理して作らなくてもこの辺使えば?
>>114のサイトでも十分だと思うがな。
自作にこだわる理由て何?。
商品登録の使い勝手が悪いというなら既存のショッピングカートCGIの商品情報を
GUIで設定するアプリをVB当たりで作った方が早いぞ。
0157名無しさん@お腹いっぱい。
02/01/18 01:40ID:???そのほうが絶対楽。
0158名無しさん@お腹いっぱい。
02/01/18 01:44ID:???それにしても、クレジット手数料、ピンハネしすぎ。
0159名無しさん@お腹いっぱい。
02/01/18 01:46ID:???うちでは、1のいう tmp ファイルをお客さんごとに作ってる。
途中で買い物やめた人の分は、時間で消してる。
PHPだけどセッションは、hiddenで持ち回り。
クッキー使うと i-mode 使えないから。
>>154に同意
0160名無しさん@お腹いっぱい。
02/01/18 02:24ID:???うん、クッキーはだめだよね。
よそのサイトからスクリプト投げられるのはどう防いでいます?
0161名無しさん@お腹いっぱい。
02/01/18 02:25ID:pneLb9V7>>106
ホントに夜のrootがウヨウヨしてるとしたら、よっぽどヤバイ鯖?
でも、まぁ共有鯖は危険なことは同意。せめて、置き場所と権限はキッチリしないとね。
>>1
初プログラムがカートはやめたほうがいい。せめて小さいものを10コぐらい作ってからにしたほうが、時間の効率的利用になると思われる。
イマはまだマシ。部分ごとにカンペキにしていっても、全体動作がうまくいくとは限らない。大きなプログラムは虫取りが大変だぞ。
0162sage
02/01/18 10:51ID:???おとなげなくおこってしまったが、
>>161
にかかれているように、段階を踏んでPGを勉強していったほうがよいとおもわれる
PGって積み重ねていくものだからね!>>1
>>156
おれも同意する!おれはVB嫌いだが・・・そっちのほうがはやいかもよ!
0163名無しさん@お腹いっぱい。
02/01/18 18:51ID:???( ´ ・∀・`) へー
0164名無しさん@お腹いっぱい。
02/01/18 21:31ID:???ちょっとgoogleで旅してくるかな
0165無謀者
02/01/18 21:44ID:???>自作にこだわる理由て何?。
う〜ん・・・前前からCGIを作れるようになりたいと思ってたんですが
掲示板とかカウンターとかは自分のHP作る際もフリーので満足できちゃって
きっかけが無かったんです。で、今回のがきっかけになっただけで・・・
どちらにしろ、いろいろ寄り道しながらperlを勉強していきたいと思ってますので、
お暇な方は今後とも激励、お叱り、罵倒などいただければ幸いです。
さて、セッション管理の件ですが、とりあえず「Cokieを使う」という検討を付けたのですが、
セッションID発行する際って一般的にはどうしてるんでしょう?調べてみると
Perl自体にはユニークなIDを発行する関数が無いみたいなので、環境変数を利用
して生成するようなのですが・・・取得できる環境変数の中でユニークな値って
いうと、IPと時間でしょうか?
>GUIで設定するアプリをVB当たりで作った方が早いぞ。
平行して既存のフリーのCGIに使うページ生成のプログラムをAccessで作り始めてます。
どうせなら、こっちを先にPerlで作ってみようかな・・・・
0166名無しさん@お腹いっぱい。
02/01/19 00:41ID:???まずは 1は掲示版CGIでもつくってなさいってことよ
単なる掲示版でも荒し対策とか色々細かいこと考えると結構大きなプログラムになるぞ
0167名無しさん@お腹いっぱい。
02/01/19 00:45ID:???そうでもなく感じられるようなことも書いてるね。
VBAは使えるの?
0168無謀者
02/01/19 00:55ID:???VBAを使える、というかアクセスのマニュアル本見ながらどうにかこうにか
簡単なものが作れる程度です。アクセスってその気になればMACROだけでも
かなり複雑なことやらせられるし・・・・
「よーし、パパプログラム作っちゃうぞ!!」って言いながら
エクセルのマクロ得意げに組み合わせてるおじさんとかわらんレベルです。
0169名無しさん@お腹いっぱい。
02/01/19 01:53ID:???プログラムをしたこともない素人に頼む知り合いって
なかなか理解に苦しみます。
商売を舐めてるのでしょうか?w
0170名無しさん@お腹いっぱい。
02/01/19 02:25ID:???不思議で性がない。
ネタならネタで乗ってあげるか、放置できないのか?
0171
02/01/19 03:46ID:Z1wHwPDO>Perl自体にはユニークなIDを発行する関数が無いみたいなので、環境変数を利用
>して生成するようなのですが・・・取得できる環境変数の中でユニークな値って
>いうと、IPと時間でしょうか?
ユニークな値が欲しいなら、現在の時間と、プロセスIDを組み合わせる
のが定石かな。プロセスIDは、$$と書けば得られる。
実行中のプログラムに割り当てられるIDで、同時に同じ値が割り当て
られることはない。知ってるかもしれんが。
時間はtimeとかなんとか書けば、エポック秒が得られるだろ。
マイクロ秒まで出す方法があったはずだけど、忘れた。
プログラムの内容にもよるけど、大半この組み合わせでいけるでしょ。
0172agege
02/01/19 04:12ID:Z/A0FYpK> マイクロ秒まで出す方法があったはずだけど、忘れた。
実は知らないんじゃないの?
0173名無しさん@お腹いっぱい。
02/01/19 04:18ID:???いや、実は知らなくってもちっともかまわない(笑)
0174名無しさん@お腹いっぱい。
02/01/19 08:37ID:???apacheが生成してくれるの使えば?
最初に見たときは糞スレだと思ったけど、>>1の根気とチャレンジ精神で
良スレになりつつある予感。PGには必須の資質なので頑張ってくれ。
0175171
02/01/19 09:24ID:Mv1Es+poモジュール入れないとダメだった。他の方法は知らん。
use Time::HiRes;
$time = Time::HiRes::time;
0176無謀者
02/01/19 16:47ID:???>>169
単にHPの作成頼まれただけです。一応既存のカートでOK貰って
ページ自体は完成してます。プログラム作ろうと思ったのは単にきっかけ
になったに過ぎません。極端に言えば作る必要性は無いんです。
で・・・
$id=$$+time()でユニークID作って、cookie渡して
split(/\=/,$ENV{'HTTP_COOKIE'})で埋め込まれたID参照して
これが無ければcookieを渡す、もし有るようなら{取り出したID}.dat
ていうファイルを作ってその後の処理をさせようと思ってるんですが、
方法的にはこんなんで良いんですかね?
0177名無しさん@お腹いっぱい。
02/01/19 17:04ID:???0178名無しさん@お腹いっぱい。
02/01/19 18:47ID:???OK,OK
0179名無しさん@お腹いっぱい。
02/01/20 13:24ID:???ここまでよくがんばった!
0180無謀者
02/01/20 20:25ID:COvSUhiyif ($ENV{'HTTP_COOKIE'} eq ""){
&set_cookie
}
print "content-type: text/html\n\n";
print $ENV{'HTTP_COOKIE'};
ってやると、もともとクッキーがあるときは$ENVを表示するんですが、
持ってないときは&set_cookieでクッキーをセットしてるはずなのに
表示してくれません。リロードすれば表示するんですが・・・
ちなみにサブルーチンはこんな感じです(変数省略)
sub get_cookie{
$cookie="set-cookie: Tscart=$cid; expires=$gmt; ";
print <<EOF;
$cookie
EOF
}
0181名無しさん@お腹いっぱい。
02/01/20 20:45ID:???0182名無しさん@お腹いっぱい。
02/01/20 21:05ID:???陰ながら応援の機会を伺うとしよう。
0183仕様書無しさん
02/01/20 21:26ID:???>>181にも書いてるけど、1セッションで一発読み書きは出来ない
そこにくる前(Top辺りで)、コッソリとダミーのCookieを仕込んでおいて
そいつを読んでクライアントのONOFFを確認するっつのが常套手段
0184無謀者
02/01/20 22:14ID:???なるほどですね。>>183さんの方法は考えたんですが、Cookieに
埋め込むIDでその後の処理を管理する予定なので、どうしようかと・・・・
0185無謀者
02/01/20 22:24ID:???以下のような方法で解決できたっぽいんですが・・・
$ctime=time();
$cid=$$+$ctime;#クッキー用ID
if ($ENV{'HTTP_COOKIE'} eq ""){
&set_cookie
$cart="$cid"."\.dat";
}
else{
@id=split (/\=/,$ENV{'HTTP_COOKIE'});
$cart="$id[1]"."\.dat";
}
0186名無しさん@お腹いっぱい。
02/01/20 23:13ID:???操作した後に駄目でしたはイラツキの原因。
後、クッキーはセッションクッキーで充分だろう。
0187無謀者
02/01/21 03:36ID:???その方法で進めてみます。>>186さんの進言に関しては後々方法考えてみます
で、普通のクッキーとセッションクッキーの違いって?
さて、またひとつ問題が発生してるのでどなたかよろしければご教示ください。
データの削除に関してですが、現在.datの中身が
$id\t$hoge\t$mona\t$giko\n
$id\t$hoge\t$mona\t$giko\n
$id\t$hoge\t$mona\t$giko\n
・
・
・
というようにタブ区切りで一行づつ格納されています。でこの中の
たとえば3行目を削除したい時なんですが、画面表示するときに
open(FH,$file);
@line<FH>;
close(FH);
foreach$list(@line){
@item=split(/\t/,"$list")
}
として、各要素をテーブルで区切って表示した上で
画面上に各行ごとにフォームボタンを作り、Hideenで削除用のキー(=$ID)を入れています。
で削除ボタンを押した時にそのキーに対応する$idを持った行を丸々消したいんですが・・・
いろいろ試してるんですが、ファイルの中身が全部消えちゃったり・・(鬱
<FH>で呼び出して、foreachで配列に格納して$id=削除キーだったら
その配列を消して、残りの配列をまた\n区切りの変数にもどして.datに格納・・・
みたいな事を考えたんですが・・・
0188名無しさん@お腹いっぱい。
02/01/21 06:32ID:yXZYknLA$i = 0;
foreach (@line) {
($id,$hoge,$mona,$giko) = split(/\,/,$_);
if (削除キー eq $id) { splice(@line,$i,1); last; }
$i++;
}
削除キーには、削除ボタン押したときに飛ばされる値を指定する。
0189名無しさん@お腹いっぱい。
02/01/21 12:21ID:???0190名無しさん@お腹いっぱい。
02/01/21 12:30ID:TFQKF+6T禿同。
セッションIDだけhiddenで渡しておいて、あとは全部DB任せ。
この方が絶対楽だね。ソートするにせよ、合計金額を出すにせよ
全部DB任せ。こんなに楽な方法ばかり普段使っていると
>1が凄いことをしているように見えてくる・・・
0191189
02/01/21 12:42ID:???だよね(わら
久しぶりにファイル操作スクリプトみたんで懐かしいよ。
>>1さん
エラー処理はきちんとしましょうね。
クッキー渡すときも、ファイルを開くときもね。
あとデータ受け取ったときもサイズとか中身のチェックいれとかないと
だめだかんね〜♪
全ての人間がフォームに従って入力してくれるとは限りませんから。
0192無謀者
02/01/21 12:54ID:???ありがとうございます。試してみます。ってやってみたけどいまいち
うまくいかん・・スクリプトの意味もう一回良く見ながら考えてみます。
>>189-190
DBでMySQLとかでしょうか?
私が借りてる鯖(共用)は使えるようになってるみたいなんですが、
一般的にはどうなんでしょ?置く鯖が決まってればそれにあわせた
仕様で書けば良いんでしょうが、出来るだけ汎用性のあるものを
書きたいので・・・・もしDBが鯖依存でなくてPerlが使えれば
必ず使える、とかUNIX系の鯖ならほぼ大丈夫ってものなら
勉強してみようと思うのですが・・・
0193無謀者
02/01/21 13:00ID:???×DBでMySQLとかでしょうか?
○DBってMySQLとかでしょうか?
0194名無しさん@お腹いっぱい。
02/01/21 13:02ID:???いいところ突きまくり・・・
0195190
02/01/21 13:14ID:???最近は安い共用鯖でもMySQLとかPostgreSQLを使えるところが
増えてきているから、汎用的だって判断しても良いんじゃない?
漏れはDB使えない(使わない)って仕事を受ける時は、それだけで
料金5割増にしてる(w しかも最近はPHPとかJavaを使うことが
多いんで、「Perlで書いてね」なんて言われたら、さらに5割増(w
最低限DBが使える鯖に移転することを強く薦めている。
フリーでばらまくならPerlでファイル操作で構成しておく方が
汎用的と言えるだろうが、作るのが面倒だよなぁ。
漏れの場合は、過去に使ったクラスを使いまわして自分の中で
汎用的にするだけだな。もちろん、客には「1から作りました」
と言って、「あっという間に作ってくれましたね」と言われて
喜ぶのが好きだけど(w
0196無謀者
02/01/21 15:03ID:???$i = 0;#行数カウント用の初期設定
foreach (@line) {
($id,$hoge,$mona,$giko) = split(/\,/,$_);
if (削除キー eq $id) { splice(@line,$i,1); last; }#もし削除キー=$idだったら、@lineの$i個目(つまりファイルの$i行目)を空にする)
$i++;
}
って事で良いんですよね?
0197名無しさん@お腹いっぱい。
02/01/21 15:35ID:yxhIL91Yうん、その通り。
0198名無しさん@お腹いっぱい。
02/01/21 15:35ID:yxhIL91Yあ、ちがうよ。
空にするんじゃなくて、その行削除ね。
0199無謀者
02/01/21 16:25ID:???open(DEL,"$cart");
@dl=<DEL>;
close(DEL);
$i=0;
foreach $line(@dl){
@cell = split(/\t/, $line);
if ($cell[0] eq "$del") {
$line="";
}
@del=join("\n",$line);
close(DEL);
#ここまで@delには削除済みのリストが入ってるのを確認
#その後
open(FH2,">>$cart");
print FH2 @del;
close(FH2);
}
で書き込もうと思ってるんですが、>>でやると元のリスト+(元のリストー削除した要素)
が追加されちゃうし、>でやるとなぜか、もとのリストが全て消えて、削除すべき要素だけがファイルに書き込まれてしまいます。
@delで欲しいリストは完成してるので、あとはファイルに書き戻すだけだと思うのですが・・・
0200名無しさん@お腹いっぱい。
02/01/21 16:30ID:???なんでそんな苦労をしているんだろう・・・・
0201 ◆6KgJyjvE
02/01/21 16:49ID:rYGhtF3Popen(TMP,">${cart}.tmp");
while(<IN>){
my @cell = split/\t/;
if($cell[0] ne "$del"){
print TMP;
}
}
close IN;
close TMP;
rename(${cart}.tmp,$cart);
でどうよ。
0202名無しさん@お腹いっぱい。
02/01/21 17:18ID:???open(IN,"$cart");
open(TMP,">${cart}.tmp");
print TMP grep { ! /^$del\t/ } <IN>
close IN;
close TMP;
rename(${cart}.tmp,$cart);
grep使うのは別におすすめしないけど、
判定のためだけにsplitする必要はないかと。
というか、素直にApache::Session使えばいいのにと思ったり。
0203無謀者
02/01/21 21:33ID:???最初、うまく行かなかったんですが、renameのところを変えたら
うまくいきました↓
open(IN,"$cart");
open(TMP,">$cart.tmp");
while(<IN>){
my @cell = split/\t/;
if($cell[0] ne "$del"){
print TMP;
}
}
close IN;
close TMP;
rename("$cart\.tmp","$cart");
ありがとうございました。
>>202
$id(=削除キー)が単純に振られた連番(数字)なので、配列で
確実に指定してやったほうがいいかな・・・と。grepも使いかた調べたんですが、
個数とかの数字を拾っちゃいそうな気がして・・・
☆進捗状況
おかげさまで、
・買物カゴに入れる
・カゴの中身を削除する
の部分は動作するようになりました。皆様の助けが無ければとても10日でここまでは
出来なかったと思います。ありがとうございます。
次の予定は、個人情報の入力画面です。
・・・と、思い出したので質問です。非常に基本的なことだとは思うのですが、
cookieって有効期限内でも、新たに渡せば上書きされるんですかね?
買物カゴで渡したcookieを個人情報画面で、書き換えたいんですが・・
てかそういう場合って新たにクッキー渡すんですか?
0204
02/01/22 00:28ID:zQlW9qzl>で書き込もうと思ってるんですが、>>でやると元のリスト+
>(元のリストー削除した要素)が追加されちゃうし、
> でやるとなぜか、もとのリストが全て消えて、
> 削除すべき要素だけがファイルに書き込まれてしまいます。
>> で開くのは、追加書き込み。ファイルは安全。
> で開くと、ファイルサイズがゼロになる。ファイルのデータは失われる。
ファイルロックを併用で、ファイルから読んだあと同一ファイルに
書き戻したい場合は、読み+書き(+<)で開くのが一般的かな。
該当ファイルが存在しない場合は、ファイルを作ってはくれないが。
0205名無しさん@お腹いっぱい。
02/01/22 01:23ID:4ftMAJcgクッキーの上書きだァ?
それ位調べろってんだよヴォケ!
0206名無しさん@お腹いっぱい。
02/01/22 11:42ID:???数少ない自分が知ってるネタが出て来てよかったね ボクちゃん
早く病院に戻りなさい
0207名無しさん@お腹いっぱい。
02/01/22 16:17ID:???添削してくれるぞ、きっと
■ このスレッドは過去ログ倉庫に格納されています