Donc, en supposant que le seul élément jamais vu est le dernier élément, c'est parce que ce que vous retournez est écrasé à chaque boucle. Il existe quelques options pour résoudre ce problème. Le plus simple est :
$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;
Cependant, cela ne fonctionnera pas bien avec votre vrai bootstrap html. Vous devez vous assurer que les colonnes s'additionnent correctement.
Vous aurez besoin de quelque chose d'un peu plus intuitif
En utilisant le code réel, cela ressemblerait à quelque chose comme
$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;
Maintenant, dans votre fonction, quelle qu'elle soit, vous pouvez faire quelque chose comme (ce n'est pas la chose la plus élégante que j'aie jamais écrite, mais cela devrait faire le travail) :
$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;}
}