![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?e8efa67)
はじめまして。下記内容にてよろしくお願いいたします。
まずわたしのCGIのスキル的に説明すれば設置ができる程度で書いたことなどはございません。このサイトでもわたしが意図しているものが何かないか探しましたが、適したものがありませんでした。
ほしい内容は名前、年齢、性別、メールアドレス、質問内容が40問程度です。
ほしい機能はエラーチェック、確認画面、メール返信機能、csv保存です。
以上の内容に簡単にカスタマイズできるCGIや近いものなどありましたら教えてください。よろしくお願いいたします。
No.4ベストアンサー
- 回答日時:
日時を取得して、変数$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
}
No.6
- 回答日時:
もう随分とキャッチボールしてますね。
とりあえず、data.csvのファイル名をdata.cgiに変更してください。Perlコード上は、
open(FH,">>./data.csv");を
open(FH,">>./data.cgi");にするだけでOKです。
拡張子cgiは実行ファイルとWebサーバーが判断するから、第三者からは見れなくなります。
パーミッションの件はお使いのサーバー会社に問合せてください。
600のパーミッションと拡張子だけで、情報漏洩防止は完璧か、といわれると私も心もとないものです。
今日も人材派遣会社のア●コがWeb上のオンライン登録者データを不正アクセスされて情報漏洩したようです。
やる奴は、どんな方法つかっても、ファイルこじ開けて覗き見するみたいです。
No.5
- 回答日時:
そうそう、コーディングの話だけじゃなくて、実際これを使うときに気をつけないといけないのは、CSVファイルのパーミッションは600にしないと、644だと個人情報ジャジャもれになりますよ。
実際にファイルをWebサーバーにアップロードして、
http://あなたのドメイン/フォルダ/data.csv
とするとブラウザでうれしくなるほど丸見えになります。
私は、600にするとともに、データファイルでも、わざとcsvとかtxtという拡張子を使用せず。cgiにしています。
個人情報保護がさけばれる今日この頃をかんがみ老婆心でした。
この回答への補足
早々にご連絡ありがとうございます。日時設定はバッチリOKでした。1点補足していただいたcsvファイルのパーミッション設定に関して気になったのですが、現在使用しているサーバのせいかどうなのか分かりませんが、パーミッションを666にしないと書き込まれないようです。644でも600でもダメでした。600でないとおっしゃるとおりブラウザで確認できてしまいます。何か良い方法ならびに回避方法などありましたら教えてください。お願いいたします。
補足日時:2005/06/29 10:39No.3
- 回答日時:
>インターナルサーバエラーになります。
パーミッションの設定が悪いのでしょうか?パーミッションは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:07No.2
- 回答日時:
とりあえず、シンプルに作ってみました。
メール送信は、省きました。●送信用フォーム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:02No.1
- 回答日時:
ははぁ~、この一連は私も苦労して一通りPerlでコーディングしました。
そこで、以前に作ったコードを貼り付けて回答しようとしたら文字数が多すぎて駄目みたいです。
ココとココがわからない、というようにスポットでならお答えできそうですが・・・
この回答への補足
ご返答ありがとうございます。一応下記サイトのものをカスタマイズして使おうと思っていたのですが、CSVデータが添付されます。こちらの希望としては添付ではなくサーバ側に順次蓄積していけばそれでよいと思っております。どのようにすれば添付ではなくサーバへ蓄積していくようにできるのでしょうか?また、このCSVの添付データですが縦並びに表示されます。順次書き込みできるような設定にできるのであれば横並びが理想です。言っている意味が分かるでしょうか??分かりにくい説明で申し訳ありません…。
参考にしているサイトurl:ttp://www.showzie.com/script.html
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- JavaScript ラジオボタンによるフォームの開閉を行いたい 3 2022/03/31 21:30
- その他(Microsoft Office) エクセルのマクロについて教えてください。 5 2023/01/21 09:39
- アルバイト・パート バイト応募及び面接の辞退について 2 2023/01/31 18:05
- その他(プログラミング・Web制作) google formsで回答者をスプレッドシートに記載する方法 1 2023/06/23 11:22
- その他(Microsoft Office) ワードのマクロについて教えてください。 1 2023/01/21 16:01
- Microsoft ASP グーグルフォーム 1 2022/12/30 18:16
- AJAX 自作の地図をグーグルマップのようにしたい 3 2022/11/15 11:53
- 片思い・告白 男子学生です。好きな子(同じクラスの女の子)がいます。その子と学校ではほとんど喋ったことがありません 1 2023/02/13 03:21
- 教えて!goo 【回答が書きにくいのはなぜ】投稿内容に不適切な表現など・(中略)・投稿内容の修正をお願いいたします 9 2023/05/09 08:41
- Perl Perl の外部モジュールの利用方法 3 2022/07/10 18:34
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
匿メール機能にログ機能を追加...
-
文字って数字で表現・・・
-
ラジオボタンが両方とも選択で...
-
チェックボックスの返す値
-
wordの数式について 定積分を書...
-
FORMのselectの選択肢を最初か...
-
INPUT TYPE
-
ディレクトリのファイル数取得
-
「value」に2つの値をセットす...
-
perlを難読化、暗号化させたい
-
postデータのあるページの再表示
-
MSPゴシックで、一番幅を取る文字
-
チェックボックスでのvalue値の...
-
PHPで検索ボタンを押さずに検索...
-
select値をhiddenのvalueに渡し...
-
VB.net データーグリッドビュー...
-
HTMLでのタイマーの設置
-
UTF-8で文字化けしないようにす...
-
チェックボックスで選択した内...
-
CGI.pmのstart_htmlで思い通り...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
tracert ができない原因
-
入力フォームに全角・半角スペ...
-
匿メール機能にログ機能を追加...
-
【CGI】画像の表示の仕方【Mini...
-
CGI(Perl)内での必須項目チェ...
-
チェックボックスでのor検索
-
文字って数字で表現・・・
-
文字列の読み込みについて教え...
-
電話番号を読み込むプログラム...
-
perl ヒア文(print <<"EOM" ...
-
掲示板スパム対策(改造)ガー...
-
CGIメールフォームの件名について
-
Excel の VBA で、IEのWeb操作
-
ラジオボタン、チェックボック...
-
sendmailのメール送信ができま...
-
行数でなく内容を取得するには
-
wordの数式について 定積分を書...
-
ラジオボタンが両方とも選択で...
-
「value」に2つの値をセットす...
-
チェックボックスの返す値
おすすめ情報