Vycházíme tedy z předpokladu, že jediný prvek, který jsme kdy viděli, je ten poslední, protože to, co vracíš, je přepsáno v každé smyčce. Existuje několik možností, jak to vyřešit. Nejjednodušší je:
$stmt = $this->conn->prepare('SELECT * FROM books');
$stmt->execute();
$text = "";
while($row = $stmt->fetch(PDO::FETCH_ASSOC))
{
$book_id = $row['id'];
$book_title = $row['title'];
$book_image = $row['image'];
$book_amz = $row['amazon'];
$book_desc = $row['description'];
$book_rating = $row['rating'];
$book_date = $row['date'];
$book_author = $row['author'];
$book_categorie = $row['categorie'];
//String concatenation of text will
//give you one big string at the end to return.
$text .= "ID: '{$book_id}'";
}
return $text;
To však nebude dobře fungovat s vaším skutečným bootstrap html. Musíte se ujistit, že se sloupce sčítají správně.
Budete potřebovat něco trochu intuitivnějšího
Při použití skutečného kódu by to vypadalo něco jako
$stmt = $this->conn->prepare('SELECT * FROM books');
$stmt->execute();
$bookEcho = array();
while($row = $stmt->fetch(PDO::FETCH_ASSOC)){
$bookEcho[] = '<div class="col-md-3">
<div class="thumbnail">
<span>' . $book_title . '</span>
<img src="' . $book_image . '">
<div class="book-options">
<span>Bewertung</span><br/>
' . $stars . '
<a href="books.php?id=' . $book_id . '" class="btn btn-read btn-block">Jetzt lesen</a>
</div>
</div>
</div>';
}
return $bookEcho;
Nyní ve své funkci, ať už je to cokoli, můžete udělat něco jako (toto není ta nejelegantnější věc, jakou jsem kdy napsal, ale měl byste to udělat):
$cols = 4;
$colCount = 1;
foreach ($bookEcho as $book){
if($colCount == 0){//create a row}
echo $book;
$coolCount++;
if($colCount == 0){end a row}
if($colCount == 4){ $colCount = 0;}
}