• ベストアンサー

ラジオボタン、チェックボックスを多用したアンケートフォーム

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

  • CGI
  • 回答数6
  • ありがとう数3

質問者が選んだベストアンサー

  • ベストアンサー
  • souta_n
  • ベストアンサー率33% (79/234)
回答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 }

その他の回答 (5)

  • souta_n
  • ベストアンサー率33% (79/234)
回答No.6

もう随分とキャッチボールしてますね。 とりあえず、data.csvのファイル名をdata.cgiに変更してください。Perlコード上は、 open(FH,">>./data.csv");を open(FH,">>./data.cgi");にするだけでOKです。 拡張子cgiは実行ファイルとWebサーバーが判断するから、第三者からは見れなくなります。 パーミッションの件はお使いのサーバー会社に問合せてください。 600のパーミッションと拡張子だけで、情報漏洩防止は完璧か、といわれると私も心もとないものです。 今日も人材派遣会社のア●コがWeb上のオンライン登録者データを不正アクセスされて情報漏洩したようです。 やる奴は、どんな方法つかっても、ファイルこじ開けて覗き見するみたいです。

ypoiujp
質問者

お礼

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

  • souta_n
  • ベストアンサー率33% (79/234)
回答No.5

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

ypoiujp
質問者

補足

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

  • souta_n
  • ベストアンサー率33% (79/234)
回答No.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行は消しても問題ありません。

ypoiujp
質問者

補足

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

  • souta_n
  • ベストアンサー率33% (79/234)
回答No.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 }

ypoiujp
質問者

補足

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

  • souta_n
  • ベストアンサー率33% (79/234)
回答No.1

ははぁ~、この一連は私も苦労して一通りPerlでコーディングしました。 そこで、以前に作ったコードを貼り付けて回答しようとしたら文字数が多すぎて駄目みたいです。 ココとココがわからない、というようにスポットでならお答えできそうですが・・・

ypoiujp
質問者

補足

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

関連するQ&A

  • アンケート・注文フォームの作り方

    こんにちは。初めてCGIに挑戦しようと思っています。 HPの中でアンケートや注文ができるページを作って、 送信された内容をメールなどで受け取れるようにしたいと考えています。 この場合はCGIのsendmail機能を使う事になるのでしょうか? サーバーはトクトクを利用していて、CGIの利用は可能なんですが、 ”sendmail使用不可”と規定されています。 しかしトクトクユーザーのサイトを見てみると、アンケートや問い合わせフォームを 設置されているページがいろいろありました。 これはsendmailではなく、他の方法を用いているのでしょうか・・・?? もしそうならどのような機能なのでしょうか。 おそらくsendmailについての私の認識違いだとは思うのですが、 もし詳しい方がいましたらご教授ください。 よろしくお願いします。

    • 締切済み
    • CGI
  • テキストのみのメールフォーム用CGIにチェックボックスを設置

    現在、Perlを使ったメールフォームCGIを作成中なのですが、 元々Perlの知識はほとんどないところ、 サンプルCGIをダウンロードして必要な部分だけを修正し、 少しずつ希望するメールフォームに近づけているところです。 テキストフォームを新たに追加して、 それに対応できるように CGIプログラムの命令文を多少追加したりする程度は 何とか出来るようになりましたが、 チェックボックスを設置してみたところ、 複数にチェックを入れても、 送られてくるメールには はじめにチェックしたvalue情報しか送られてきません。 CGIのどこを修正すれば良いのか、 Perl言語自体をきちんと勉強していない私にとっては 皆目検討もつかず、暗礁に乗り上げてしまっています。 この程度の情報では、まともに回答するには情報不足だと思いますが、 このような問題解決には概ねCGIの どの辺りのどの命令文を確認すれば良い等、 判断できる範囲でご教授いただけましたら幸いです。

  • チェックボタンの追加

    フォームメールのcgiを使用しているのですが、チェックボタンを追加したいと考えています。 チェックボタンの機能を追加するには、どんなソースを追記したらいいのでしょうか? 教えてください。

    • 締切済み
    • CGI
  • ラジオボタン、チェックボックスへの、JavaScript を使った入力について

    以下のページにあるようなメール投稿フォームにおいて、 【性別】に【男性】、【お問い合わせ内容】に【ふつヲタ/身の回りの愚痴】 を入力させる JavaScript を作成するにはどうすれば良いでしょうか? http://www.ag-pro.net/cgi_bin/webradiomail/input.html 【ラジオネーム】については javascript:document.forms[0].name.value='ラジオネーム';eval(); 【お住まいの地域】については document.forms[0].お住まいの地域.selectedIndex='1';eval(); で出来ることは確認しております。 以上、お手数おかけしますがよろしくお願いします。

  • レンタル掲示板について

    有料でもいいので、高機能の掲示板のレンタルできるサイトを教えてください。 OKWebさんのような掲示板が理想です。 具体的には、下記のような機能が全部ではなくてもほしいです。 ・画像UP機能 ・メールアドレスを非公開で返信出来る機能 ・OKWebさんのように質問・回答のやり取りが出来る機能 ・デザインをカスタマイズできる CGIの設置等の簡単なことは出来るので、自分で設置できるのでよいCGI等を紹介してくださってもありがたいです。 参考になるサイトなど、少しでも情報をいただけるとありがたいです。 よろしくお願いします。

  • アンケートフォーム(HPビルダー8)

    現在、ホームページビルダー8のアンケート機能を利用して申込書フォームを作っています この時に回答はもちろんメールで自分のPCに返信されるのですが、このメールの返信内容を変更したいと思っています Q1=aa Q2=aa Q3=aa Q4=aa ビルダーで製作しただけの状態だと、上記のような形でメール本文が入力されて返ってきます しかし単純に"Q1=送信者からの回答"としか入力されない為に、せっかくメールで返信を受け取っても設問がわからない為に集計が非常に面倒なものとなってしまいます そこで、例えば以下のような形でメール返信が行えればと思っています Q1名前=aa Q2住所=aa Q3年齢=aa Q4性別=aa このように"任意の文=送信者からの回答"と言う形に変更したいのですが、HTMLのどの部分を変更すればよいのかが判らずに困っています よろしくおねがいします

  • フリーのメルマガCGIで、メール以外の項目があるもの

    フリーで配布しているメルマガCGIについて質問です。 ほとんどのメルマガCGIの登録項目はメールアドレスのみですが、 その他の項目も登録できるメールマガCGIを探しています。 欲しい項目 メールアドレス・性別・氏名・郵便番号・住所・趣味 欲しい機能 自動登録・自動解除 一括メール配信 登録者情報一覧 ログのCSV(エクセルで管理もしたいので) 簡単なカスタマイズならなんとか出来ます。 フリー以外なら5,000円位までならありがたいです。 (sendmailは使用できます。) 色々探したのですが見当たらず、困っています。 情報が有れば教えて下さい! 宜しくお願い致します。

    • 締切済み
    • CGI
  • アンケートCGI(メールフォーム)

    ホームページでアンケート&プレゼントをしようと思っています。 http://form.fc2.com/ これがベストに近いのですが、デザイン上の制約があるのと、毎月変わるプレゼント内容を表示できないなどがあり他のものを探しています。 そこで、設置型のアンケート&メールフォームを教えてください。 必要な機能は以下のものです。 ・もちろん、メールで結果が届く。 ・項目を自由に追加できる。 ・項目の種類を1つずつ順番に選べない場合、順番を入れ替えることが出来る。(fc2と同じ機能) ・項目の修正が簡単に出来る。 また、デザインの修正(html)は自分で出来るので、デザインがいまいちと言う物については全然問題ないです。 良いCGIがあれば紹介をお願いします。

    • 締切済み
    • CGI
  • 自動返信メール機能付きのCGIフォームを探しています。

    以下の機能の付いた自動返信メール機能付きのCGIフォームを探しています。 ・メールアドレスを入力してくれた方に自動返信メールを送る ・メールアドレスを入力しなかった方には自動返信メールを送らない ・自動返信メールの内容をカスタマイズできる ・送信終了画面をカスタマイズできる 細かな注文が多くなってしまいましたが、どうぞ宜しくお願い致します。

    • ベストアンサー
    • CGI
  • フォームの入力チェック

    こんにちは、今回はホームページのワザについて教えて下さい~。 今フォームを作成してアンケートを回答してもらうページを作成中なのですが、そこで躓いてしまいました。 CGIでフォームを作成しているのですが、そのフォームの中の回答で必須項目を作りたいのです。回答していないで送信ボタンを押すとダイヤログが出て「××をご記入ください」のようなメッセージを出す・・・こんなのが理想なのです。 今普通にCGIでフォームだけは完了したのですが、そのチェック機能をjavaでつけても動いてくれないのです(泣)。全くjavaが働かず、普通に送信されてしまいます。 CGIを外してjavaだけでやろうとするとアドレスを予め設定していないという事でエラーになりますし・・・。今は <SCRIPT language="JavaScript"> <!-- function Check(){ if(document.myform.ks.value==""){ alert("必須項目を記入してください。"); return false; } ・ ・ ・ // --> </SCRIPT> </HEAD> <BODY><!--××× CGI Program--> <FORM action=http://www.CGIのテキストまでのパス.txt method=post onSubmit="return Check()"><INPUT type=hidden value=××@×× name=sendto><INPUT type=hidden value=/mail/××.htm name=success><!--ここまで--><A name=TOP></A> としてあります・・・。 すみません!どなたかわかる方!ぜひ教えて下さい、お願いいたします!

    • ベストアンサー
    • HTML

専門家に質問してみよう