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 )
{
|