OOP - CRUD Select
- SELECT kan udføres på 2 måder:
- For en enkelt record
- For to eller flere records
Enkelt record
HTML (Top)
// Instantier den relevante klasse. // Etabler variabel (valgfrit navn), der skal indeholde data hentet med det anførte objekt og den anførte funktion.
<?php
$objBusiness = new Business();
$business = $objBusiness->getBusiness();
?>
<!doctype .....
|
Anførte funktion
// Etabler parameter med navn på den tabel, der skal selectes fra. Der kan være parametre til flere tabeller.
private $_table = 'business';
// Den funktion, der skal bruges. // Opbyg traditionel SQL-sætning med tabel-id hentet fra parameter i klassen. // Funktionen "db" er ved extends knyttet til klassen Business. // Returnerer data (array) til variablen $business.
public function getBusiness() {
$sql = "SELECT * FROM `{$this->_table}`
WHERE `id` = 1";
return $this->db->fetchOne($sql);
}
|
HTML (Body)
//Der, hvor et felt fra DB-tabellen skal bruges anføres variabelnavn fra instantieringen og feltnavn (Variabelnavnet er blevet til navn på et associativt array med de hentede tabelfelter som elementer):
 <?php echo $business['name']; ?>
|
Hent felt fra DB uden SELECT
En enkelt feltværdi kan hentes fra DB med kun 1 record med:
public function getVatRate() {
$business = $this->getBusiness();
return $business['vat_rate'];
}
|
Flere records
Flere records til <ul>
HTML (Top)
// Instantier den relevante klasse. // Etabler variabel (valgfrit navn), der skal indeholde data hentet med det anførte objekt og den anførte funktion.
<?php
$objCatalogue = new Catalogue();
$cats = $objCatalogue->getCategories();
?>
<!doctype .....
|
Anførte funktion
// Etabler parametre med navn på den / de tabeller, der skal selectes fra. Som navnestandard anvendes $_table, $_table_2 etc.
private $_table = 'categories';
private $_table_2 = 'products';
// Den funktion, der skal bruges. // Opbyg traditionel SQL-sætning med tabel-id hentet fra parameter i klassen. // Funktionen "db" er ved extends knyttet til klassen Categories. // Returnerer data til variablen $cats.
public function getCategories() {
$sql = "SELECT * FROM `{$this->_table}`
ORDER BY `name` ASC";
return $this->db->fetchAll($sql);
}
eller ved "where"
public function getProducts() {
$sql = "SELECT * FROM `{$this->_table_2}`
WHERE `categoery` = '".$this->db->escape($cat)."'
ORDER BY `date` ASC";
return $this->db->fetchAll($sql);
}
|
HTML (Body)
Opbygning af menu.
// Foreach der læser værdierne i $cats som $cat.
// Etablerer link med $cat['id'] som URL-parameter.
// Bruger Helper::getActive() til at !!!!!!
// Bruger Helper::encodeHTML() til at sanitere kategori-teksten før visning.
<?php if (!empty($cats)) { ?>
<p>Categories</p>
<ul id="navigation">
<?php
foreach($cats as $cat) {
echo "<li><a href=\"/?page=catalogue&category=".$cat['id']."\"";
echo Helper::getActive(array('category' => $cat['id']));
echo ">";
echo Helper::encodeHtml($cat['name']);
echo "</a></li>";
}
?>
</ul>
<?php } ?>
|
Flere records til $rows
HTML (Top)
// Etabler variabel (valgfrit navn), der skal indeholde data hentet med det anførte objekt og den anførte funktion og parameter.
$rows = $objCatalogue->getProducts($cat);
|
Anførte funktion
// Etabler parametre med navn på den / de tabeller, der skal selectes fra. Som navnestandard anvendes $_table, $_table_2 etc.
private $_table_2 = 'products';
// Den funktion, der skal bruges. // Opbyg traditionel SQL-sætning med tabel-id hentet fra parameter i klassen. // Funktionen "db" er ved extends knyttet til klassen Categories. // Returnerer data til variablen $rows.
public function getProducts($cat) {
$sql = "SELECT * FROM `{$this->_table_2}`
ORDER BY `date` DESC";
return $this->db->fetchAll($sql);
}
eller ved "where"
public function getProducts($cat) {
$sql = "SELECT * FROM `{$this->_table_2}`
WHERE `category` = '".$this->db->escape($cat)."'
ORDER BY `date` DESC";
return $this->db->fetchAll($sql);
}
|
HTML (Body)
Opbygning af f.eks. tabel med selekterede data.
<?php
if(!empty($rows)) {
foreach($rows as $row) {
// Indsæt recordvis brug af data fra de relevante feltnavne med $row['feltnavn']. F.eks: echo $row['id'];
}
}
?>
|
Paging
Opdeling af en SELECT med mange udtrukne records i mindre dele, der kan vises hver for sig.
Paging indgår typisk ikke i den grundlæggende etablering af en SELECTED liste, men tilknyttes efterfølgende.
Paging tilføres en liste ved at etablere klassen "Pagination" og indsætte 3 kodelinier i en etableret liste.
Anden / yderligere funktionalitet vil typisk kunne tilføres ved at bearbejde de generelt genbrugbare klassedata.
Paging klasse
Klassen paging udgør en central del af paging. Den vil antagelig kunne anvendes i andre projekter med begrænsede strukturelle tilpasninger.
HTML-kode
HTML (Top)
$objPaging = new Paging($rows, 3);
$rows = $objPaging->getRecords();
require_once("_header.php");
|
Nederst i Top: Instantier Paging-klassen og start at getRecords() funktionen henter data (de records der skal vises på den enkelte paginerede side) til variablen $rows.
|
Body
if(!empty($rows)) {
foreach($rows as $row) {
Her opbygges hele tabellen med viste data. Opbygningen skal ikke tilpasses for at imødekomme paging.
} // foreach slut
echo $objPaging->getPaging();
} !empty($rows) slut
| Menuen til sidevalg dannet med "private function getLinks()" indsættes her.
|
<?php
$objCatalogue = new Catalogue();
$srch = Url::getParam('srch');
if (!empty($srch)) {
$products = $objCatalogue->getAllProducts($srch);
$empty = 'There are no results matching your searching criteria.';
} else {
$products = $objCatalogue->getAllProducts();
$empty = 'There are currently no records.';
}
$objPaging = new Paging($products, 5);
$rows = $objPaging->getRecords();
$objPaging->_url = '/admin'.$objPaging->_url;
require_once('template/_header.php');
?>
<h1>Products</h1>
<form action="" method="get">
<?php echo Url::getParams4Search(array('srch', Paging::$_key)); ?>
<table cellpadding="0" cellspacing="0" border="0" class="tbl_insert">
<tr>
<th><label for="srch">Product:</label></th>
<td>
<input type="text" name="srch" id="srch"
value="<?php echo stripslashes($srch); ?>" class="fld" />
</td>
<td>
<label for="btn_add" class="sbm sbm_blue fl_l">
<input type="submit" id="btn_add" class="btn" value="Search" />
</label>
</td>
</tr>
</table>
</form>
<div class="dev br_td"> </div>
<p><a href="/admin/?page=products&action=add">New product</a></p>
<?php if (!empty($rows)) { ?>
<table cellpadding="0" cellspacing="0" border="0" class="tbl_repeat">
<tr>
<th class="col_5">Id</th>
<th>Product</th>
<th class="col_15 ta_r">Remove</th>
<th class="col_5 ta_r">Edit</th>
</tr>
<?php foreach($rows as $product) { ?>
<tr>
<td><?php echo $product['id']; ?></td>
<td><?php echo Helper::encodeHtml($product['name']); ?></td>
<td class="ta_r">
<a href="/admin/?page=products&action=remove&id=<?php echo $product['id'
]; ?>">Remove</a>
</td>
<td class="ta_r">
<a href="/admin/?page=products&action=edit&id=<?php echo $product['id'];
?>">Edit</a>
</td>
</tr>
<?php } ?>
</table>
<?php echo $objPaging->getPaging(); ?>
<?php
} else {
echo '<p>'.$empty.'</p>';
}
?>
<?php require_once('template/_footer.php'); ?>
|
|