この質問でのMookさんの作ってくれたサンプルソースですと、cgi側にcity1,city2,city3の値(VALUE)が渡らないのですが、どこを調べればよいでしょうか? cgi(perl)側で、city1,2,3にはnullが入っているのは確認できました。
失礼しました。
基本的な取得方法はご存知だったようですね。
コメントが有効になっていなかったので、再度の回答で失礼します。
原因は 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];
}
}
}
修正してみてください。
今回のデータは 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];
ご本人からのご回答ありがとうございます。
POSTで読んでいます
例文でのPref1,2,3はきちんと渡されていますので、大丈夫だと思います ただ、$in('pref1')も文字列でなく、数値が入ってます
失礼しました。
基本的な取得方法はご存知だったようですね。
コメントが有効になっていなかったので、再度の回答で失礼します。
原因は 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];
}
}
}
修正してみてください。
たびたびのご回答、本当にありがとうございます。
今度こそできました。 本当に初歩的なミスがひとつ、変数名の打ち間違いがcgi側でありました
お手数をおかけいたしました
たびたびのご回答、本当にありがとうございます。
今度こそできました。 本当に初歩的なミスがひとつ、変数名の打ち間違いがcgi側でありました
お手数をおかけいたしました