プロが教える店舗&オフィスのセキュリティ対策術

http://f29.aaa.livedoor.jp/~unyu/joban/unyu.cgi? …
上記のサイトのように、情報をフォームに入力し投稿ボタンを押すと入力したフォームに反映/保存され、その情報を他の人も変更(投稿)/回覧できるようにするにはどのようにすればよいのでしょうか?
CGI/perlなどを探し、掲示板のプログラムを改造したりしましたが分かりません。回答お願いします。

A 回答 (2件)

こんなのはどうでしょうか。


我流プログラマなので、おかしかったら読み飛ばして下さい。

考え方はhtmlをcgiでデータ部分を書き換えて書き出す方法です。
test.htmlの、$~$で囲まれた部分を、cgiが書き換えます。
selectedの部分は、あるデータがある値のとき、$selected_データ名=値$ を'selected'に書き換えます。
checkedの部分は、$checked_データ名=値$ を'checked'に書き換えます。
ファイルの読み書きで、改行を\nにしてます。
言葉で説明するのが難しいので、プログラムを見てください。

下のtest.htmlと、test.cgiと、空のtest.datを用意してください。
test.cgiは、パーミッションを705(か755)にしてください。
#!/usr/bin/perlの部分は適当に書き換えてください。
test.datは、パーミッションを606(か666)にしてください。
perl5.8の標準モジュールCGIを使ってます。
perl5.6とかなら、cgi.pmをインクルードしてください。

--- test.html ここから ---
<form action="./test.cgi" method="post">
data1:<input type="text" name="data1" value="$data1$"><br>
data2:<input type="text" name="data2" value="$data2$"><br>
data3:<textarea name="data3">$data3$</textarea><br>
data4:<select name="data4">
<option value="" $selected_data4=$>選んでね
<option value="1" $selected_data4=1$>その1
<option value="2" $selected_data4=2$>その2
</select><br>
data5:<input type="checkbox" name="data5" value="1" $checked_data5=1$><br>
data6:
<input type="radio" name="data6" value="1" $checked_data6=1$>aaa
<input type="radio" name="data6" value="2" $checked_data6=2$>bbb<br>
<input type="submit" name="regist" value="登録">
</form></form>
--- test.html ここまで ---

--- test.cgi ここから ---
#!/usr/bin/perl

use strict;
use CGI::Carp qw(fatalsToBrowser);
use CGI;

my $query = new CGI;
print $query->header(-charset=>'Shift_JIS');

my %data;

if(defined $query->param('regist')){
#データの登録
$data{data1}=$query->param('data1');
$data{data2}=$query->param('data2');
$data{data3}=$query->param('data3');
$data{data4}=$query->param('data4');
$data{data5}=$query->param('data5');
$data{data6}=$query->param('data6');
#改行変更
foreach my $key(keys %data){$data{$key}=~s/\n/\\n/g}
#データ書き出し
open(OUT,'>./test.dat');
print OUT join("\n",%data)."\n";
close(OUT);
}

#フォーム読込み
open(IN,'./test.html');
my $form=join("\n",<IN>);
close(IN);

#データ読み込み
open(IN,'./test.dat');
%data=grep(chomp,<IN>);
close(IN);

#改行変更
foreach my $key(keys %data){$data{$key}=~s/\\n/\n/g}

#selectedデータ作成(select)
$data{'selected_data4='.$data{data4}}='selected';

#checkedデータ作成(checkboxとradio)
$data{'checked_data5='.$data{data5}}='checked';
$data{'checked_data6='.$data{data6}}='checked';

#フォームへデータ書き込み
$form=~s/\$(.+?)\$/$data{$1}/g;

#フォーム表示
print $form;
exit;
--- test.cgi ここまで ---
    • good
    • 0
この回答へのお礼

プログラムまで書いてくださり本当に有難う御座いました。
おかげ様で成功しました。
有難う御座います!

お礼日時:2007/09/11 18:48

投稿内容を<p>に入れる代わりに<textarea>に入れる。

    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!