私設SoS2オーナー応援BBS

新規発言一覧最新記事過去一覧検索ダウンロードページHOME

スレッド

└◇820:
複数アイテムファイルをufs2.cgiで編集 [ストロベリージャム] 10/13 21:58

 └◇821:Re:複数アイテムファイルをufs2.cgiで編集 [moon] 10/14 08:51
  └◇822:Re[2]:複数アイテムファイルをufs2.cgiで編集 [moon] 10/14 09:10
   └◇823:Re[3]:複数アイテムファイルをufs2.cgiで編集 [ストロベリージャム] 10/14 10:42<-last


820● 複数アイテムファイルをufs2.cgiで編集[ ストロベリージャム ] 2003 10/13 21:58
お久しぶりです。風の旅人(?)ストロベリージャムです。
本家の方で質問があった複数アイテムファイルを〜ですが最近自作の街移動システムを導入した為月様のを参考に簡単な物を自作してみたのですが# Sub Adding Item #で上手くファイルを開く事が出来ないのです。。改造したとこは

# Sub Admin #のアイテム補充を以下のように修正
print qq|<input type=radio name=mode value=add_item>アイテム補充 <select name=item>\n|;
print qq|<option value="1itm.dat">1itm.dat</option>\n|;
print qq|<option value="2itm.dat">2itm.dat</option>\n|;
print qq|</select><br>\n|;

# Sub Add Item # # Sub Adding Item #を以下の様に変更しました。
# Sub Add Item #
sub add_item {
    if ($Fm{'pass'} ne $pass) { &error('パスワードが違います') }
    @bitlines = &opendat($bitdat);
    @itmlines = &opendat($Fm{'item'});
    &table_top("アイテムの補充$add",'1');
    print qq|プレイ用アイテム一覧:<br><textarea rows=15 cols=50 name=bg>\n|;
    foreach $item (@itmlines) {
    print qq|$item|;
    }
    print qq|</textarea><br>\n|;
    print qq|ストックアイテム一覧:<br><textarea rows=15 cols=50>\n|;
    foreach $item (@bitlines) {
    print qq|$item|;
    }
    print qq|</textarea><br>\n|;
    &table_bottom('adding_item');
}

# Sub Adding Item #
sub adding_item {
    if ($Fm{'pass'} ne $pass) { &error('パスワードが違います') }
    @itmlines = &opendat($Fm{'item'});
    $bg = $Fm{'bg'};
    $bg =~ s/&lt;/</g;
    $bg =~ s/&gt;/>/g;
    @bag = split(/<br>/,$bg);
    foreach $item (@bag) {
    if ($item) { push (@items,"$item\n") }
    }
    &writedat($Fm{'item'},@items);
    $add = "<br><br>アイテムの補充を行いました";
    &add_item;
}

# Sub Add Item #では選択したファイルを開けるのですが、アイテムを編集し# Sub Adding Item #に飛ぶとCan't Openと出てしまいます。開けないファイル名が出ないので$Fm{'item'}の変数受け渡しが出来ていないのかな?と思ったのですがどうにもこうにも上手くいかなくて。。。
レティシア様にも同じ質問をしたのですが月様なら原因がわかるかな?と思い質問させて頂きました。
もしお時間がありましたらご教授お願い致します。
スレッド一覧


821● Re:複数アイテムファイルをufs2.cgiで編集[ moon ] 2003 10/14 08:51
> # Sub Add Item #では選択したファイルを開けるのですが、アイテムを編集し# Sub Adding Item #に飛ぶとCan't Openと出てしまいます。開けないファイル名が出ないので$Fm{'item'}の変数受け渡しが出来ていないのかな?と思ったのですがどうにもこうにも上手くいかなくて。。。

そのようですね。
sub add_itemの&table_topと&table_bottomの間に、
  print qq|<input type=hidden name=item value="$Fm{'item'}">|;
を追加すれば良いような気がします。

あと、セキュリティ的にsub add_itemとsub adding_item双方の@itmlines = &opendat($Fm{'item'});以前に、
  &error('無効なファイルです。') if($Fm{'item'} !~ /^\ditm\.dat$/);
のような感じの判定を付けておいたほうが良いだろうと思います。(条件はアイテムファイルのパスにより異なります。)
スレッド一覧


822● Re[2]:複数アイテムファイルをufs2.cgiで編集[ moon ] 2003 10/14 09:10
> あと、セキュリティ的にsub add_itemとsub adding_item双方の@itmlines = &opendat($Fm{'item'});以前に、

何気に本家BBSに書いたほうでも似たような処理が必要です。
あちらを無駄に上げるのも嫌なのでここで修正を書きます。(普通は気にする必要がない事柄ですし。)

> を、そしてsub add_itemとsub adding_item双方の@itmlines = &opendat($itmdat);以前に、
>   $itmdat = "./item/itm_$Fm{'itmopt'}.dat";
> を追加します。
さらに$itmdat・・・以前に、
  &error('無効なファイルです。') if($Fm{'itmopt'} !~ /^[a-z]$/);
を追加。
スレッド一覧


823● Re[3]:複数アイテムファイルをufs2.cgiで編集[ ストロベリージャム ] 2003 10/14 10:42
ありがとうございます。無事出来ました m( _ _ )m
またお世話になるかもしれませんが今後ともヨロシクお願いします(^0^
スレッド一覧

CGIROOM