- ベストアンサー
DBから複数選択した買い物リストを送信 | php初心者の質問
- php初心者の質問です。DBから読み込んだ買い物リストを複数選択で送信する方法を教えてください。
- 商品リストのデータをmysql_fetch_arrayで取り出し、商品一覧として表示するところまではできました。しかし、複数選択可で数量も入力できるようにすると、どうコーディングすればいいかわかりません。
- 商品選択ボタン(checkbox)と数量入力の枠を作り、一度に買い物カゴに送信したいです。質問に対するアドバイスや関数の使用方法について教えてください。
- みんなの回答 (5)
- 専門家の回答
質問者が選んだベストアンサー
#1を反映するならこんな感じ <?php $sql = "select product_id,product_cd,name,price from products "; $result = mysql_query($sql) ; while($row = mysql_fetch_array($result)){ print "<tr>\n"; print "<th><input type=\"checkbox\" name=\"check[]\" value=\"".$row["product_id"]."\"></th>\n"; print "<td>".htmlspecialchars($row["product_cd"])."</td>\n"; print "<td>".htmlspecialchars($row["name"])."</td>\n"; print "<td>¥".number_format($row["price"])."</td>\n"; print "<td><input type=\"text\" name=\"goods[".$row["product_id"]."]\"></td>\n"; print "</tr>\n"; }
その他の回答 (4)
- yambejp
- ベストアンサー率51% (3827/7415)
まずisset($_REQUEST["check"]) はGETやPOSTでcheckというパラメータが 送られてきているかチェックしています。 is_array($_REQUEST["check"])は、そのcheckというパラメータが配列なのか どうかチェックしています。 それを三項演算子(a=x?y:z)で条件にあえば$check変数に$_REQUEST["check"]を返し、 あわなければ空の配列を返しています。 あえてこれをif文をつかって書くとするとこんな感じでしょうか $check=array(); if(isset($_REQUEST["check"]){ if(is_array($_REQUEST["check"])){ $check=$_REQUEST["check"]; } }
お礼
本当にご親切にご回答いただいて感謝に耐えません。 最終的に自分が希望している形としては、 NO.1の回答へのお礼にしたように、私が作成したコードに 教えていただいたものをうまく当てはめる事です。 (複雑になりすぎて、自分でもどうしてよいかわかりません。) よろしければそこも教えていただければ本当に助かります。 (そうなると、やはり簡単にはかないものでしょうか?) よろしくお願いします。
- yambejp
- ベストアンサー率51% (3827/7415)
たとえばこんな感じでチェックボックスと数量の組み合わせで判断する <form> <div><input type="checkbox" name="check[]" value="1">goods 1<input type="text" name="goods[1]" value="5"></div> <div><input type="checkbox" name="check[]" value="2">goods 2<input type="text" name="goods[2]" value="10"></div> <div><input type="checkbox" name="check[]" value="3">goods 3<input type="text" name="goods[3]" value="30"></div> <div><input type="submit" value="go"></div> </form> <?PHP $check=(isset($_REQUEST["check"]) and is_array($_REQUEST["check"]))?$_REQUEST["check"]:array(); $goods=(isset($_REQUEST["goods"]) and is_array($_REQUEST["goods"]))?$_REQUEST["goods"]:array(); $flag=true; foreach($check as $val){ if($goods[$val]>0){ print "id=".$val."の商品が".$goods[$val]."個<br>\n"; $flag=false; } } if($flag) print "なにも選択されていない"; ?> あとはjavascriptなどでテキストボックスのdisabledを制御すると ユーザビリティがあがります
お礼
ご丁寧な回答ありがとうございます。 ヒントをもとにゆっくり紐解いてみます。 >$check=(isset($_REQUEST["check"]) and >is_array($_REQUEST["check"]))?$_REQUEST["check"]:array(); ↑ 上記はどう解釈すればよいかわかりませんでした。 (何となく想像はつくのですが、間違えるといけないので 教えていただければ幸いです。) ありがとうございました。
- tracer
- ベストアンサー率41% (255/621)
不確定要素が多すぎて、何を前提に書けばいいのか分かんないけど、1個ならできて、2個以上できない理由が、逆に謎。1個ならできたのであれば、そのアプローチを書けば回答側は、わかりやすいかもね。セッションとクッキーとか何も使っていない状況?
お礼
質問がうまくできず申し訳ございません。 (1個ならできた)というのは、商品を1つにつき、[注文]ボタンを1つを get送信でつくる作り込みはできたという事でした。(今回は<form>で商品を 複数選択できるつくり込みにチャレンジ中という事です。) セッションは使っている状況です。 ありがとうございました。
- kosukejlampnet
- ベストアンサー率44% (126/282)
> (B)と(C)それぞれどのようなコーディングにすれば良い > のでしょうか? (A)の内容によって書き方が変わります。 前提条件を示さないと書きようがない。
お礼
質問が中途半端なようで申し訳ございません。 (A)の内容は以下のような感じです。 (テーブル:products) product_id | product_cd | name | price 1 | 10 | 本01 | 1300 2 | 11 | 本02 | 1200 3 | 20 | サプリ01 | 4800 4 | 30 | ストレッチボード | 9800 5 | 30 | 健康シューズ | 6800 (↑表示が崩れてしまう点ご了承下さい) (B)のファイルは以下のように書き始めましたが、 途中からどうしてよいかわからなく質問いたしました。 (B)ファイルの内容 ・・・ ・・途中一部省略します。 ・・ $sql = "select * from products "; $result = mysql_query($sql) ; <form method="post" action="kaimonoKago.php"> <table> <tr> <th></th> <th>商品コード</th> <th>商品名</th> <th>価格</th> <th>数量</th> </tr> <?php while(products = mysql_fetch_array($result)){ $product_id = htmlentities($products['product_id'], ENT_QUOTES, "UTF-8"); $product_cd = htmlentities($products['product_cd'], ENT_QUOTES, "UTF-8"); $name = htmlentities($products['name'], ENT_QUOTES, "UTF-8"); $price = htmlentities($products['price'], ENT_QUOTES, "UTF-8"); <tr> <th><input type="checkbox" name="product_id" value="<?= $product_id ?>"></th> <td><?= $product_cd ?></td> <td><?= $name ?></td> <td>¥<?= number_format($price) ?></td> <td>・・・?????このあたりから記述がよくわからなくなりました!!! 以下省略 質問の仕方もままならず、申し訳ございません。 またそんな質問にお付き合いいただき、ありがとうございます。
お礼
yambejp様 なるほど~。(すばらしい~!) 複雑すぎてできないと思っていましたが、 こういうやり方でできるんですね。 感動しました。 もっと効率のいいコーディングもあるのでしょうが、 地道に1つづつ知識をつけていくしかないのでしょうね。 早くyambejpさんのように自由に自分の頭の中の事を 形にできるようにがんばろうと思いました。 本当にありがとうございました。