フォームから、テキストボックスと、プルダウンを使用してデータを取得するcgiに、
チェックボックスを加えようと思うのですが、うまくいきません。
どなたかご教授お願い致します。
入力が適切ならば、hiddenで書き込み
不適切ならばフォームを表示。
テキスト入力の場合
# email
if ($e_email){
$t_email = "<input type=\"text\" size=\"20\"";
}else{
$t_email = "$email<input type=\"hidden\"";
}
$t_email .= "name=\"email\" value=\"$email\">\n";
プルダウンの場合
# way
if ($e_way){
$t_way = "<select size=\"1\" name=\"way\">\n";
$t_way .= "<option selected>連絡方法を選択して下さい\n";
$t_way .= "<option>E-mail\n";
$t_way .= "<option>電話\n";
$t_way .= "</select>\n";
}else{
$t_way = "$way<input type=\"hidden\" name=\"way\" value=\"$way\">\n";
チェックボックスでの分岐、value属性のある場合はどうなるのでしょうか?
No.3ベストアンサー
- 回答日時:
それでは、簡単に要点となる部分のscriptを記述したいと思いますので参考にしてscriptを作成してみて下さい。
1.最初の入力form(htmlでOK!!)
<html><body>
<form method="POST" action="test.cgi">
<hr>
お名前を入力して下さい。<br>
<input type="text" name="name" size="20" value="">
メールアドレスを入力して下さい。<br>
<input type="text" name="mail" size="20" value="">
<hr>
<input type="submit" value="送信" name="b"></center>
</form>
</body></html>
---------------------------------------
2.入力有無の確認
if($in{name} eq ''){
¬input;
}
if($in{mail} eq ''){
¬input;
}
OK処理......
---------------------------------------
3.error処理
sub notinput{
print<<"END"
<html><body>
<form method="POST" action="test.cgi">
<hr>
END
if($in{name} eq ''){
print <<"END";
お名前を入力して下さい。<br>
<input type="text" name="name" size="20" value="">
END
}
else{
print <<"END";
<input type="hidden" name="name" size="20" value="$in{name}">
END
}
if($in{name} eq ''){
print <<"END";
メールアドレスを入力して下さい。<br>
<input type="text" name="mail" size="20" value="">
END
}
else{
print <<"END";
<input type="hidden" name="mail" size="20" value="$in{mail}">
END
}
<hr>
<input type="submit" value="送信" name="b"></center>
</form>
</body></html>
END
}
---------------------------------------
っと、こうなります。
pulldown等もhiddenの記述は同じでvalue内に入力項目を叩き込めばOKです。
もう一つの親切な方法としてはhiddenを使用せずにtext内のvalueに入力内容を叩き込んで一応表示して入力エラーの項目に*印等を付加し入力の再要求をするって手も有ります。
例)
if($in{name} eq ''){
print <<"END";
*メールアドレスを入力して下さい。<br>
<input type="text" name="mail" size="20" value="$in{mail}">
END
}
else{
print <<"END";
メールアドレス<br>
<input type="text" name="mail" size="20" value="$in{mail}">
END
}
自分に有った方法を選んで親切なscriptを作りましょう。
rokujiroさん
返事がおくれてすいませんでした。
rokujiroさんのご説明大変参考になりました。
教えていただいた方法を元に
作っていこうとおもいます。
あと最後に聞きたいのですが、
上記の場合の、チェックボックスの場合だと
どうなるんでしょうか?
よろしければ教えていただけないでしょうか?
自分でも調べてはいるのですが、
どうもたどりつけないのです。
なんども申し訳ないですが、
お願い致します。
No.2
- 回答日時:
私も時間が有りませんので貴方の記述したprogramを解読していませんが要はformで入力された内容で必須項目を入力されていない場合は入力されていない必須項目のみのfieldを表示して入力を催促すると言う事ですね!!
その場合のフローチャートは
全てのformを表示する。
↓
入力チェック*1
↓
入力されていない項目を表示
↓
*1に戻る
というパターンになりますよね!!
ここで、入力されていない項目を表示の所で入力済みの項目をhiddenで隠すと言う事ですが簡単だと思います。
rokujiroさん
返事がおくれましてすみません。。。
コメントどうもありがとうございます。
そうなんですよ~
rokujiroさんのおっしゃるとうりのことがしたいのです!
よろしかったら、scriptを教えていただけないでしょうか?
よろしくお願い致します。
No.1
- 回答日時:
すこし、この質問の内容では何が聞きたいのか分かりませんのでもう少し詳しくお願いします。
まず、フォーム記述に問題が有ると思います。
テキスト入力の場合
if ($e_email){
$t_email = "<input type=\"text\" size=\"20\"";
}else{
$t_email = "$email<input type=\"hidden\"";
}
---------------------------------↓
・上記の物は最後の>が無いですしnameの指定が有りません!!
通常は(私式にメールの記入が有るかって判断で....)
if($e_mail eq ''){
print <<"END";
メールアドレスを入力してください。<br>
<input type="text" name="in_mail" size="20" value="$in_mail">
END
}
else{
print <<"END";
<input type="hidden" name="in_mail" value="$in_mail">
END
}
--------------------------------------↑
$t_email .= "name=\"email\" value=\"$email\">\n";
--------------------------------------↓
この最後の一行も意味不明です。
この最後の一行で今までのif分の作業が意味無しになると思います。
--------------------------------------↑
プルダウンの場合
# way
if ($e_way){
$t_way = "<select size=\"1\" name=\"way\">\n";
$t_way .= "<option selected>連絡方法を選択して下さい\n";
$t_way .= "<option>E-mail\n";
$t_way .= "<option>電話\n";
$t_way .= "</select>\n";
}else{
$t_way = "$way<input type=\"hidden\" name=\"way\" value=\"$way\">\n";
--------------------------------------↓
またまた私的に
if ($e_way eq ''){
print <<"END";
連絡方法を選択してください。<br>
<select name="way" size="1">
<option selected value="e-mail">e-mail</option>
<option value="tel">電話</option>
</select>
END
}
else{
pritnt <<"END";
<input type="hidden" name="way" value="$e_way">
END
}
--------------------------------------↑
簡単にですが以上の様になると思います。
以上の点を踏まえて質問宜しくお願いします。
この回答への補足
rokujiroさん
回答ありがとうございます。
たしかに、説明不足でした。すみません。
フォームメールで、ログを蓄積するのと、
空白の場合、再度フォームを表示させ入力をうながすのですが、
今回追加しようとしている、チェックボックスの部分は必須項目ではないので、単に入力されたものだけを、
hidden属性にして、送ろうととおもうのですがうまくいかないのです。
素人考えで、sub fixTagsの部分に問題があるのかとおもったりもするのですが、、、
ご教授お願いします。
form.html部分
<form method="POST" action="http://www.777.co.jp/cgi-bin/form.cgi">
<INPUT TYPE="checkbox" name="low" value="low">
formaleart.html部分
<form method="POST" action="http://www.777.co.jp/cgi-bin/form.cgi">
<CGI:low>
form.cgi部分
use strict;
use CGI;
require 'jcode.pl';
-------------
省略
-------------
my $template= '../htdocs/0/alertform.html';
my @html = ();
my $location = 'http://www.777.co.jp/0/formthanks.html';
my $query= new CGI;
my $low= $query->param('low');
my $errNum= 0;
my $errMsg= '';
my $e_low= 0;
my $t_low= '';
$errNum = chkFormInput();
fixTags();
open HTML, $template or err("$templateが開けません");
@html = <HTML>;
close HTML;
if ($errNum > 0){
$errMsg =~ s/^,//;
$errMsg = "<font color=\"red\">$errMsg (計$errNumヶ所)";
$errMsg .= "に未入力、又は不適当な入力があります。<br></font>\n";
}elsif (sendmail() && stockData()){
print "Location: $location\n\n";
}
replaceTags();
showHTML();
exit;
sub fixTags
{
# low
else{
$t_ low = "$ low<input type=\"hidden\" name=\" low\" value=\"$ low\">\n";
}
return 1;
}
sub replaceTags
{
foreach (@html){
s/<CGI:low>/$t_low/i;
if ($errNum > 0){
s/<CGI:submit>/<input type="submit" value="送信">/i;
}else{
s/<CGI:submit>//i;
}
}
return 1;
}
sub showHTML
{
print $query->header;
foreach (@html){ print; }
}
sub sendmail {
my $line = "X-Mailer: U got Mail\n";
$line .= "ロウ\t$low\n";
$line = jcode::jis($line);
open MAIL,'>mail.txt' or err('mail.txtが開けません。');
open MAIL,"| $sendmail -t" or err("$sendmailが開けません。");
print MAIL $line;
close MAIL;
return 1;
}
以下省略
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・【大喜利】【投稿~11/12】 急に朝起こしてきた母親に言われた一言とは?
- ・好きな和訳タイトルを教えてください
- ・うちのカレーにはこれが入ってる!って食材ありますか?
- ・好きな「お肉」は?
- ・あなたは何にトキメキますか?
- ・おすすめのモーニング・朝食メニューを教えて!
- ・「覚え間違い」を教えてください!
- ・とっておきの手土産を教えて
- ・「平成」を感じるもの
- ・秘密基地、どこに作った?
- ・【お題】NEW演歌
- ・カンパ〜イ!←最初の1杯目、なに頼む?
- ・一回も披露したことのない豆知識
- ・これ何て呼びますか
- ・チョコミントアイス
- ・初めて自分の家と他人の家が違う、と意識した時
- ・「これはヤバかったな」という遅刻エピソード
- ・これ何て呼びますか Part2
- ・許せない心理テスト
- ・この人頭いいなと思ったエピソード
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・あなたの習慣について教えてください!!
- ・ハマっている「お菓子」を教えて!
- ・高校三年生の合唱祭で何を歌いましたか?
- ・【大喜利】【投稿~11/1】 存在しそうで存在しないモノマネ芸人の名前を教えてください
- ・好きなおでんの具材ドラフト会議しましょう
- ・餃子を食べるとき、何をつけますか?
- ・あなたの「必」の書き順を教えてください
- ・ギリギリ行けるお一人様のライン
- ・10代と話して驚いたこと
- ・家の中でのこだわりスペースはどこですか?
- ・つい集めてしまうものはなんですか?
- ・自分のセンスや笑いの好みに影響を受けた作品を教えて
- ・【お題】引っかけ問題(締め切り10月27日(日)23時)
- ・大人になっても苦手な食べ物、ありますか?
- ・14歳の自分に衝撃の事実を告げてください
- ・架空の映画のネタバレレビュー
- ・「お昼の放送」の思い出
- ・昨日見た夢を教えて下さい
- ・ちょっと先の未来クイズ第4問
- ・【大喜利】【投稿~10/21(月)】買ったばかりの自転車を分解してひと言
- ・メモのコツを教えてください!
- ・CDの保有枚数を教えてください
- ・ホテルを選ぶとき、これだけは譲れない条件TOP3は?
- ・家・車以外で、人生で一番奮発した買い物
- ・人生最悪の忘れ物
- ・【コナン30周年】嘘でしょ!?と思った○○周年を教えて【ハルヒ20周年】
- ・あなたの習慣について教えてください!!
- ・都道府県穴埋めゲーム
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
チェックボックスの返す値
-
CGIでチェックボックスを使...
-
CGIで得た内容をHTMlページに代入
-
ボタンの処理
-
チェックボックスで選択した内...
-
チェックボックスでのvalue値の...
-
CGIで書き出したJavaScriptの動...
-
wordの数式について 定積分を書...
-
ラジオボタンが両方とも選択で...
-
「value」に2つの値をセットす...
-
select値をhiddenのvalueに渡し...
-
VB.net データーグリッドビュー...
-
[HTML]プルダウンメニューの横...
-
プログラミングについての質問...
-
表示を一覧表形式にしたいので...
-
proftpdで困ってます。
-
perlにおけるセッションIDについて
-
cgi-libを使って変数値渡しをし...
-
ブックマークからのアクセスを...
-
IIS の@INC ERRORについて教えて
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
チェックボックスの返す値
-
Error: No Recipient というエ...
-
別formのhidden項目を自form値...
-
CGIでチェックボックスを使...
-
cgiにSSLをつけたい
-
1つのformに2つのsubmitボタン
-
掲示板の文字色指定について
-
アンケートフォームがうまく動...
-
「利用規約の同意」チェックボ...
-
hiddenで送ったデータの取り出し方
-
cgi(サイト内検索?)について。
-
チェックボックスでのvalue値の...
-
VBAでWEBもっと見るを押して...
-
再度:cgiから別のcgiへ...
-
メール送信フォームで。
-
チェックボックスで選択した内...
-
テキストエリアのデータを隠し...
-
クリップボードに記憶した文字...
-
FC2 掲示版のカスタマイズの仕...
-
アンケートで質問を複数ページ...
おすすめ情報