Foreach 循环不会显示卡片 php [已关闭]

Foreach loop wont show card php [closed]

提问人:magicalassembler 提问时间:12/17/2022 更新时间:12/17/2022 访问量:43

问:


这个问题是由一个错别字或一个无法再重现的问题引起的。虽然类似的问题可能在这里成为主题,但这个问题的解决方式不太可能帮助未来的读者。

11个月前关闭。

所以我正在一个电子商务网站上工作,我现在正在产品页面上工作,专门从数据库中显示它们。每次我添加 foreach 循环时,卡片都会完全消失,我非常迷茫为什么它会这样做。

下面是该类的代码:

<?php
    class DatabaseQueries {
        private $servername = "localhost";
        private $username   = "root";
        private $password   = "";
        private $database   = "adh";
        public  $conn;

        // Database Connection
        public function __construct()
        {
            $this->conn = new mysqli($this->servername, $this->username, $this->password, $this->database);
            if(mysqli_connect_error()) {
             trigger_error("Failed to connect to MySQL: " . mysqli_connect_error());
            }else{
            return $this->conn;
            }
        }

        public function getRecords($table) {
            $query = "SELECT * FROM $table";
            $result = $this->conn->query($query);
            if($result){
                if($result->num_rows > 0){
                    $data = array();
                    while($row = $result->fetch_assoc()) {
                        $date[] = $row;
                    }
                    return $data;
                }else{
                    echo "No records have been found.";
                }
            }else{
                echo "Error in:" . $query . "<br>" . $this->conn->error;
            }
        }
    }

这是商店页面的代码:

<?php
    include './classes/databaseQueries.php';
    $obj = new DatabaseQueries();
?>

<div class="container">
    <div class="row">
        <div class="col-3">
            <div class="card border-0" style="width: 18rem;">
                <img src="./img/png1.png" class="card-img-top" alt="...">
                <div class="card-body">
                    <p class="card-text">Some quick example text to build on the card title and make up the bulk of the
                        card's content.</p>
                </div>
            </div>
            <?php
                $products = $obj->getRecords('products');
                foreach($products as $product){
            ?>
            <div class="card border-0" style="width: 18rem;">
                <img src="./<?php echo $product['img_address'] ?>" class="card-img-top" alt="...">
                <div class="card-body">
                    <p class="card-text"><?php echo $product['name'] ?></p>
                    <p class="card-text"><?php echo $product['price'] ?></p>
                </div>
            </div>
            <?php } ?>
        </div>
    </div>
</div>

此外,如果您想分叉存储库并亲自查看,请链接到存储库(这是在分支产品上): https://github.com/tcudjoe/apresdesheures/tree/products

我试图查看问题是否是由于函数getRecords()引起的,但是当var_dumping时,它似乎给了我正确的信息。

我什至添加了一张没有任何 php 代码的卡片,这似乎工作正常。

我检查了列名是否错误,它们都匹配。

我检查了数据库的连接是否有问题,一切似乎都很好。

php mysql oop mysqli 电子商务

评论

0赞 coderpolo 12/17/2022
这似乎是你的老师要求的课程练习,所以我会建议你使用一个框架来处理模板和适当的数据库/对象处理。我敢打赌,如果你把$product放在你的循环中,你就不会得到一个正确的结果。您能否用 getRecords() 函数的转储更新您的问题
0赞 magicalassembler 12/28/2022
@coderpolo 这实际上不是一个课程练习......这是我正在创建的一个 eccomerce 网站的开始,但在您的评论、一些研究并发现普通的 php 无法解决问题之后,我决定暂时使用现有平台(Shopify)。因此,我可以更多地使用框架进行练习,从长远来看,我可以自己构建它。因此,感谢您的见解,祝您新年快乐!
0赞 coderpolo 12/30/2022
嗨,如果您想从头开始构建整个电子商店,我建议您学习一些框架的基础知识,例如 Laravel 或 Symfony,因为您将不得不处理像 Stripe 之类的支付 API,并且实现的设计模式将对您有很大帮助。Shopify 应该为 MVP 做伎俩,因此如果您想启动市场的 v1,那么选择该解决方案是正确的。从长远来看,如果您想学习如何构建真正高效的东西,请查看 sylius.com,从未使用过它,但看起来很整洁,祝您为您的项目一切顺利!

答:

1赞 coderpolo 12/17/2022 #1

你在这里有一个错别字:

$data = array();
                    while($row = $result->fetch_assoc()) {
                        $date[] = $row;
                    }
                    return $data;

将该行放在$datE数组中,而不是$datA

我认为如果你在循环之前var_dump($products),你将有一个空的数据数组

评论

0赞 magicalassembler 12/17/2022
我感谢您的服务,以发现我的疏忽!
1赞 coderpolo 12/17/2022
不客气,如果它解决了您的产品循环问题,请不要忘记选择作为答案,祝您好运:)
0赞 Nigel Ren 12/17/2022
通常,您不会回答错别字类型问题。它们通常会因拼写错误而被关闭,并可能被删除。