JavaScript, WEBフォーム、cgiに関して、http://q.hatena.ne.jp/1190095707 についての再質問です

この質問でのMookさんの作ってくれたサンプルソースですと、cgi側にcity1,city2,city3の値(VALUE)が渡らないのですが、どこを調べればよいでしょうか? cgi(perl)側で、city1,2,3にはnullが入っているのは確認できました。

回答の条件
  • URL必須
  • 1人10回まで
  • 登録:2007/10/02 18:07:03
  • 終了:2007/10/02 22:18:10

ベストアンサー

id:Mook No.2

Mook回答回数1312ベストアンサー獲得回数3912007/10/02 21:40:54

ポイント35pt

失礼しました。

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


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

原因は 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

id:jcf01700

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

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

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

2007/10/02 22:17:36

その他の回答(1件)

id:Mook No.1

Mook回答回数1312ベストアンサー獲得回数3912007/10/02 19:12:38

ポイント35pt

今回のデータは 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 を使ってみよう

id:jcf01700

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

POSTで読んでいます

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

2007/10/02 20:44:46
id:Mook No.2

Mook回答回数1312ベストアンサー獲得回数3912007/10/02 21:40:54ここでベストアンサー

ポイント35pt

失礼しました。

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


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

原因は 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

id:jcf01700

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

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

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

2007/10/02 22:17:36
  • id:Mook
    イルカ賞ありがとうございました。

    無事動作したようで何よりです。

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません