Hallo,

Zou er iemand mij verder op weg kunnen helpen met volgend probleem?

Ik heb een tabel boeken en een tabel categorieën. De tabel boeken bevat allerlei detailgegevens zoals de titel, het isbn-nummer,.... en een categorie_id.
De tweede tabel categorieën bevat dan een primary key (categorie_id) en de naam van de categorie.

Allereerst heb ik query gemaakt die een lijst geeft met al de titels van de boeken, aanwezig in mijn bibliotheek. Wanneer ik op die titel klik, zou ik een nieuwe pagina moeten krijgen met al de details van dat ene boek.

Volgende query heb ik hiervoor geschreven :

<?php
public function getDetails($id)
{
$sql ='SELECT boeken.*, categorieen.categorie, categorieen.categorie_id FROM boeken
JOIN categorieen WHERE boek_id=?';
$statement = $this->db->prepare($sql);
$data = array($id);
$statement = $this->makeStatement($sql, $data);
$model = $statement->fetchObject();
return $model;
}
?>

Het lukt met echter niet om de categorie_id uit de boekentabel om te zetten in de naam van de categorie.

Het zou superfijn zijn als iemand me een hint zou kunnen geven!
Zo te zien haal je de categorienaam helemaal niet op.
Bedankt voor je reactie!

Ik haal hem inderdaad niet op en zie niet hoe ik dat wel kan doen.
Ik selecteer de naam in de query met categorieen.categorie (ik had dit misschien om verwarring te voorkomen beter categorienaam genoemd), maar dan loopt er iets mis.
Oke, is dat de naam?
Maar die kan je dan toch echoen.
Misschien is het handiger als ik de rest van mijn code er ook even bij zet.

De twee bestand uit mijn model :

<?php

class tabel
{
protected $db;

public function __construct($db)
{
$this->db = $db;
}

protected function makeStatement($sql,$data = null){
$statement = $this->db->prepare($sql);
try{
$statement->execute($data);
} catch (Exception $e) {
$msg = "<p>You tried to run this query: $sql</p>
<p>Exeption: $e</p>";
trigger_error($msg);
}
return $statement;
}
?>


<?php

include_once "models/Table.class.php";

class Book_Table extends Tabel
{
public function getAllBooks()
{
$sql = "SELECT * FROM boeken";
$statement = $this->makeStatement($sql);
return $statement;
}

public function getDetails($id)
{
$sql = 'SELECT boeken.*, categorieen.categorie, categorieen.categorie_id FROM boeken
JOIN categorieen WHERE boek_id=?';
$statement = $this->db->prepare($sql);
$data = array($id);
$statement = $this->makeStatement($sql, $data);
$model = $statement->fetchObject();
return $model;
}
}
?>



Mijn controllers :

<?php

include_once 'models/Book_Table.class.php';

$bookTable = new Book_Table($db);
$books = $bookTable->getAllBooks();
$booksAsHTML = include_once "views/admin/books_html.php";

return $booksAsHTML;
?>

<?php

include_once 'models/Book_Table.class.php';
$bookTable = new Book_Table($db);

$isBookClicked = isset($_GET['id']);
if($isBookClicked){
$bookId = $_GET['id'];
$bookData = $bookTable->getDetails($bookId);
$bookOutput = include_once "views/admin/details_html.php";
} else {
$books = $bookTable->getAllBooks();
$bookOutput = include_once "views/admin/books_html.php";
}

return $bookOutput;
?>


en mijn views :


<?php

$booksFound = isset ($books);
if ($booksFound === false){
trigger_error ( 'views/admin/books_html.php needs $books' );
}

$booksAsHTML = "

<div class='container'>
<form method='post' action='index.php?page=search' id='search-form'>
<input type='search' name='search-term' class='form-control'>
<button type='submit' value='Search' class='form-control' id='button-zoek'>Zoek</button>
</form>
<div id='booklistAdmin' class='table-responsive'>
<h2>Boekenlijst</h2>
<table id='adminTableBooks' class='table table-striped borderless '>
<thead>
<tr>
<td>Titel</td>
<td>Details</td>
<td>Aanpassen</td>
<td>Verwijderen</td>
</tr>
</thead>
<tbody>
";

while($book = $books->fetchObject()){
$href = "admin.php?page=details&amp;id=$book->boek_id";
$booksAsHTML .= "
<tr>
<td>$book->titel</td>
<td><a class='fa fa-info-circle' href=\"$href\" ></a></td>
<td><a class='fa fa-wrench'></a></td>
<td><a class='fa fa-trash-o'></a></td>
</tr>
";
}

$booksAsHTML .= "
</tbody>
</table>
</div>
</div>
";

return $booksAsHTML;
?>


<?php

$bookFound = isset($bookData);

if($bookFound === false) {
trigger_error('views/entry-html.php needs an $bookData object');
}

return "
<div class='container'>
<h2>Boekfiche van : $bookData->isbn</h2>
<div class='info-onderdeel'>
<table id='boekdetails'>
<tr>
<td>IISBN :</td>
<td>$bookData->isbn</td>
</tr>
<tr>
<td>Prijs :</td>
<td>€ $bookData->prijs</td>
</tr>
<tr>
<td>Categorie :</td>
<td><$bookData->categorie_id></td>
</tr>
</table>
</div>
<div class='info-onderdeel'>


</div>
<div class='info-onderdeel'>
<img src='' alt='$bookData->titel'>
</div>
</div>
";
?>

Als resultaat krijg ik al mijn gegevens, alleen bij de categorie krijg ik het id 1 waar eigenlijk kookboek zou moeten komen.
Je zet daar het categorie_id neer.
Verabder dat in de veldnaam van de naam.
In dat geval krijg ik helemaal geen output meer.

[size=xsmall]Toevoeging op 28/02/2016 20:36:49:[/size]

Even corrigeren en beter formuleren : al mijn details worden weergegeven, maar bij de categorie blijft alles leeg.
Gebruik je wel de juiste naam?
Anders zou ik het zo even ook niet weten.
Hoe fiets je die twee tabellen aan elkaar? Ik zie alleen een JOIN zonder argumenten? Wordt het verband tussen die twee tabellen automatisch opgepikt in sqlite?

Ik zou zoiets verwachten als JOIN categorieen ON (categorieen.categorie_id = boeken.categorie_id) maar mogelijk is de syntax/het verband tussen tabellen in sqlite iets anders?

Reageren