Jeżeli do kategorii należą jakieś produkty usunięcie kategorii spowodowałoby powstanie osieroconych rekordów produktów i potencjalnie błędów aplikacji...

Pokaż mi serce nie opętane zwodniczymi marzeniami, a pokażę ci człowieka szczęśliwego.

Tworząc aplikacje WWW działające w oparciu o bazę danych, spełnienie wszystkich zasad biznesowych w kodzie jest krytyczne do dobrego działania aplikacji. Niektóre z zasad mogą być realizowane przez funkcje bazy danych, na przykład wymuszanie więzów integralności lub kaskadowe operacje na danych. Inne zasady mogą być realizowane w bazie danych za pomocą wyzwalaczy lub procedur przechowywanych. Pozostałe zasady biznesowe muszą być realizowane w kodzie aplikacji.
Tworząc kod obsługi zasad biznesowych dobrą praktyką jest tworzenie funkcji obsługi wszystkich zasad.
Dla przykładu należy użyć funkcji DeleteEntity() zamiast wplatać w kod wyrażenia DELETE. Funkcja
DeleteEntity() może zawierać w sobie całą logikę wymaganą do kontroli więzów integralności oraz zasad biznesowych i zwracać różne wartości kodu powrotu w zależności od różnych błędów, jakie mogą wystąpić. W
RozdziaÅ‚ 15 – Witryny oparte o bazÄ™ danych
196

ten sposób poprawia się możliwość późniejszego użycia kodu oraz ułatwia wprowadzanie do aplikacji zmian w logice.
Wracając do katalogu produktów, kolejnym krokiem jest utworzenie stron obsługi aktualnego zestawu
produktów. Strony te są logicznie identyczne ze stronami obsługi kategorii. Na rysunku 15.4 pokazana jest strona zarządzania produktami, natomiast na wydruku 15.11. znajduje się skrypt generujący tą stronę.
Rysunek
15.4.
Ekran
zarzÄ…dza
nia
produkta
mi
Wydruk 15.11. Aplikacja zarzÄ…dzania danymi — zarzÄ…dzanie produktami ( mgmt_prods.phtml)
<?php
error_reporting( E_ALL & ~E_NOTICE );
session_start(); // niejawne ustawianie zmiennej sesji $aMerchantID
if ( empty( $aMerchantID ) == True )
{
header( "Location: login.phtml?retpage=" . urlencode( $REQUEST_URI )."\n" );
exit;
}

include( "class.FastTemplate.php" );
include( "./mgmt_db.php" );
include( "./mgmt_funcs.php" );

$aTPL = new FastTemplate( "." );
$aDB = new mgmt_db();

$aTPL->define( array( "base" => "mgmt_app_base.tpl",
"body" => "mgmt_body.tpl",
"footer" => "mgmt_footer.tpl",
"page_body" => "mgmt_prods_ovr.tpl",
"prod_table" => "mgmt_prods_table.tpl",
"prod_item" => "mgmt_prods_item.tpl" ) );

$aSQL = "select a.category_id, a.product_id, a.name, a.external_id, a.price,";
$aSQL .= "b.name as cat_name from mcProducts a, mcCategories b where (a.merchant_id";
$aSQL .= "= $aMerchantID) and (a.category_id = b.category_id)";
$aDB->query( $aSQL );
if ( $aDB->num_rows() > 0 )
{
while ( $aDB->next_record() )
{
$aCatID = $aDB->f( "category_id" );
$aCatName = $aDB->f( "cat_name" );
$aProdID = $aDB->f( "product_id" );
$aProdName = $aDB->f( "name" );
$aProdEID = $aDB->f( "external_id" );
$aProdPrice = $aDB->f( "price" );

$aTPL->assign( array( "PROD_ID" => $aProdID,
197
PHP – Kompendium wiedzy

"PROD_EID" => $aProdEID,
"PROD_NAME" => $aProdName,
"PROD_CAT" => $aCatName,
"PROD_PRICE" => '$' .
number_format( $aProdPrice, 2 ) ) );
$aTPL->parse( "PRODUCT_LIST", ".prod_item" );
}
$aTPL->parse( "EXISTING_PRODUCTS", "prod_table" );
}
else
{
$aTPL->assign( array( "EXISTING_PRODUCTS" => "" ) );
}

$aTPL->assign( array( "TITLE" => "Zarządzanie katalogiem produktów",
"MERCHANT_NAME" => GetMerchantName( $aDB, $aMerchantID )
) );


$aTPL->parse( "PAGE_BODY", "page_body" );
$aTPL->parse( "FOOTER", "footer" );
$aTPL->parse( "BODY", "body" );
$aTPL->parse( "PAGE", "base" );
$aTPL->FastPrint( "PAGE" );
?>
Strony umożliwiające dodawanie, usuwanie i zmianę produktów nie zostały tutaj szczegółowo
przedstawione, ale są dostępne na stronie WWW wymienionej w zasobach sieci na końcu książki. Zasady
biznesowe obowiązujące przy dodawaniu nowych produktów są następujące:
• Produkt musi zostać przypisany do jednej kategorii.
• Nazwy produktów w kategorii muszą być unikalne.
• Cena produktu musi wynosić co najmniej zero.
• Waga towaru również musi wynosić co najmniej zero.
W chwili obecnej nie ma ograniczeń na kasowanie produktów. Po zmianie danych produktu muszą być
spełnione te same zasady biznesowe co przy dodawaniu nowego produktu. Na wydruku 15.12 zamieszczony
został fragment pliku mgmt_funcs.php zawierający niektóre funkcje dostępu do bazy danych oraz funkcje zasad biznesowych używanych w aplikacji.
Wydruk 15.12. Aplikacja zarzÄ…dzajÄ…ca danymi — funkcje użytkowe ( mgmt_funcs.php)
<?php

function GetMerchantName( $aDB, $aMerchantID )
{
$aResult = "";
$aSQL = "select name from mcMerchants where ";
$aSQL .= "( merchant_id = $aMerchantID )";
Copyright (c) 2009 Pokaż mi serce nie opętane zwodniczymi marzeniami, a pokażę ci człowieka szczęśliwego. | Powered by Wordpress. Fresh News Theme by WooThemes - Premium Wordpress Themes.