【问题标题】:php for each output from database doesn't display correctly数据库中每个输出的 php 无法正确显示
【发布时间】:2011-07-21 20:40:55
【问题描述】:

我有一个包含大量产品的数据库,我正在尝试输出它们。有些产品的 itemid 相同,但尺寸不同。

我遇到的问题是将具有相同 itemid 的产品放入选择列表中。我可以正常输出产品,但我想在一个选择列表中对任何相同的产品进行分组。

这是指向我的网站的链接,其中包含硬编码的产品列表http://operationbraveheart.org.uk/jcart/

这里是我的代码http://operationbraveheart.org.uk/jcart/testshop.php输出的链接

发生的情况是,我没有为每个产品显示不同的表单,而是得到一个带有大量空选择列表的表单。

我想做一些类似的事情,但不是硬编码,我想循环考虑数据库,如果只有一个项目具有该 itemid,这是一种正常形式,如果有多个具有相同的 itemid,它会去在选择列表中。

这是我应该输出产品的代码

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);

我现在添加了 print_r($superitem);和数据库结构/数据

【问题讨论】:

    标签: php database list foreach


    【解决方案1】:

    您的产品数组中没有“命名”元素。您会注意到 $row['itemid'] 为您的数组键在 print_r 输出中生成 [],并且行生成的子数组中没有 ['size'] 下标:

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

    ....那里没有'item_id',也没有'size'元素。大概0=>1就是item_id,3=>2就是size。

    所以您的表单生成代码工作正常,但您的数据库获取失败。

    【讨论】:

    • 我已经更改了我的查询,所以它应该得到大小,但它仍然只输出 1 个表单而不是每个产品的表单
    • 你是对的。出于某种原因,我使用的是 fetchrow 而不是 fetch。现在可以使用了
    猜你喜欢
    • 2018-07-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-01-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多