プロが教える店舗&オフィスのセキュリティ対策術

会社にてあるイベントの申込みページを作成している、ほぼ初心者です。
ショッピングカートへとフォームから飛ばしたいのですが、プログラムがよくわからず行き詰っています。
以前の回答にもあったhttp://oshiete.goo.ne.jp/qa/3418439.htmlを真似て作ってみましたが、
最初のものだけをピックアップして実行されてしまいます
また、本来はチェックボックスにチェックが入っているもののみを送信したいんです

</style>
<script language="javascript"><!--
function send() {
document.a11.submit();
document.b11.submit();




}
//--></script>

これをヘッダー内に書き込み
<form name="a11" action="/products/detail.php" method="post" target="_blank">
<input type="hidden" name="mode" value="cart" />
<input type="hidden" name="product_id" value="137" />
<input type="hidden" name="product_class_id" value="634" />
<input type="checkbox" name="quantity" value="1" /><br />
</form>

<form name="b11" action="/products/detail.php" method="post" target="_blank">
<input type="hidden" name="mode" value="cart" />
<input type="hidden" name="product_id" value="140" />
<input type="hidden" name="product_class_id" value="637" />
<input type="checkbox" name="quantity" value="1" /><br />
</form>







というフォームが数十個あります。
数十個あるうちのチェックボックスにチェックが入っているもののみを
送信したいのですが、プログラムの組み方をご教授願えませんでしょうか?

順番としては

(1)チェックボックスにチェックが入っているものを認識
(2)チェックボックスにチェックが入っているものを順に送信

という感じなのかなと考えていろいろ調べてみたのですが、
わからない状態です

ほぼ初心者なので、お手数ですが、サンプル記述などもいただけると
大変たすかります

どうぞよろしくお願いいたします

A 回答 (4件)

>どうやってnameの中に書かれているものを読み取らせるのかすらわかっていないんです。

。。
 それは、フォームを別々に分けたって同じ事です。

このあたりになるとPHPよりPerlを使ったCGIのほうが資料も多いでしょう。

 フォームのデータは、[name]=[value]のペアで送られてきます、通常はハッシュ(連想配列)に入れますが、そうすると同名のものがあれば上書きされてしまいます。
 そのため、ハッシュのハッシュなど二次元三次元のデータを作らなければなりません。
 このあたりは、Perlのマニュアル(らくだ本)をお読みください。
 ⇒O'Reilly Japan - プログラミングPerl 第3版 VOLUME 1( http://www.oreilly.co.jp/books/4873110963/ )
 ⇒O'Reilly Japan - プログラミングPerl 第3版 VOLUME 2( http://www.oreilly.co.jp/books/4873110971/ )
 ⇒O'Reilly Japan - Perl クイックリファレンス( http://www.oreilly.co.jp/books/4900900729/ )
    • good
    • 0
この回答へのお礼

丁寧な回答ありがとうございます

なるほどですね
思っていたよりも、かなり難しく、プロの方にお任せしないといけないかもしれませんね

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

お礼日時:2013/06/24 11:50

そんなの無理です。

javascriptに頼るとjavascriptが動作しない端末では動作しない。
単純にひとつのフォームで送信すればよいです。
 同名なものがありますから、ハッシュで処理すると後出のもので上書きされますから、ハッシュのハッシュに代入するのが分かりやすいでしょう。

 なお、本来は
<input type="checkbox" name="quantity137_634" value="1" />
<input type="checkbox" name="quantity138_640" value="1" />
<input type="checkbox" name="quantity140_635" value="1" />
で行うべきでしょう。
    • good
    • 1
この回答へのお礼

回答ありがとうございます
無理な相談だったんですね。。。無知ですみません

記載していただいたもので送信した場合、どうやってnameの中に書かれているものを読み取らせるのかすらわかっていないんです。。。

模索するしかないですね

どうもありがとうございます

お礼日時:2013/06/23 16:20

フォームを送信した時のブラウザの通常の処理は、サーバー上のphp等から送られるページに表示が遷移します。



>(2)チェックボックスにチェックが入っているものを順に送信
順に送信してページ遷移はしないというのであれば、ajaxで送信だけを行えば可能でしょう。方法は検索してみてください。

送信後、ページ遷移を行いたいのであれば、チェックの入ったデータをまとめて(一度に)送信すれば可能ですが、サーバー側のプログラム(php等)がそれに対応できている必要があります。
(一度に複数のデータを受け取れるようになっていますか?)

簡単に実現するのであれば、全体をひとつのフォームにしてしまって、全データを一括して送信し、サーバー側で有効なデータを選別することでしょう。
サーバー側のプログラムの変更が必要ですが、スクリプトでやろうとなさっていることとほぼ同じ処理をサーバーサイドで行うだけとも言えます。

また、データ送信にスクリプトを介すると、スクリプトが使えない環境からは予定した送信がなされないことになりますが、そのようなユーザーは無視することになったり、予定とは異なる処理がされたりすることになる可能性がありそうです。
    • good
    • 0
この回答へのお礼

回答ありがとうございました
なかなか思ったようには出来ないもんですね。。。
といっても自分の知識不足が原因なのでどうしようもできないですが、、、

一括送信をしてサーバー側でデータを選別という方法を作れればそれがよさそうですね

模索してみます

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

お礼日時:2013/06/23 16:18

 うむ、残念じゃが、複数の「フォーム」を1つのリクエストにする方法はないんじゃよ。



 また、かりにJavaScriptで数十個のフォームの内容を調べ、一つの大きなフォームを作ってPOSTするという方法を取ったとしても、フォームの受け取り先(具体的には/products/detail.php)が複数のデータのPOSTに対応していないと最終的に動作はせぬ。

 つまり、やるべき事は、function sendの中身を、数十個のフォームをそれぞれsubmit()するのではなく、POST用の大フォームを動的に作成し(動的じゃなくてもかまわないけど)、数十個の画面上のフォームを順番に舐めていき、チェックボックスにチェックが入っている場合は先ほどの大フォームの中に動的にhiddenでINPUTを追加していき、最後には大フォームを一気に/products/detail.phpにどーんって感じに作って、かつ/products/detail.phpは複数のmodeやprodoct_idやproduct_class_idやquantityを受け取るような作りにしておくことだ。

 サンプル記述については、あなたがいま作っているシステムがどんなものなのかわからないのでなんとも言えないが、動的にフォームタグやフォームタグの中にhiddenのINPUTを作るのはdocument.createElement(name);やappendChild(element);などをキーワードに情報を集めてみていただきたい。JavaScriptの話だったらjQueryを使うという手もあるし。
    • good
    • 0
この回答へのお礼

回答ありがとうございました
JavaScriptでは難しいということなんですね。。。
きちんと知識があればいいのですが、急に投げられてしまったので調べながらやっています

参加したいものにチェックをいれてもらってまとめて申込みができたらいいなと仕組みを構築していました
一度に送信して、それをPHP側で認識させられれば間違いが起きないんですね

別の方法を模索してみるしかないですね

ありがとうございました

お礼日時:2013/06/23 16:16

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!