フォームから、テキストボックスと、プルダウンを使用してデータを取得する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.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;
}
以下省略
No.2
- 回答日時:
私も時間が有りませんので貴方の記述したprogramを解読していませんが要はformで入力された内容で必須項目を入力されていない場合は入力されていない必須項目のみのfieldを表示して入力を催促すると言う事ですね!!
その場合のフローチャートは
全てのformを表示する。
↓
入力チェック*1
↓
入力されていない項目を表示
↓
*1に戻る
というパターンになりますよね!!
ここで、入力されていない項目を表示の所で入力済みの項目をhiddenで隠すと言う事ですが簡単だと思います。
rokujiroさん
返事がおくれましてすみません。。。
コメントどうもありがとうございます。
そうなんですよ~
rokujiroさんのおっしゃるとうりのことがしたいのです!
よろしかったら、scriptを教えていただけないでしょうか?
よろしくお願い致します。
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さんのご説明大変参考になりました。
教えていただいた方法を元に
作っていこうとおもいます。
あと最後に聞きたいのですが、
上記の場合の、チェックボックスの場合だと
どうなるんでしょうか?
よろしければ教えていただけないでしょうか?
自分でも調べてはいるのですが、
どうもたどりつけないのです。
なんども申し訳ないですが、
お願い致します。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- JavaScript Javascript初心者|jQueryの.val()で値を取得し複数の要素を連結させる方法知りたい 2 2022/06/02 12:06
- JavaScript 入力フォームの javascript で メールアドレスの正規チェックをを行い、ボタンをクリックして 2 2022/04/27 16:06
- JavaScript セレクトボックスを2つ選択してメッセージなどを表示するには。~運賃検索プログラムを完成させたい~ 1 2022/07/22 11:10
- JavaScript セレクトボックスで配列を呼び出したい。 1 2022/07/08 20:14
- PHP PHPでユーザー情報を入力して簡易ログイン機能をつくってみたのですが 1 2023/05/29 08:51
- JavaScript sessionStorageを調べています。 1 2023/06/20 12:41
- PHP PHP MySql 画像を取得 1 2022/06/04 14:05
- JavaScript 以前の質問だと、どの条件でも配列が表示されてしまいます。 1 2022/07/09 11:40
- PHP ($_POST['email']??"", ・・・の ??"" の""の意味ですが 2 2022/07/30 06:38
- PHP PHPで画像の渡しが上手く行きません。 1 2023/02/02 09:39
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
別formのhidden項目を自form値...
-
チェックボックスの返す値
-
wordの数式について 定積分を書...
-
ラジオボタンが両方とも選択で...
-
INPUT TYPE
-
htmlからパラメータで、cgiに渡...
-
VB初心者。小数点以下の表示で...
-
プルダウンメニューでValue値を...
-
perlにおけるセッションIDについて
-
<select>タグの幅設定
-
プログラミングについての質問...
-
チェックボックスとセレクトボ...
-
メールフォームのプルダウンメ...
-
FORMのselectの選択肢を最初か...
-
JEditorPaneでwebページを表示
-
「value」に2つの値をセットす...
-
VB.net データーグリッドビュー...
-
テキストBOXの縦幅を変えたい
-
入力規則をまとめて定義
-
硬質カードケースについて 縦向...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
チェックボックスの返す値
-
別formのhidden項目を自form値...
-
チェックボックスで選択した内...
-
Error: No Recipient というエ...
-
CGIでチェックボックスを使...
-
hiddenで送ったデータの取り出し方
-
チェックボックスでのvalue値の...
-
アンケートフォームで前のペー...
-
python subprocessに関する質問
-
CGIで得た内容をHTMlページに代入
-
複数ボタンのvalueを送れない
-
CGIフォームから飛ばすメールで...
-
CGI→CGI変数の引き継ぎは...
-
FC2 掲示版のカスタマイズの仕...
-
心理テストページをCGIで作りた...
-
1つのformに2つのsubmitボタン
-
”送信ボタン” ”クリアボタン”...
-
フォームのvalueを変更する方法
-
フォームの入力内容の後ろに文...
-
アンケートの質問を複数にしたい
おすすめ情報