So I am working on an ecommerce website and I am now working on products page, specifically to show them from the database. Everytime I add the foreach loop, the card just entirely dissapears and I am very lost as to why it would do that.
Here is the code of the class:
<?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;
}
}
}
And here is the code of the shop page:
<?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>
Also, a link to the repository if you would like to fork it and see for yourself (This is on the branche products):
https://github.com/tcudjoe/apresdesheures/tree/products
I tried to see if the problem was because of the function getRecords() but when var_dumping it seemed to give me the right information.
I even added a card without any php code inside, and this seems to work fine.
I checked if the column names were wrong, and they were all matching.
I checked if there was something wrong with the connection of the database, and all seemed to be well.
>Solution :
you have a typo here :
$data = array();
while($row = $result->fetch_assoc()) {
$date[] = $row;
}
return $data;
You put the row in a $datE array instead of $datA
I think that if you var_dump($products) before your loop, you will have an empty data array