人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

JavaScript, WEBフォーム、cgiに関して、http://q.hatena.ne.jp/1190095707 についての再質問です
この質問でのMookさんの作ってくれたサンプルソースですと、cgi側にcity1,city2,city3の値(VALUE)が渡らないのですが、どこを調べればよいでしょうか? cgi(perl)側で、city1,2,3にはnullが入っているのは確認できました。

●質問者: SlowLife
●カテゴリ:コンピュータ ウェブ制作
✍キーワード:CGI JavaScript Kさん Perl Web
○ 状態 :終了
└ 回答数 : 2/2件

▽最新の回答へ

1 ● Mook
●35ポイント

今回のデータは POST 渡ししているので、CGI側もそれを受け取るように書く必要がありますが、その手順は大丈夫でしょうか。

フォームデータの送信


POST を読み込む場合には、例えば下記のような処理をする必要があります。

read(STDIN, $buf, $ENV{'CONTENT_LENGTH'});
undef(%in);
foreach ( split(/&/, $buf) ) {
 local($key, $val) = split(/=/);
 $val =~ tr/+/ /;
 $val =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("H2", $1)/eg;

 # S-JIS変換 : jcode.pl を利用したコード変換例
 &jcode'convert(*val, "sjis", "", "z");

 $in{$key} .= "\0" if (defined($in{$key}));
 $in{$key} .= $val;
}
$city1 = $in{'city1'};
print "city1 = " . $city1;

CGIpm を使用すれば、下記のように簡単に書くことができます。

use CGI;
$q = new CGI;

@pref = ( $q->param('pref1'), $q->param('pref2'), $q->param('pref3') );
@city = ( $q->param('city1'), $q->param('city2'), $q->param('city3') );

print "city1 = " . $city[0];

Perlで作るCGI講座 - CGI.pm を使ってみよう

◎質問者からの返答

ご本人からのご回答ありがとうございます。

POSTで読んでいます

例文でのPref1,2,3はきちんと渡されていますので、大丈夫だと思います ただ、$in('pref1')も文字列でなく、数値が入ってます


2 ● Mook
●35ポイント ベストアンサー

失礼しました。

基本的な取得方法はご存知だったようですね。


コメントが有効になっていなかったので、再度の回答で失礼します。

原因は Web 側の Value がそのように設定されているためです。


Select の Option 部分を下記のように、

<OPTION VALUE="東京都">東京都
<OPTION VALUE="大阪府">大阪府
<OPTION VALUE="愛知県">愛知県
<OPTION VALUE="千葉県">千葉県

JavaScript の関数部分を下記のように

function funcMain(num, b) {
 var ePref = document.getElementsByName( "pref" + num )[0];
 var eCity = document.getElementsByName( "city" + num )[0];
 if (ePref.selectedIndex == 0) {
 eCity.length = 1;
 eCity.selectedIndex = 0;
 } else {
 if (b) {
 eCity.length = 1;
 eCity.selectedIndex = 0;
 }
 var city = cities[ePref.selectedIndex - 1];
 eCity.length = city.length + 1;
 for (var i = 0; i < city.length; i++) {
 eCity.options[i + 1].value = city[i];
 eCity.options[i + 1].text = city[i];
 }
 }
}

修正してみてください。

http://homepage3.nifty.com/aya_js/js2/js216.htm

◎質問者からの返答

たびたびのご回答、本当にありがとうございます。

今度こそできました。 本当に初歩的なミスがひとつ、変数名の打ち間違いがcgi側でありました

お手数をおかけいたしました

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ