性格悪い人が優勝

はじめまして。下記内容にてよろしくお願いいたします。
まずわたしのCGIのスキル的に説明すれば設置ができる程度で書いたことなどはございません。このサイトでもわたしが意図しているものが何かないか探しましたが、適したものがありませんでした。
ほしい内容は名前、年齢、性別、メールアドレス、質問内容が40問程度です。
ほしい機能はエラーチェック、確認画面、メール返信機能、csv保存です。
以上の内容に簡単にカスタマイズできるCGIや近いものなどありましたら教えてください。よろしくお願いいたします。

A 回答 (6件)

日時を取得して、変数$d[5]に代入、その後joinで繋いでCSV保存を追加しました。

動作確認してませんけど、多分動くと思います。

#! /usr/local/bin/perl

require "./mimew.pl";
require "./cgi-lib.pl";
&ReadParse();


#    ********* 変 数 の 定 義 状 況 *********
# $d[0] 名前  $d[1] メールアドレス  $d[2] 性別  $d[3] 年齢  $d[4] 問題


# form.htmlより受取ったデータを変数に代入
$d[0]=$in{'name'};
if($in{'mail_1'} eq "" and $in{'mail_2'} eq ""){$d[1]="";}else{$d[1]=$in{'mail_1'}."@".$in{'mail_2'};}
$d[2]=$in{'sex'};
$d[3]=$in{'tosi'};
$d[4]=$in{'q1'};

# 送信時間の取得と変数代入
$time=time;
($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdat)=localtime $time;
$year += 1900;
$mon +=1;
$accessday=$year."/".$mon."/".$mday;
$accesstime=$hour.":".$min.":".$sec;
$d[5]="送信日: ".$accessday." "."送信時間: ".$accesstime;

# 未入力チェック 性別と問題はHTMLで初期値が設定されているので空白はありえないのではぶく
if($d[0] eq ""){$error[0]="お名前を入力して下さい";}
if($d[1] eq ""){$error[1]="メールアドレスを入力して下さい";}
if($d[3] eq ""){$error[3]="年齢を入力して下さい";}

#エラーメッセージを全部つないで
$error=$error[0].$error[1].$error[3];

# エラーが無いときの処理
if($error eq ""){

# データをカンマ区切りにしてdata.csvに保存
$data=join(",",$d[0],$d[1],$d[2],$d[3],$d[4],$d[5])."\n";
open(FH,">>./data.csv");
print FH $data;
close FH;

# 保存が完了した旨をユーザーに知らせるHTMLを作成
print <<END;
content-type: text/html

<HTML>
<HERD><TITLE>送信完了</TITLE></HERD>
<BODY>
<H2>送信内容を受取りました</H2>
</BODY>
</HTML>
END

}
else
{
print <<END;
content-type: text/html

<HTML>
<HERD><TITLE>登録内容エラー</TITLE></HERD>
<BODY>
<H2>登録内容に不備があります。戻るボタンで戻り再登録して下さい</H2>
</BODY>
</HTML>
END

}
    • good
    • 0

もう随分とキャッチボールしてますね。


とりあえず、data.csvのファイル名をdata.cgiに変更してください。Perlコード上は、
open(FH,">>./data.csv");を
open(FH,">>./data.cgi");にするだけでOKです。
拡張子cgiは実行ファイルとWebサーバーが判断するから、第三者からは見れなくなります。

パーミッションの件はお使いのサーバー会社に問合せてください。
600のパーミッションと拡張子だけで、情報漏洩防止は完璧か、といわれると私も心もとないものです。
今日も人材派遣会社のア●コがWeb上のオンライン登録者データを不正アクセスされて情報漏洩したようです。
やる奴は、どんな方法つかっても、ファイルこじ開けて覗き見するみたいです。
    • good
    • 0
この回答へのお礼

早々にご連絡ならびに長々とお付き合いいただきありがとうございました。本当にたすかりました感謝しております。

お礼日時:2005/06/29 13:24

そうそう、コーディングの話だけじゃなくて、実際これを使うときに気をつけないといけないのは、CSVファイルのパーミッションは600にしないと、644だと個人情報ジャジャもれになりますよ。


実際にファイルをWebサーバーにアップロードして、
http://あなたのドメイン/フォルダ/data.csv
とするとブラウザでうれしくなるほど丸見えになります。
私は、600にするとともに、データファイルでも、わざとcsvとかtxtという拡張子を使用せず。cgiにしています。
個人情報保護がさけばれる今日この頃をかんがみ老婆心でした。

この回答への補足

早々にご連絡ありがとうございます。日時設定はバッチリOKでした。1点補足していただいたcsvファイルのパーミッション設定に関して気になったのですが、現在使用しているサーバのせいかどうなのか分かりませんが、パーミッションを666にしないと書き込まれないようです。644でも600でもダメでした。600でないとおっしゃるとおりブラウザで確認できてしまいます。何か良い方法ならびに回避方法などありましたら教えてください。お願いいたします。

補足日時:2005/06/29 10:39
    • good
    • 0

>インターナルサーバエラーになります。

パーミッションの設定が悪いのでしょうか?

パーミッションは755か700に設定

>またcsvは何も設定しないでよいのですか?

同一フォルダにdata.csvという名前で空のファイルをひとつ作ってください。メモ帳か何かを開いてそのまま名前をつけて保存すればOKです。
そうそう、cgi-lib.plとmimew.plも同一フォルダにおいとかないとだめです。どちらもフリーですから適当にネットからダウンロードしてください。

>また、質問数を増やすにはどう設定したらよろしいのでしょうか?

HTML側に
質問:<INPUT type="radio" checked name="q1" value="YES">はい <INPUT type="radio" name="q1" value="NO">いいえ<BR>をそれぞれname="q2"とかにして増やしてください。
そのq1、q2、q3・・・の分だけ、受けるcgi側に
$d[5]=$in{'q2'};
$d[6]=$in{'q3'};
というようにすればそれだけCGI側も受けられます。
あとの制御構造はq1の例を流れに従ってまねてください。

ちなみにrequire "./mimew.pl";はメール送信に必要なモジュールで今のところ関係ないですからその1行は消しても問題ありません。

この回答への補足

早々にご連絡ありがとうござしました。ご連絡いただいたとおり修正したとこと問題なく動作いたしました。上記の内容は解決したのに誠に恐縮ではありますが、csvで保存させたデータに日付と時間を入れれるようしたいと思っております。サーバの日付(時間)が自動でcsvにおちるようなコードはどのようにすればよろしいでしょうか?また、何処へ挿入すればよろしいですか?この質問で最後になると思いますのでどうぞよろしくお願いいたします。

補足日時:2005/06/28 12:07
    • good
    • 0

とりあえず、シンプルに作ってみました。

メール送信は、省きました。

●送信用フォームHTML
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<HTML>
<HEAD>
<META http-equiv="Content-Type" content="text/html; charset=Shift_JIS">
<META http-equiv="Content-Style-Type" content="text/css">
<TITLE></TITLE>
</HEAD>
<BODY>
<FORM action="./syori.cgi" method="GET">名前:<INPUT size="20" type="text" name="name"><BR>
mail:<INPUT size="20" type="text" name="mail_1">@<INPUT size="20" type="text" name="mail_2"><BR>
性別:<SELECT size="2" name="sex">
<OPTION value="男" selected>男</OPTION>
<OPTION value="女">女</OPTION>
</SELECT><BR>
年齢:<INPUT size="4" type="text" name="tosi"><BR>
質問:<INPUT type="radio" checked name="q1" value="YES">はい <INPUT type="radio" name="q1" value="NO">いいえ<BR>
<INPUT type="submit" name="send" value="送信"></FORM>
</BODY>
</HTML>

●受取るCGI ファイル名syori.cgi
#! /usr/local/bin/perl

require "./mimew.pl"; #これはSendmailにいるけど今のところ関係無し
require "./cgi-lib.pl";
&ReadParse();


#    ********* 変 数 の 定 義 状 況 *********
# $d[0] 名前  $d[1] メールアドレス  $d[2] 性別  $d[3] 年齢  $d[4] 質問


# form.htmlより受取ったデータを変数に代入
$d[0]=$in{'name'};
if($in{'mail_1'} eq "" and $in{'mail_2'} eq ""){$d[1]="";}else{$d[1]=$in{'mail_1'}."@".$in{'mail_2'};}
$d[2]=$in{'sex'};
$d[3]=$in{'tosi'};
$d[4]=$in{'q1'};

# 未入力チェック 性別と問題はHTMLで初期値が設定されているので空白はありえないのではぶく
if($d[0] eq ""){$error[0]="お名前を入力して下さい";}
if($d[1] eq ""){$error[1]="メールアドレスを入力して下さい";}
if($d[3] eq ""){$error[3]="年齢を入力して下さい";}

#エラーメッセージを全部つないで
$error=$error[0].$error[1].$error[3];

# エラーが無いときの処理
if($error eq ""){

# データをカンマ区切りにしてdata.csvに保存
$data=join(",",$d[0],$d[1],$d[2],$d[3],$d[4])."\n";
open(FH,">>./data.csv");
print FH $data;
close FH;

# 保存が完了した旨をユーザーに知らせるHTMLを作成
print <<END;
content-type: text/html

<HTML>
<HERD><TITLE>送信完了</TITLE></HERD>
<BODY>
<H2>送信内容を受取りました</H2>
</BODY>
</HTML>
END

}
else
{
# 送信内容に不備がある場合のHTML表示
print <<END;
content-type: text/html

<HTML>
<HERD><TITLE>登録内容エラー</TITLE></HERD>
<BODY>
<H2>登録内容に不備があります。戻るボタンで戻り再登録して下さい</H2>
</BODY>
</HTML>
END

}

この回答への補足

早々にありがとうございます。設置してみたのですがインターナルサーバエラーになります。パーミッションの設定が悪いのでしょうか?またcsvは何も設定しないでよいのですか?また、質問数を増やすにはどう設定したらよろしいのでしょうか?取り扱い方法など詳しく教えていただけないでしょうか?よろしくお願いいたします。

補足日時:2005/06/27 22:02
    • good
    • 0

ははぁ~、この一連は私も苦労して一通りPerlでコーディングしました。


そこで、以前に作ったコードを貼り付けて回答しようとしたら文字数が多すぎて駄目みたいです。
ココとココがわからない、というようにスポットでならお答えできそうですが・・・

この回答への補足

ご返答ありがとうございます。一応下記サイトのものをカスタマイズして使おうと思っていたのですが、CSVデータが添付されます。こちらの希望としては添付ではなくサーバ側に順次蓄積していけばそれでよいと思っております。どのようにすれば添付ではなくサーバへ蓄積していくようにできるのでしょうか?また、このCSVの添付データですが縦並びに表示されます。順次書き込みできるような設定にできるのであれば横並びが理想です。言っている意味が分かるでしょうか??分かりにくい説明で申し訳ありません…。
参考にしているサイトurl:ttp://www.showzie.com/script.html

補足日時:2005/06/27 22:32
    • good
    • 0

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