Tak więc zakładając, że jedyny element, jaki kiedykolwiek widziano, jest ostatnim elementem, ponieważ to, co zwracasz, jest nadpisywane w każdej pętli. Istnieje kilka opcji rozwiązania tego problemu. Najprostszy to:
$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;
Jednak to nie będzie działać dobrze z twoim prawdziwym kodem html. Musisz się upewnić, że kolumny sumują się prawidłowo.
Potrzebujesz czegoś bardziej intuicyjnego
Przy użyciu rzeczywistego kodu wyglądałoby to mniej więcej tak
$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;
Teraz w swojej funkcji, cokolwiek to jest, możesz zrobić coś takiego (nie jest to najbardziej elegancka rzecz, jaką kiedykolwiek napisałem, ale powinna wykonać zadanie):
$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;}
}