logo   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'); ?>




















x
x