• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:カートの中身ページの作成)

カートの中身ページの作成方法

このQ&Aのポイント
  • PHPを使ったショップサイトでカートの中身ページを作成する方法について困っています。
  • 参考にした記事の方法を試してみましたがうまくいかず困っています。
  • 商品が1つの場合と複数の場合で表示が異なるため、解決策を教えてください。

質問者が選んだベストアンサー

  • ベストアンサー
  • LancerVII
  • ベストアンサー率51% (1060/2054)
回答No.1

こんにちは。 こんな感じで出来ると思いますが違っていたらすみません。 行数分のrowspanが設定できればいいので処理中のカウントを取るだけで実装できると思います。 <?php session_start(); $_SESSION['cart'] = array(); $_SESSION['cart'][] = array ( '商品1', 2, 4000 ); $_SESSION['cart'][] = array ( '商品2', 2, 1000 ); $_SESSION['cart'][] = array ( '商品3', 2, 500 ); $_SESSION['cart'][] = array ( '商品4', 1, 200 ); $_SESSION['cart'][] = array ( '商品3', 2, 500 ); $_SESSION['cart'][] = array ( '商品4', 1, 200 ); $_SESSION['cart'][] = array ( '商品3', 2, 500 ); $_SESSION['cart'][] = array ( '商品4', 1, 200 ); $_SESSION['cart'][] = array ( '商品3', 2, 500 ); $_SESSION['cart'][] = array ( '商品4', 1, 200 ); ?> <table border="1"> <tr> <th>商品</th> <th>個数</th> <th>値段</th> <th>合計</th> </tr> <?php $count = 0; if ( isset ( $_SESSION["cart"] ) ) { foreach ( $_SESSION["cart"] as $cart ) { ?> <tr> <td><?= $cart[0] ?></td> <td><?= $cart[1] ?></td> <td><?= $cart[2] ?></td> <?php // カウントが0の時=最初の行を生成する時に // カートの中身の数で結合する if ( $count === 0 ) { ?> <td rowspan="<?= count($_SESSION['cart']) ?>">ここに合計</td> <?php } ?> </tr> <?php $count ++; } } ?> </table>

dust777
質問者

お礼

こんなにもお早い回答有難うございます! LancerVII様のソースで行なったところ無事理想の形が実現できました! ソースもスッキリしましたしとても勉強になりました! ありがとうございました!

全文を見る
すると、全ての回答が全文表示されます。

その他の回答 (1)

  • shimix
  • ベストアンサー率54% (865/1590)
回答No.2

複数行あるかどうかはノーチェック(1行だけならrowspan="1"で問題ない)でいいですから、『1行目のときだけ、合計金額欄のtd要素(rowspan属性あり)を挿入する』というだけですよね? カートの内容を$_SESSIONにどう保持しているかわかりませんが、$_SESSION['cart']が明細の配列になっているとしたら、 $count = count($_SESSION['cart']); // 行数を取得 $idx = 0; // 処理している行 foreach ($_SESSION['cart'] as $cart) { if ($idx === 0) { // table要素のヘッダ出力 } $idx++; // 処理行をセット print '<tr>'; print '<td>' . $cart['hinmei'] . '</td>'; print '<td>' . $cart['price'] . '</td>'; if ($idx == 1) { // 1行目なら合計欄を出力 print '<td rowspan="' . $count . '">' . $total . "</td>"; } print "</tr>"; } if ($idx >= 1) { // table要素のフッタ出力 } といった感じでしょうか。 #下記のソースでテストしています。$arrayの内容を変えて試してください。 <?php $array = array('cart'=>array()); $array['cart'][] = array('hinmei'=>'shohin_a', 'price'=>1500); $array['cart'][] = array('hinmei'=>'shohin_b', 'price'=>2500); $count = count($array['cart']); $total = 0; foreach ($array['cart'] as $cart) { $total = $total + $cart['price']; } $idx = 0; foreach ($array['cart'] as $cart) { if ($idx === 0) { print '<table border="1">'; print '<tr><th>SHOHIN</th><th>PRICE</th><th>TOTAL</th></tr>'; } $idx++; print '<tr>'; print '<td>' . $cart['hinmei'] . '</td>'; print '<td>' . $cart['price'] . '</td>'; if ($idx == 1) { print '<td rowspan="' . $count . '">' . $total . "</td>"; } print "</tr>"; } if ($idx >= 1) { print '</table>'; }

dust777
質問者

お礼

ご回答有難うございます! shimix様のソースでも試したところうまく作動しました! ベストアンサーは悩みましたが、回答して頂いた時間と既存のソースに近いことからANo.1様の回答を選びました。 お時間を割いていただいたのに申し訳ございません。 ソース自体は「こういう書き方もあるのだな」と勉強になりました! 回答ありがとうございました!

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • ショッピングカートの作成しようと思ってます。

    今ショッピングカートの商品を選んでカートに入れたのち別のページに飛ばして精算させるプログラムを作ってますがプログラムがうまく作動しません。 ショッピングカートのプログラムは <?php if (isset($_POST['cart'])){ $_SESSION['cart'][$_POST('code')] += $_POST('num'); print "<p>カートに入れました。</p>\n"; } else if ($_POST['delete']) { $_SESSION['cart'] = array(); print "<p>カートを空にしました。</p>\n"; } ?> 精算プログラムのエラー箇所は以下の感じです。 foreach ($_SESSION['cart'] as $code => $num) { $rs = mysql_query($con, "select * from member7 where code=$code"); $row = array($rs); $ss = $num * $row['tanka']; print "<tr><td>{$row['name']}</td><td>{$row['tanka']}円</td><td>$num</td><td>{$ss}円</td></tr>\n"; $sum += $ss; } 長ったらしいですが解決策を教えてくださればと思います。 PHPは5.2.0を使用してください。

    • ベストアンサー
    • PHP
  • form id、nameの番号振りなおし

    jqueryとphpにてフォームを作成しています。 フォームの追加、削除できるシステムを作っており、 フォームの追加はできたので、削除した際のinputのnameやidの番号を振り直しができず困っています。 商品1<br> <a href="javascript:void(0);" class="del" id="del_1">削除</a> <table> <tr> <th>商品番号</th> <td><input type="text" name="item[data][1][sir]" value="<?php echo $item[data][1][sir]; ?>"></td> </tr> <tr> <th>商品名</th> <td><input type="text" name="item[data][1][name]" value="<?php echo $item[data][1][name]; ?>"></td> </tr> <tr> <th>商品個数</th> <td> <select name="item[data][1][num]"> <option value="1">1</option> <option value="2">2</option> <option value="3">3</option> <option value="4">4</option> </select> </td> </tr> </table> <a href="javascript:void(0);" id="add">フォームの追加</a> としており、 「フォームの追加」をクリックすると 商品2<br> <a href="javascript:void(0);" class="del" id="del_2">削除</a> <table> <tr> <th>商品番号</th> <td><input type="text" name="item[data][2][sir]" value="<?php echo $item[data][2][sir]; ?>"></td> </tr> <tr> <th>商品名</th> <td><input type="text" name="item[data][2][name]" value="<?php echo $item[data][2][name]; ?>"></td> </tr> <tr> <th>商品個数</th> <td> <select name="item[data][2][num]"> <option value="1">1</option> <option value="2">2</option> <option value="3">3</option> <option value="4">4</option> </select> </td> </tr> </table> 商品3<br> <a href="javascript:void(0);" class="del" id="del_3">削除</a> <table> <tr> <th>商品番号</th> <td><input type="text" name="item[data][3][sir]" value="<?php echo $item[data][3][sir]; ?>"></td> </tr> <tr> <th>商品名</th> <td><input type="text" name="item[data][3][name]" value="<?php echo $item[data][3][name]; ?>"></td> </tr> <tr> <th>商品個数</th> <td> <select name="item[data][2][num]"> <option value="1">1</option> <option value="2">2</option> <option value="3">3</option> <option value="4">4</option> </select> </td> </tr> </table> ができるようにPHPにてSESSION管理をおこなっています。 追加はできたのですが、 上記のフォーム4つほど出した後に商品2を削除した場合の商品1、商品3、商品4の各nameの番号(item[data][*][sir]、item[data][*][name]、item[data][*][num]の*部分) 振りなおしができず困っています。 いくらやってもできないため、どなたかソースを教えていただけないでしょうか。 宜しくお願いいたします。

  • jsp 通販サイト作成での質問

    jspを使い通販サイトを作成しています 「session.jsp」では商品の選択をし選んだ商品をsessionを用いて 次のページの「cart.jsp」で表示するというものなのですが 「session.jsp」の下部で、カートに入れる のボタンを押した数に応じて 選んだ商品の数を表示するものを作ったのですが上手くカウントできていません size()を使い商品数を表示したいのですが上手くいきません どなたかよろしくお願いします <%@ page contentType="text/html;charset=Shift_JIS"%> <%@ page import= "java.util.ArrayList" %> <%@ page session="true" %> <% request.setCharacterEncoding("Shift_JIS"); String[] Price = {"4000","2500","500","3000","1500"}; String[] Name ={"たらばがに","毛ガニ","いか","うに","あわび"}; String[] Img ={"taraba.gif","ke.gif","ika.gif","uni.gif","awabi.gif"}; String message =""; String abc =""; String selectValues=request.getParameter("select"); String[] array=new String[3]; if(selectValues !=null){ array[0]=Name[Integer.parseInt(selectValues)]; array[1]=Price[Integer.parseInt(selectValues)]; array[2]=Img[Integer.parseInt(selectValues)]; ArrayList<String> i = new ArrayList<String>(); i.add(selectValues); //ここが問題点です abc="かごの中身は"+i.size()+"個です"; }else{ abc="商品を入れてください"; } %> <center><h1>海産物ショッピング</h1></center> <html> <head> <title>海産物ショッピング</title> </head> <body> <div align="center"> <hr> <form action="session.jsp"> <table border ="1"> <tr><th>たらばがに</th><th><img src="img/taraba.gif"></img></td></th><td>¥4000円<input type ="hidden" name=select value="0"><input type="submit" name=keyword value="カートに入れる"></input></td> </form> <form action="session.jsp"> </tr><tr><th>毛ガニ</th><th><img src="img/ke.gif"></img></td></th><td>¥2500円<input type ="hidden" name=select value="1"><input type="submit" name=keyword value="カートに入れる"></td></tr> <tr><th>いか</th><th><img src="img/ika.gif"></img></td></th><td>¥500円<input type ="hidden" name=select value="2"><input type="submit" name=keyword value=" カートに入れる"></td></tr> <tr><th>うに</th><th><img src="img/uni.gif"></img></td></th><td>¥3000円<input type ="hidden" name=select value="3"><input type="submit" name=keyword value="カートに入れる"></td></tr> <tr><th>あわび</th><th><img src="img/awabi.gif"></img></td></th><td>¥1500円<input type ="hidden" name=select value="4"><input type="submit" name=keyword value="カートに入れる"></td></tr> </table><br> </form> <table border ="1"> </table><br> <%=message %> <%=abc %> <hr> </div> </body> </html>

    • ベストアンサー
    • Java
  • PHPとMySQL 検索フォームを作りたい。

    PHPとMySQLを使って商品一覧を作りました。 ◆商品一覧表 http://pips.chu.jp/0/07/index.php <?php function connect() { return new PDO("mysql:dbname=★.★","★","★", array( PDO::MYSQL_ATTR_INIT_COMMAND => "SET CHARACTER SET `utf8`")); } $pdo = connect(); $st = $pdo->query("SELECT * FROM shohin"); $shohin = $st->fetchAll(); ?>    <TABLE border="1"> <tr> <th>商品番号</th> <th>商品名</th> <th>分類</th> <th>販売単価</th> <th>仕入単価</th> <th>登録日</th> </tr> <?php foreach ($shohin as $g) { ?> <tr> <td><?php echo $g['id'] ?></td> <td><?php echo $g['name'] ?></td> <td><?php echo $g['bunrui'] ?></td> <td class="td-price"><?php echo number_format ($g['htanka']) ?></td> <td class="td-price"><?php echo number_format ($g['stanka'])?></td> <td><?php echo $g['day'] ?></td> </tr> <?php } ?> </TABLE> ◆特定の商品一覧表 http://pips.chu.jp/0/07/irui.php ↓ $st = $pdo->query("SELECT * FROM shohin");の部分を $st = $pdo->query("SELECT * FROM shohin WHERE bunrui='衣類' ");に変更すると 分類が衣類だけの表になります。 ◆入力フォーム http://pips.chu.jp/0/07/form.php ↓ <form action = "kensaku.php" method="post">    分類:<input type="text" name="bunrui">    <input type="submit" name="submit" value="検索"> </form> こんな感じの入力フォームを作り、分類名を入力すると、その分類名の一覧表に反映されるようにしたいです。 ◆検索された一覧表 http://pips.chu.jp/0/07/kensaku.php ↓ <?php function connect() { return new PDO("mysql:dbname=★.★","★","★", array( PDO::MYSQL_ATTR_INIT_COMMAND => "SET CHARACTER SET `utf8`")); } $pdo = connect(); $st = $pdo->query("SELECT * FROM shohin WHERE bunrui='?' "); $shohin = $st->fetchAll(); ?>    <TABLE border="1"> <tr> <th>商品番号</th> <th>商品名</th> <th>分類</th> <th>販売単価</th> <th>仕入単価</th> <th>登録日</th> </tr> <?php foreach ($shohin as $g) { ?> <tr> <td><?php echo $g['id'] ?></td> <td><?php echo $g['name'] ?></td> <td><?php echo $g['bunrui'] ?></td> <td class="td-price"><?php echo number_format ($g['htanka']) ?></td> <td class="td-price"><?php echo number_format ($g['stanka'])?></td> <td><?php echo $g['day'] ?></td> </tr> <?php } ?> </TABLE> 「入力フォーム」と「検索された一覧表」のソースの書き方がわかりません。 どのようにけば実現するでしょうか。 まだ初心者なので、本やサイトを調べながら見よう見まねでやっています。 具体的に、どの部分を書き換えればよいか教えていただければ有難いです。 よろしくお願いします。

  • ショッピングカートの作成

    今ショッピングカートを作成しようとしていて商品サンプルがいくつかあり「カートへ」ボタンを押すと精算ページへ飛び精算を行うというプログラムをつくっているのですがいくつかのサンプルでどれを選んでも一番上のサンプルの精算しか行えません。どうすれば解決できますでしょうか?よろしくお願いします。 ショッピングカートのプログラムの一部です。 while($row = mysql_fetch_row($result)){; $code = $row['0']; print "<form method='post' action='cart_syohin2.php'><tr>"; print "<td rowspan='2'>"; if (file_exists("cart_image/$code.jpg")) print "<img src='cart_image/$code.jpg' border='0'>"; print "</td>"; print "<td rowspan='3'>{$row['3']}</td>"; print "<td nowrap>{$row['2']}円</td></tr>"; print "<tr><td nowrap><input type='text' name='num' size='3'>個</td></tr>"; print "<tr><td>{$row['1']}</td>"; print "<td><input type='hidden' name='code' value='$code'><input type='submit' name='cart' value='カートへ'>"; print "</td>"; print "</tr></form>\n"; }

    • 締切済み
    • PHP
  • PHPでセッションを使った受け渡しについて

    PHPでECサイトのカート機能を作っています。 まず商品一覧画面(index.php)にデータベースから読み取ったidとNAME、そして個数、サイズ、包装の有無のセレクトボックスを表示します。 それぞれの商品の追加ボタンを押すとカートのphp(t_cart.php)に飛んで上記の情報を全て表示できるようにしたいのですが、idとNAMEと個数の情報は受け渡せるのですが、サイズや包装の有無は別の商品を追加すると全ての商品の情報が上書きされてしまいます。 コードの一部を記載しておきます。 まだPHPを始めたばかりで初歩的な事がわからないのですが、ぜひ御知恵をお貸しいただければとおもいます。 よろしくお願いします。 ・index.php <table> <?php foreach ($Menu as $g) { ?> <tr> <td> <p class="Menu"><?php echo $g['id'] ?></p> </td> <td> <p><?php echo $g['NAME'] ?></p> </td> <form action="t_cart.php" method="post"> <td> <a>個数:</a> <select name="num"> <?php for ($i = 1; $i <= 10; $i++) { echo "<option>$i</option>"; } ?> </select> </td> <td> <a>サイズ:</a> <select name="size"> <option>S</option><option>M</option><option>L</option> </select> </td> <td> <a>包装:</a> <select name="deco"> <option>有</option><option>無</option> </select> </td> <td> <input type="text" name="id" value="<?php echo $g['id'] ?>"> <input type="submit" name="submit" value="go to cart"> </td> </form> </tr> <?php } ?> </table> ・t_cart.php <?php require 'common.php'; $rows = array(); $sum = 0; $pdo = connect(); if (!isset($_SESSION['cart'])){ $_SESSION['cart'] = array(); } if (@$_POST['submit']) { @$_SESSION['cart'][$_POST['id']] += $_POST['num']; } foreach($_SESSION['cart'] as $id => $num) { $st = $pdo->prepare("SELECT * FROM Menu WHERE id=?"); $st->execute(array($id)); $row = $st->fetch(); $st->closeCursor(); $row['num'] = strip_tags($num); $row['size'] = $_POST['size']; $row['deco'] = $_POST['dough']; $rows[] = $row; } ?>

    • 締切済み
    • PHP
  • php文字化けについての質問

    <TABLE BORDER> 99表 <tr> <th> </th><th>1</th><th>2</th><th>3</th><th>4</th><th>5</th><th>6</th><th>7</th><th>8</th><th>9</th> </tr> <tr> <?php for ($i = 1; $i <= 9; $i++ ) { echo "<tr>\n"; echo '<th>'. $i ."</th>\n"; for ($j = 1; $j <= 9; $j++ ) echo '<td>'. $i * $j."</td>\n"; echo "</tr>\n"; } ?> </table> 表と言う文字が文字化けして???と表示されます phpの設定も何度も見直しているのですが 問題がが発見できません どなたかお教えください

    • ベストアンサー
    • PHP
  • javascriptのテーブル作成についてif文で

    javascriptのテーブル作成についてif文で作成しましたが思うように表示されませんでした。 var inner=""; var wrong=0; inner="<table border='2'><caption>成績発表</caption><tr><th>問題</th><th>成績</th></tr>"; for (var mondai_index=0;mondai_index<mondai_max;mondai_index++) { inner+="<tr>"; inner+="<td>"+"問題"+(mondai_index+1)+"</td>"; var user_answer=this.user_answer[mondai_index]; if (user_answer !== undefined) { if (user_answer==this.mondai_data[mondai_index].c) { inner+="<td>正解</td>"; }else{ inner+="<td>不正解</td>"; wrong++; } }else{ inner+="<td>解説文hogehoge</td>"; } inner+="</tr>"; } inner+="</table>"; よろしくお願いします。

  • PHPとHTMLをまとめてコメントアウトしたいので

    HTMLの中にPHPが混じっているコードを、上から下まで一気にコメントアウトしたいのですが、どうしたらいいでしょうか? PHPとHTMLに分け、それぞれコメントアウトしていくしかないのでしょうか? それだともの凄く見難くなるのですが…… 後、HTML複数行コメントアウトの中に、PHPコメントアウトを書いてもいいのでしょうか? 例) ----------------------------------------------------- ・今日の天気予報<br> ・一覧 … <?php echo array_sum($hoge); ?> 全国<br>  <table>  <tr id="Theading" >  <th id="Theading"> Yahoo</th>  <th id="Theading"> livedoor</th>  <th id="Theading"> excite</th>  </tr>  <?php foreach($hoge as $k => $v){ ?>  <tr id="Tvalues">  <td><?php echo $piyo; ?></td>  <td><?php echo $k; ?></td>  <td><?php echo $v; ?></td>  <?php $piyo++; ?>  </tr>  <?php } ?>  </table> <br><br> -----------------------------------------------------

    • ベストアンサー
    • PHP
  • phpでショッピングカート機能を作りたい。

    PHPで店舗のショッピングカートを作ろうとしています。 data 1 リンゴ 100円     2 ミカン  80円     3 バナナ 50円 PHPコード <form action="" method="post"> <?php $sql = "SELECT * FROM list"; $sth = $dbh->prepare($sql); $sth->execute(); while ($row = $sth->fetch()) { $id = $row["id"]; $name = $row["name"]; $price = $row["price"]; $image = $row["image"]; echo <<<EOT <table cellspacing="0" cellpadding="0" width="605" height="150"> <tr> <td rowspan="5" valign="top"><img src="../kanri/image/goods/$image" border="0" /></td> <form action="" method="post"> <input type="hidden" name="$id" value="$id" /> <input type="hidden" name="$name" value="$name" /> <input type="hidden" name="$price" value="$price" /> <td align="left" bgcolor="#eee8aa" width="400"><b> $id. $name</b></td> </tr> <tr> <td colspan="2" bgcolor="#ccccff"><p><font color="#000088"><b>税込 :$price </b></p></td> </tr> <td colspan="2" bgcolor="#e6e6e6"><p> 個数 : <select name="number"> <option>1</option> <option>2</option> <option>3</option> <option>4</option> <option>5</option> </select> <input type="submit" name="submit_cart" value="カートに入れる" /></p> </td> </tr> </table> </form> <br /> EOT; } ?> <hr></hr> <div align="center">カートの中身</div> <?php if (isset($_POST["submit_cart"])) { if(!isset($name)){ $name = $_POST['name']; } if(!isset($price)){ $price = $_POST['price']; } if(!isset($number)){ $number = $_POST['number']; } $total = $price * $number; echo "<div align='center'><p>$id 番の情報を取得しました。</p></div>"; echo "<div align='center'><p>商品名: $name </p></div><div align='center'><p>単価:$price 円 / 個数:$number 個</p></div>"; echo "<hr></hr>"; echo "<div align='center'><p>合計金額:<b>$total 円</b>です。</p></div>"; } ?> としているのですが、カートに入れるボタンを押しても最後のバナナしかカートに表示出来ません。 全ての商品の注文をカートに入れるにはどうすれば良いでしょうか? ご教授のほど宜しくお願いします。

    • ベストアンサー
    • PHP