こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

BASIC認証のメールフォーム設置

初めまして、ウェブ初心者です。
cgiがあまり詳しくないながらも、勉強しながら会員制サイトを作ろうとしております。

HP作成ソフト「シリウス」を使い、問い合わせフォームにKENT WEB様のBASIC認証式パスワード管理 - (http://www.kent-web.com/pwd/pwmgr.html)を組み込ませていただきました。

フォームから送信がされて、IDとパスワードが自動発行される所まで出来ました。
ユーザーにも自動返信が届き、管理者に自動転送もされて、大変便利です。
ところがデフォルトの入力フォームを改造して、フォームのタグを沢山増やしたところ(inputや都道府県を選択できるoptionなど)デフォルト以外の入力はログに保存されません。
どの辺のスクリプトを改造すれば増やしたタグのフォームを保存させるようになりますか?
デフォルトは
登録日時 : !date!
ホスト情報 : !host!
お名前 : !name!
E-mail : !email!
この4つだけです。
以下が↓作成したサイトの「新規会員フォーム」「pwmgr.cgi」「mail.txt」です。
どうぞお力添えがいただければ幸いです。

http://www.pops-dc.com/contact.html
http://www.pops-dc.com/pwmgr.cgi
http://www.pops-dc.com/tmpl/mail.txt

初心者なので下手なスクリプトの改造は危険なようです。


どうかよろしくお願いいたします。

投稿日時 - 2017-09-11 00:42:19

QNo.9373256

すぐに回答ほしいです

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

メールだけ項目が追加されてればよいのであれば、わりと簡単ですよ。

例えば、HTMLの フォームに
御住所 <input type="text" name="address">
みたいにして たとえば addressというフォーム値を追加したのなら
pwmgr.cgiの まさにご指摘されている部分
(略)
> $mbody =~ s/!email!/$in{eml1}/g;
> $mbody =~ s/!id!/$in{id}/g;
> $mbody =~ s/!pw!/$pwd/g;
の下にでも
$mbody =~ s/!address!/$in{address}/g;
を追加すればよいです。

ただし、上記は、雛形ファイル(テンプレート)の!address!という文字を 
ユーザーが<input name="address"> に入力した文字に入れ替えるという命令なので、
これだけでは 機能しなくても、
雛形ファイル(tmpl/mail.txt)にも、それにマッチする記述の追加が必要です。
----
(略)
お名前   : !name!
E-mail   : !email!
御住所   : !address!   <<追加
-----
といった感じです。

それと、現状だと、
・名前が入力漏れしていないか (必須チェック)
・2箇所で入力したメールアドレスが一致するか
・メールアドレスが、 {英数字または_.-}@{英数字_.-}~. {2~6文字の英字} か
・IDは、4~8文字の英数字か(必須チェック兼用)
・お名前の中に改行があれば削除
という入力データのチェック処理をpwmgr.cgiでやっていますます。
追加する項目にも、このような。入力データの必須チェックや
文字長チェックや文字内容のチェックが必要なら、
それもpwmgr.cgiに追加することになります。


それと補足ですが、
http://www.kent-web.com/pubc/saihaifu.html 
に改造や再配布に関する規定が記載されておりますが、
公開されているCGIなら、どこのでも改造して使ってよいということではないので
その配布サイトごとの規定をよく確認されてからにして下さい。

投稿日時 - 2017-09-11 16:56:03

補足

Superside0様
ご返事が遅くなりました。
昨日あれからpwmgr.cgiの修正、tepl/mail.txtの修正をしました(TeraPad使用)
ffftpで転送してからテストでお問い合わせフォームを送信したところエラーメッセージな出ました。

Software error:
Can't locate object method "medical" via package "name" (perhaps you forgot to load "name"?) at pwmgr.cgi line 114.
For help, please send mail to the webmaster (info@coreserver.jp), giving this error message and the time and date of the error.


ソフトウェアエラー"name"を何かロードするのを忘れてる?みたいな文章です。

何度も書き換えたcgiとtxtを見直しましたがご指示通りです。
なにかこれ以外にも書き換えるところがあるのでしょうか?
サーバー上のpribate/.htpasswdとpribate/member
を確認すると「id」「パスワード」「mail」はちゃんと記録されています。
お手数をおかけしますが、もう少しご教授をお願いできないでしょうか?
解決出来たらご指示通りの「改造、再配布の規定」通りにリンクを貼る様にします。
ゴールの兆しが見えてきてるようで、、頑張ります!!

投稿日時 - 2017-09-12 19:56:31

お礼

Superside0様
最初はテスト送信でSoftwareerrorが出ましたが、その後name属性に半角のスペースがあることでエラーを起こすことを知り解決しました!!
cgiを中途半端な知識で使ってはいけませんね。もっと勉強しないといけないと反省してります。

それと、ご指示通りの「改造、再配布の規定」通りにリンクを貼る様にします。
本当にありがとうございました!!

投稿日時 - 2017-09-13 01:05:05

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(2)

ANo.1

CGIというのは、
ブラウザからフォームデータを送信

サーバー側のCGIで各nameのvalueを受けとって処理

という仕組みなので、HTMLのフォームに inputタグを足しからといって
自動的にCGI側が 機能拡張される訳ではありません。

一部に、HTMLのhiddenタグに予約を入れるだけで項目追加に対応するような
項目追加が簡単にできるようなCGIiもありますが、
本CGIをダウンロードしてソース確認してみましたが、
少なくともそのような仕組みは実装されていませんでした。

よって、入力する項目を追加したいのなら
pwmnt..cgiファイルを改造するしかありません。
また、完了メールにだけでなく、ユーザー管理ファイルにも
追加項目を記録しておきたいなら
ユーザー管理ファイルを使う管理用CGIの拡張も必要になります。

投稿日時 - 2017-09-11 13:47:55

補足

superside様
回答とても嬉しいです!
ありがとうございます。
もう少しご教授願いますでしょうか?
cgi初心者ですがココまで構築できたので、あともう少しsuperside様の力を借りれないでしょうか?

hiddenタグとはブラウザ上では見えないのですよね?
どう扱うのか後ほど勉強してみます。

では、pwmgr.cgiこちらの改造は難しいでしょうか?

cgiの中身ですが、途中のこの辺を改造かな?と思ってますがあってますか?
この「#文字置き換え」の部分に自分が足したフォームタグを追加すればいいのかと、かなりの素人判断ですが、、
回答願います。

     省略

# メール本文読み込み
open(IN,"$cf{tmpldir}/mail.txt") or &error("open err: mail.txt");
my $mbody = join('', <IN>);
close(IN);

# 文字置き換え
$mbody =~ s/!name!/$in{name}/g;
$mbody =~ s/!date!/$date/g;
$mbody =~ s/!host!/$host/g;
$mbody =~ s/!email!/$in{eml1}/g;
$mbody =~ s/!id!/$in{id}/g;
$mbody =~ s/!pw!/$pwd/g;


     省略

管理ファイルの方にログ保存されなくてもメールに情報が全て届けばOKです。
宜しくお願いいたします。

投稿日時 - 2017-09-11 15:43:15

あなたにオススメの質問