2011-07-21 20 views
1

商品の負荷があるデータベースがあり、出力しようとしています。商品の中には同じitemidを持つものもあれば、サイズが異なるものもあります。データベースからの各出力のphpが正しく表示されない

私が抱えている問題は、同じitemidを持つ製品を選択リストに入れることです。私は製品を正常に出力することができますが、私は選択リストに同じ製品のいずれかをグループ化したいです。

ハードコードされた製品リストhttp://operationbraveheart.org.uk/jcart/を持つ私のサイトへのリンクです。

、ここではhttp://operationbraveheart.org.uk/jcart/testshop.php

何が起こっていることは製品ごとに異なる形式の負荷が表示される代わりに、私は大規模な空の選択リストで一つの形を得ることである私のコードの出力へのリンクです。

私は同じようにしたいが、ハードコーディングの代わりに、データベースをループしたいと思っている。itemidが1つだけの場合、それは通常のフォームであり、同じitemidを持つものが複数ある場合は、選択リストに入ります。ここで

は、私が今ますprint_r($ superitem)を追加した出力ここでは製品

echo "<table border='0' id='gallery'>"; 

    while ($row = $result->fetchrow()) { 
     $superitem[$row['itemid']][] = $row; 
    } 

    foreach($superitem AS $subitem) { 
     list($prodid,$item,$description,$price) = $subitem[0]; 

     if ($count % NUMCOLS == 0) echo "<tr>"; # new row 
     echo '<td>'; 

     //Your normal code up until the select box... 
     echo '<form method="post" action="" class="jcart"> 
       <fieldset> 
        <input type="hidden" name="jcartToken" value="'.$_SESSION['jcartToken'].'" /> 
        <input type="hidden" name="my-item-id" value="2" /> 
        <input type="hidden" name="my-item-price" value="19.50" /> 
        <input type="hidden" name="my-item-url" value="http://yahoo.com" />'; 

     if(count($subitem) > 1) { 
      echo '<li><select name="my-item-name" id="foo">'; 
      foreach($subitem AS $subsubitem) { 
       echo "<option value='".$subsubitem['size']."'>".$subsubitem['size']."</option>"; 
      } 
      echo "</select></li>"; 
     } 
     else { 
      echo '<input type="hidden" name="my-item-name" value="'.$item.'" />'; 
     } 
     echo'<li>Price: $<span class="price">10.00</span></li> 
        <li> 
         <label>Qty: <input type="text" name="my-item-qty" value="1" size="3" /></label> 
        </li> 
       </ul> 

       <input type="submit" name="my-add-button" value="add to cart" class="button" /> 
      </fieldset> 
     </form>'; 

     echo '</td>'; 
     $count++; 
     $counter++; 

     if ($count % NUMCOLS == 0) echo "</tr>\n"; # end row 
    } 
    if ($count % NUMCOLS != 0) { 
     while ($count++ % NUMCOLS) echo "<td>&nbsp;</td>"; 
     echo "</tr>"; 
    } 
    echo "</table>"; 

が私のテーブル構造とデータの例である

CREATE TABLE `shop` (
    `prodid` int(2) NOT NULL auto_increment, 
    `itemid` int(2) NOT NULL default '0', 
    `item` varchar(50) NOT NULL default '', 
    `size` char(2) NOT NULL default '', 
    `description` text NOT NULL, 
    `image` varchar(50) NOT NULL default '', 
    `price` float NOT NULL default '0', 
    PRIMARY KEY (`prodid`) 
) 

INSERT INTO `shop` VALUES (1, 1, 'Key Ring', '', 'Key Ring: This can be personalised', '', 2); 
INSERT INTO `shop` VALUES (2, 2, 'Tableware', '', 'Tableware: Coasters and Table Mats', '', 3); 
INSERT INTO `shop` VALUES (3, 3, 'Braveheart Bear', '', '7" Braveheart Bear (choice of T-Shrt)', '', 9.99); 
INSERT INTO `shop` VALUES (4, 4, 'Bravehart Bear', '', '9" Braveheart Bear (choice of T-Shirt)', '', 11.99); 
INSERT INTO `shop` VALUES (5, 5, 'Wristband', '', 'Operation Braveheart wristband', '', 2); 
INSERT INTO `shop` VALUES (6, 6, 'Mug', '', 'Standard mug', '', 7.99); 
INSERT INTO `shop` VALUES (7, 7, 'A5 jotter', '', 'Various designs', '', 0.75); 
INSERT INTO `shop` VALUES (8, 8, 'Operation Braveheart T-Shirt', 'S', 'Operation Braveheart T-Shirt. All size in army green.', '', 6.99); 
INSERT INTO `shop` VALUES (9, 8, 'Operation Braveheart T-Shirt', 'M', 'Operation Braveheart T-Shirt. All size in army green.', '', 7.99); 
INSERT INTO `shop` VALUES (10, 8, 'Operation Braveheart T-Shirt', 'L', 'Operation Braveheart T-Shirt. All size in army green.', '', 8.99); 
INSERT INTO `shop` VALUES (11, 8, 'Operation Braveheart T-Shirt', 'XL', 'Operation Braveheart T-Shirt. All size in army green.', '', 9.99); 

をshoudl私のコードです。データベースstructre/data

+1

print_r($ superitem); –

+1

私は 'var_dump'が好きです; P – Wrikken

+0

私はこの問題を解決しました。 – AdRock

答えて

1

あなたの製品アレイには「名前付き」要素はありません。あなたはしますprint_r出力に[]を生み出すなど、あなたの配列のキーのため$row['itemid']ことに注意しましょう、と行によって生成子アレイには['size']添字ありません:NO「のitem_id」はありません....

 [0] => Array 
      (
       [0] => 1 
       [1] => Key Ring 
       [2] => Key Ring: This can be personalised 
       [3] => 2 
      ) 

は、とそこに「サイズ」の要素はありません。おそらく0 => 1はitem_idであり、3 => 2はサイズです。

フォーム生成コードは正常に動作していますが、データベースのフェッチに失敗しています。

+0

サイズを取得するようにクエリを変更しましたが、各製品のフォームの代わりに1つのフォームしか出力していません – AdRock

+0

あなたは正しいです。何らかの理由で私はフェッチの代わりにフェッチローを使用していました。それは今働く – AdRock