Salve vorrei chiarimenti su questa cosa:
Ho due tabelle cosi composte :
tabella categorie
-id (chiave primaria)
-name
-crteated
tabella prodotti
-id ( chiave primaria , unica)
- nome_prodotto
- quantita
- descrizione
-categoria_id ( chiave unica )
-created
-modified
Il mio intento è quello di fare una query che mi visualizzi tutti i prodotti ed estrapolare il nome del prodotto considerando che categoria_id della tabella prodotti è uguale all' id della tabella categorie
Ho fatto in questo modo:
prima creo due classi per le operazioni da eseguire sul database mysql
il file categorie.class.php è cosi definito
mentre il file prodotti.class.php
la pagina prodotti.php che visualizza tutti i prodotti è cosi definito:
Quando visualizzo la pagina prodotti sul campo categoria_id non riesco ad ottenere il nome della categoria associata. Qualche consiglio per effettuare questa operazione?
Si possono creare più oggetti nella pagina prodotti? cosi come ho postato...
inoltre è giusto chiamare la funzione readName per leggere il nome della categoria riferito a categoria id ?
inoltre vorrei sapere se è giusto creare delle foreign key nel mysql che mettono in relazione id con categoria_id
Ho due tabelle cosi composte :
tabella categorie
-id (chiave primaria)
-name
-crteated
tabella prodotti
-id ( chiave primaria , unica)
- nome_prodotto
- quantita
- descrizione
-categoria_id ( chiave unica )
-created
-modified
Il mio intento è quello di fare una query che mi visualizzi tutti i prodotti ed estrapolare il nome del prodotto considerando che categoria_id della tabella prodotti è uguale all' id della tabella categorie
Ho fatto in questo modo:
prima creo due classi per le operazioni da eseguire sul database mysql
il file categorie.class.php è cosi definito
PHP:
<?php
class Categorie{
// database connection and table name
private $conn;
private $table_name = "categorie";
// object properties
public $id;
public $name;
public function __construct($db){
$this->conn = $db;
}
//used to create categorie
function create(){
//write query
$query = "INSERT INTO
" . $this->table_name . "
SET
name=:name, created=:created";
$stmt = $this->conn->prepare($query);
// posted values
$this->name=htmlspecialchars(strip_tags($this->name));
$this->created=htmlspecialchars(strip_tags($this->created));
// to get time-stamp for 'PIANO_TERAPEUTICO' field
$this->created = date('d-m-Y');
// bind values
$stmt->bindParam(":name", $this->name);
$stmt->bindParam(":created", $this->created);
//$stmt->bindParam(":created", $this->timestamp);
if($stmt->execute()){
return true;
}else{
return false;
}
}
// used by select drop-down list
function read(){
//select all data
$query = "SELECT
id, name
FROM
" . $this->table_name . "
ORDER BY
name";
$stmt = $this->conn->prepare( $query );
$stmt->execute();
return $stmt;
}
// used to read category name by its ID
function readName(){
$query = "SELECT name FROM " . $this->table_name . " WHERE id = ? limit 0,1";
$stmt = $this->conn->prepare( $query );
$stmt->bindParam(1, $this->id);
$stmt->execute();
$row = $stmt->fetch(PDO::FETCH_ASSOC);
$this->name = $row['name'];
}
}
?>
mentre il file prodotti.class.php
PHP:
<?php
class Categorie{
// database connection and table name
private $conn;
private $table_name = "categorie";
// object properties
public $id;
public $name;
public function __construct($db){
$this->conn = $db;
}
//used to create categorie
function create(){
//write query
$query = "INSERT INTO
" . $this->table_name . "
SET
name=:name, created=:created";
$stmt = $this->conn->prepare($query);
// posted values
$this->name=htmlspecialchars(strip_tags($this->name));
$this->created=htmlspecialchars(strip_tags($this->created));
// to get time-stamp for 'PIANO_TERAPEUTICO' field
$this->created = date('d-m-Y');
// bind values
$stmt->bindParam(":name", $this->name);
$stmt->bindParam(":created", $this->created);
//$stmt->bindParam(":created", $this->timestamp);
if($stmt->execute()){
return true;
}else{
return false;
}
}
// used by select drop-down list
function read(){
//select all data
$query = "SELECT
id, name
FROM
" . $this->table_name . "
ORDER BY
name";
$stmt = $this->conn->prepare( $query );
$stmt->execute();
return $stmt;
}
// used to read category name by its ID
function readName(){
$query = "SELECT name FROM " . $this->table_name . " WHERE id = ? limit 0,1";
$stmt = $this->conn->prepare( $query );
$stmt->bindParam(1, $this->id);
$stmt->execute();
$row = $stmt->fetch(PDO::FETCH_ASSOC);
$this->name = $row['name'];
}
}
?>
PHP:
<?php
// page given in URL parameter, default page is one
$page = isset($_GET['page']) ? $_GET['page'] : 1;
// set number of records per page
$records_per_page = 10;
// calculate for the query LIMIT clause
$from_record_num = ($records_per_page * $page) - $records_per_page;
//includo oggettoi database , categorie , prodotti
include_once 'config/db_1.php';
include_once 'inc/prodotti.class.php';
include_once 'inc/categorie.class.php';
?>
<html>
<head>
<title>GESTIONE DIABETICI</title>
<style>
body{width:100%;font-family:arial;letter-spacing:1px;line-height:20px;}
.tbl-qa{width: 100%;font-size:0.9em;background-color: #f5f5f5;}
.tbl-qa th.table-header {padding: 5px;text-align: left;padding:10px;}
.tbl-qa .table-row td {padding:10px;background-color: #FDFDFD;vertical-align:top;}
.button_link {color:#FFF;text-decoration:none; background-color:#428a8e;padding:10px;}
</style>
</head>
<body>
<?php
$database = new Database();
$db = $database->getConnection();
//create object
$prodotti = new Prodotti($db);
$categorie = new Categorie($db);
// query to read prodotti
$stmt = $prodotti->readAll($from_record_num, $records_per_page);
$num = $stmt->rowCount();
$name = $categorie->readName($name);
//query to read categorie name SELECT book.title, author, description, date, filename, user.name, email
//FROM book INNER JOIN user ON book.user_id = user.id";
//$categoria_id = $categorie->nome_categoria();
//$categoria_id = $db->prepare("SELECT categorie.id, name, prodotti.categoria_id FROM categorie INNER JOIN prodotti ON categorie.id = prodotti.categorie_id");
//$categoria_id->execute();
?>
<div style="text-align:right;margin:20px 0px;">
<a href="clienti.php" class="button_link"><img src="images/icon/add.png" title="Lista Cliente" style="vertical-align:bottom;" /> Clienti</a>
<a href="prodotti.php" class="button_link"><img src="images/icon/add.png" title="Lista Prodotto" style="vertical-align:bottom;" /> Prodotti</a>
<a href="erogazioni.php" class="button_link"><img src="images/icon/add.png" title="Lista Erogazione" style="vertical-align:bottom;" /> Erogazioni</a>
<a href="categorie.php" class="button_link"><img src="images/icon/add.png" title="Lista Categorie" style="vertical-align: bottom;" />Categorie</a></div>
<table class="tbl-qa">
<thead>
<tr>
<th class="table-header" width="20%">Nome Prodotto: </th>
<th class="table-header" width="20%">Quantita: </th>
<th class="table-header" width="15%">Descrizione: </th>
<th class="table-header" width="5%">Categoria: </th>
<th class="table-header" width="15%">Creato il: </th>
<th class="table-header" width="5%">Azioni: </th>
</tr>
</thead>
<tbody id="table-body">
<?php
// display the products if there are any
if($num>0){
/* if(!empty($result)) {
foreach($result as $row) {
*/
while ($row = $stmt->fetch(PDO::FETCH_ASSOC)){
extract($row);
?>
<tr class="table-row">
<td><?php echo $nome_prodotto; ?></td>
<td><?php echo $quantita; ?></td>
<td><?php echo $descrizione; ?></td>
<td><?php echo $name; ?></td>
<td><?php echo $created; ?></td>
<td><a class="ajax-action-links" href='aggiorna_cliente.php?id=<?php echo $row['id']; ?>'><img src="images/icon/edit.png" title="Edit" /></a> <a class="ajax-action-links" href='cancella_cliente.php?id=<?php echo $row['id']; ?>'><img src="images/icon/delete.png" title="Delete" /></a></td>
<?php
}
}
?>
</tr>
</tbody>
</table>
</div>
<!-- /container -->
<div class="container">
<?php
// show page header
echo "<div class='page-header'>
<h1>{$page_title}</h1>
</div>";
?>
<!-- jQuery (necessary for Bootstrap's JavaScript plugins) -->
<script src="https://code.jquery.com/jquery-3.2.1.min.js"></script>
<!-- Latest compiled and minified Bootstrap JavaScript -->
<script src="https://cdn.jsdelivr.net/npm/[email protected]/dist/js/bootstrap.min.js" integrity="sha384-QJHtvGhmr9XOIpI6YVutG+2QOK9T+ZnN4kzFN1RtK3zEFEIsxhlmWl5/YESvpZ13" crossorigin="anonymous"></script>
<!-- bootbox library last version -->
<script src="https://cdnjs.cloudflare.com/ajax/libs/bootbox.js/5.5.2/bootbox.min.js" integrity="sha512-RdSPYh1WA6BF0RhpisYJVYkOyTzK4HwofJ3Q7ivt/jkpW6Vc8AurL1R+4AUcvn9IwEKAPm/fk7qFZW3OuiUDeg==" crossorigin="anonymous" referrerpolicy="no-referrer"></script>
<script src="/js/script.js"></script>
</body>
</body>
</html>
Si possono creare più oggetti nella pagina prodotti? cosi come ho postato...
inoltre è giusto chiamare la funzione readName per leggere il nome della categoria riferito a categoria id ?
inoltre vorrei sapere se è giusto creare delle foreign key nel mysql che mettono in relazione id con categoria_id