こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

複数のデータを1度にsubmitするには?

複数のデータを1度にsubmitするには?
HTML初心者です。

下記の様にして、1つのsbmitで複数のデータを送りたいのですが、
後のデータ1つしか送れません。どうすればできるかお教え下さい。

*あくまで1つのsbmitボタンで同じnameの複数のデータを送りたいのですが。

------------------------------------------------
<form method="get" action="xxx.cgi">
<input type="submit" name="leave" value="退室">
<input type="hidden" name="asyuku" value="101">
<input type="hidden" name="asyuku" value="102">
</form>
------------------------------------------------

よろしくお願いします。

投稿日時 - 2009-01-10 16:14:45

QNo.4619215

困ってます

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(6)

ANo.6

すみません、バグがありました。m(_ _)m
(最初の投稿のでも、新しいウインドウが開くだけで退出処理はできると思いますが・・・)
インラインフレームのnameを以下のように0からの連番にしてください。

<iframe src="about:blank" name="if0" width="1" height="1" border="0"></iframe>
<iframe src="about:blank" name="if1" width="1" height="1" border="0"></iframe>


"if"の部分はJavaScriptの
> f.target='if'+i;
この部分の'if'と同じにすれば、どんな文字列(アルファベットから始まる英数字と_(アンダースコア))でもかまいません。

投稿日時 - 2009-01-11 19:02:01

お礼

色々と教えて頂いてるのに、ソースまで見てもらおうなんて
厚かまし過ぎました。すみませんでした。

アドバイスを下さった皆さん、どうもありがとうございました。

投稿日時 - 2009-01-14 14:59:55

ANo.5

[全て退出]ボタンは<form>不要です。
というか、formに入れると動作しないかも知れません。

ダメ
<form><p><input type="button" value="全て退出"></p></form>
動く
<div><p><input type="button" value="全て退出"></p></div>


退出できない原因が画面が切り替わらない、というだけなら以下のように変更してみてください。

<script>
function smtAll(){
for(var i=0,fms=document.forms,f;f=fms[i];i++){
f.target='if'+i;
f.submit();
}
setTimeout('location.reload()', 1000);
}
</script>

ページを再読込しても退出したことにならないなら、CGIの処理も関係してるかも知れませんので、こちらではわかりません。(CGIアプリケーションの調整が必要です)

JavaScriptエラーが出ているようなら、すみませんが、エラーの内容を投稿してもらえますか?

蛇足かもしれない訂正
> iframeの生成もスクリプトでできますが、あらかじめ長くなるのでHTMLに書き込んでいます。
iframeの生成もスクリプトでできますがスクリプトが長くなるので、あらかじめHTMLに書き込んでいます。

投稿日時 - 2009-01-11 18:50:59

お礼

talooさん、ご返答どうもありがとうございます。

>[全て退出]ボタンは<form>不要です。
>というか、formに入れると動作しないかも知れません。

前述の(formの「退出」ボタンでは、それぞれの部屋から退出できるのですが)
についてのアドバイスだと思うのですが、説明が不足してました。
ここで言う、formの「退出」ボタンとは下記のことです。

<form action="xxx.cgi">
<input type="submit" name="leave" value="退出">
<input type="hidden" name="asyuku" value="101">
</form>

なお、「setTimeout('location.reload()', 1000);」なしでも画面は切り替わるのですが、
付けても付けなくても、退出の画面ではなく相手から退出させられた時の画面が、
<form>~</form>で記述した部屋の分だけそれぞれ表示されます。
(スクリプトエラーなどは表示されません)

私の説明が下手なので、実際のソースを見て頂きたいのですがよろしいでしょうか?

ご面倒をおかけしてすみませんが、お返事をお待ちしています。

投稿日時 - 2009-01-11 22:50:53

ANo.4

> JavaScriptとインラインフレームなどを駆使すれば、CGIスクリプトを変更しなくてもできなくはないですが、
このスクリプトを作ってみました。
iframeの生成もスクリプトでできますが、あらかじめ長くなるのでHTMLに書き込んでいます。
動作未検証です。

<p><input type="button" value="全て退出" onclick="smtAll()"></p>
<script>
function smtAll(){
for(var i=0,fms=document.forms,f;f=fms[i];i++){
f.target='if'+i;
f.submit();
}
}
</script>

<div style="display:none;">
<!-- iframeをフォームの数だけ用意する -->
<iframe src="about:blank" name="if1" width="1" height="1" border="0"></iframe>
<iframe src="about:blank" name="if2" width="1" height="1" border="0"></iframe>
</div>


<form action="xxx.cgi">
<input type="submit" name="leave" value="退出">
<input type="hidden" name="asyuku" value="101">
</form>

<form action="xxx.cgi">
<input type="submit" name="leave" value="退出">
<input type="hidden" name="asyuku" value="102">
</form>

投稿日時 - 2009-01-11 10:08:41

お礼

talooさん、アドバイスだけでなくスクリプトまで作って頂きありがとうございます。

早速試してみたのですが、「全て退出」のボタンを押しても、
全ての部屋からだけでなく、1つの部屋からも退出できません。
(formの「退出」ボタンでは、それぞれの部屋から退出できるのですが)

作って頂いたスクリプトは、何かこちらで書き換える必要があるのでしょうか。
(xxx.cgiの部分は修正していますが)

せっかく親切に色々と教えて頂いているのに、理解不足で申し訳ないです。
実際のソースをお見せした方が良いでしょうか?

投稿日時 - 2009-01-11 12:31:26

ANo.3

> <input type="hidden" name="asyuku" value="101">
> <input type="hidden" name="asyuku" value="102">

この書き方で送れます。
ですが、CGIスクリプトの方が2つのデータを区別する処理になっていないため、
HTMLだけ変えてもCGIスクリプトを変更しなければ、同時に2つ以上の処理をすることはできません。

> No.1お礼
> 表示上はfromの数だけ退出ボタンがあっても良いのですが、
> 代表した1つのボタンで動作させる様な方法はあるのでしょうか?
JavaScriptとインラインフレームなどを駆使すれば、CGIスクリプトを変更しなくてもできなくはないですが、
退出ボタンを部屋の数だけ設置するのが簡単だと思います。

投稿日時 - 2009-01-11 09:41:20

お礼

talooさん、ご回答どうもありがとうございます。

なるほど、書き方自体は間違ってなかったのですね。
CGIスクリプトを変更すれば可能なんですね。でも、
手元にないので無理ですね。。。

書き方自体は間違ってなかったということだけでも知ることができ勉強になりました。

どうもありがとうございました!

投稿日時 - 2009-01-11 12:45:41

ANo.2

例えば処理するプログラムがPHPなら、
<form method="get" action="">
<input type="submit" name="leave" value="退室">
<input type="hidden" name="asyuku[]" value="101"> //nameに[]をつける
<input type="hidden" name="asyuku[]" value="102"> //nameに[]をつける
</form>
とすれば同名のinputが複数あっても配列として送信可能です(たぶん)

nameを変更すると弾かれるというのは使っているCGIの仕様なんでしょうか
処理の方で「こんなname扱って無いよ!」ってことかもしれないっすね

複数のformを代表の一コのボタンで送信はjavascriptあたりで
実現可能だとは思いますが、どうしてもってことが無い限りは
やらない方法だと思いますよ(たぶん面倒だから)

処理するプログラムの内容がわからないと的確な返答は難しいですが
たぶんやりたいことを実現するためのシンプルでスマートなやり方は
いくらでもある、ということは確実に言えそうですよ

投稿日時 - 2009-01-10 19:38:35

お礼

koke29さん、詳しいアドバイスどうもありがとうございます。

PHPですか。名前はよく目にしますが未知の世界です。
とは言うものの、HTMLですら今回初めて触ったくらいなので、
どちらも同じかもしれませんが・・・

早速、PHP用の環境を作って教えて頂いた方法を試してみます。
name="asyuku[]"の[]で弾かれないことを祈りつつ。

丁寧に教えて頂き、本当にどうもありがとうございました!

投稿日時 - 2009-01-10 22:13:48

ANo.1

一種類のnameに大して一つのデータしか存在させる事が出来ません。
ですから、二つのデータを送りたいのであれば
<input type="hidden" name="asyuku1" value="101">
<input type="hidden" name="asyuku2" value="102">
のようにした方がいいです。

投稿日時 - 2009-01-10 16:18:26

お礼

mizutakiさん、どうもありがとうございます。

やはり無理なんですね。ですが、nameを変えるとsubmitボタンを
押しても弾かれてしまうのです。最近、チャットで一度に複数の
部屋から退室している人を見たので気になっていたのです。

nameを変えると動作しないので、下記の様にそれぞれ別のformに
分けるしかないのですね。

------------------------------------------------
<form method="get" action="xxx.cgi">
<input type="submit" name="leave" value="退室">
<input type="hidden" name="asyuku" value="101">
</form>

<form method="get" action="xxx.cgi">
<input type="submit" name="leave" value="退室">
<input type="hidden" name="asyuku" value="102">
</form>
------------------------------------------------

表示上はfromの数だけ退出ボタンがあっても良いのですが、
代表した1つのボタンで動作させる様な方法はあるのでしょうか?

度々の質問で申し訳ないですが、ご存知でしたらお教え下さい。

投稿日時 - 2009-01-10 16:41:32