Dawid Boisse, Wojciech Myśliwiec
Projekt realizowano również na przedmiocie Technologie i programowanie WWW.
Projekt stanowi podstawę bazodanową dla projektu realizowanego z przedmiotu Technologie i Programowanie WWW. Implementacja (w ciągłej fazie rozwoju) dostępna jest pod adresem http://znaczki.malopolska.pl
Celem projektu jest stworzenie serwisu dla filatelistów, który umożliwiałby im monitorowanie nowości i zmian na polskim rynku filatelistycznym. Elektroniczne źródła informacji z rynku filatelistycznego bywają skąpe w informacje oraz często nieaktualizowane na bieżąco. Brakuje również prostej wymiany informacji pomiędzy sympatykami znaczków, bardzo istotnej przy kompletowaniu zasobów. Zwieńczeniem byłaby działalność gospodarcza polegająca na okresowej subskrypcji katalogu znaczków drogą elektroniczną. W obecnej chwili wymagane jest fizyczne przeszukiwanie specjalistycznych sklepów filatelistycznych, co w mniejszych miejscowościach nie jest takie trywialne.
Wychodząc naprzeciw potrzebom, nasz portal miałby pełnić funkcję podstawowego źródła wyżej wymienionych informacji. Chcielibyśmy przy tym stworzyć szansę wzrostu popularności tego hobby poprzez ułatwienie dostępu do informacji dla potencjalnych zainteresowanych.
Użytkownicy w serwisie będą posiadali możliwość przeglądania katalogu online (zamiast w formie papierowej), wymiany informacji poprzez forum oraz komentarze o wszelkich aspektach działalności hobbystycznej oraz docelowo zamawiania katalogu drogą elektroniczną(w przyszłości).
Pozyskanie większej ilości odwiedzić będzie motywacją do dalszego rozwoju serwisu, pozyskania środków finansowych z odwiedzin strony oraz przyciągania nowych osób do filatelistyki w Polsce.
W polskim internecie istnieje niewiele rozwiązań dedykowanych filatelistom. Najbardziej popularnym jest Katalog znaczków pocztowych oraz serwis Filatelistyka.org. O ile pierwszy z wymienionych wydaje się obejmować zbliżoną funkcjonalność, jednak w nieco bardziej ogólnym zakresie, o tyle drugi jest portalem generalnie traktującym o filatelistyce, a nie konkretnie ukierunkowanym na katalog znaczków w formie online. Obie strony są projektami niekomercyjnymi.
Wymagane
Opcjonalne
Scenariusze dla gościa
Scenariusze dla użytkownika
Scenariusze dla administratora/moderatora
Diagram przypadków użycia
CREATE TABLE IF NOT EXISTS `admin` ( `admin_name` VARCHAR(20) CHARACTER SET utf8 NOT NULL, `admin_pass` VARCHAR(32) CHARACTER SET utf8 NOT NULL, `admin_email` VARCHAR(60) CHARACTER SET utf8 NOT NULL ) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_bin; CREATE TABLE IF NOT EXISTS `users` ( `user_name` VARCHAR(20) CHARACTER SET utf8 NOT NULL, `user_pass` VARCHAR(32) CHARACTER SET utf8 NOT NULL, `user_email` VARCHAR(60) CHARACTER SET utf8 NOT NULL ) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_bin; CREATE TABLE IF NOT EXISTS `users_not_confirmed` ( `users_not_confirmed_name` VARCHAR(20) NOT NULL, `users_not_confirmed_pass` VARCHAR(32) NOT NULL, `users_not_confirmed_email` VARCHAR(60) NOT NULL ) ENGINE=MyISAM DEFAULT CHARSET=utf8; CREATE TABLE IF NOT EXISTS `main_page_info` ( `main_page_info_title` VARCHAR(30) CHARACTER SET utf8 NOT NULL, `main_page_info_msg` VARCHAR(2048) CHARACTER SET utf8 NOT NULL, `main_page_info_user` VARCHAR(20) CHARACTER SET utf8 NOT NULL, `main_page_info_date` DATE NOT NULL, `main_page_info_time` TIME NOT NULL ) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_bin; CREATE TABLE IF NOT EXISTS `poststamps` ( `poststamp_id` INT(4) NOT NULL, `poststamp_title` VARCHAR(256) CHARACTER SET utf8 NOT NULL, `poststamp_price` FLOAT NOT NULL, `poststamp_print_tech` VARCHAR(32) CHARACTER SET utf8 NOT NULL, `poststamp_tooth` VARCHAR(11) CHARACTER SET utf8 NOT NULL, `poststamp_color` VARCHAR(32) CHARACTER SET utf8 NOT NULL, `poststamp_amount` INT(10) NOT NULL, `poststamp_release` DATE NOT NULL, `poststamp_additional` VARCHAR(2048) CHARACTER SET utf8 NOT NULL, `poststamp_user` VARCHAR(20) CHARACTER SET utf8 NOT NULL, `poststamp_date` DATE NOT NULL, `poststamp_time` TIME NOT NULL, `poststamp_checked` tinyint(1) NOT NULL ) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_bin; CREATE TABLE IF NOT EXISTS `stamps_comments` ( `stamp_comment_title` VARCHAR(30) NOT NULL, `stamp_comment_stampid` INT(4) NOT NULL, `stamp_comment_user` VARCHAR(20) NOT NULL, `stamp_comment_date` DATE NOT NULL, `stamp_comment_time` TIME NOT NULL, `stamp_comment_msg` VARCHAR(8192) NOT NULL ) ENGINE=MyISAM DEFAULT CHARSET=utf8;
Wydaje się, że baza danych spełnia założenia 3NF.
Do połączenia z bazą danych korzystaliśmy z prostej funkcji PHP, dla której wcześniej zdefiniowaliśmy parametry do łączenia z bazą danych
/** * Dane do łączenia z bazą danych. Jest to także miejsce, gdzie należy je zmienić, by portal łączył się * z naszą bazą danych. * * @param hostname nazwa hosa, gdzie znajduje się baza danych * @param username nazwa użytkownika, który łączy się z bazą * @param password hasło do bazy danych * @param database baza danych */ $hostname = "host"; $username = "uzytkownik"; $password = "haslo"; $database = "baza"; /** * Połączenie z bazą danych. */ $connection = mysql_connect($host,$db_user,$db_pass); mysql_select_db($db);
Same zapytania do bazy danych były wykonywane w najprostszy sposób:
/** * Dodawanie przez administratora informacji na stronie głównej portalu. */ $title = addslashes($POST['mainpagetopic']); $msg = addslashes($POST['mainpagemsg']); $user = $SESSION['login']; $mysqlquery = "INSERT INTO `$database`.`main_page_info` (`main_page_info_title`, `main_page_info_msg`, `main_page_info_user`, `main_page_info_date`, `main_page_info_time`) VALUES ('$title', '$msg', '$user', CURDATE(), NOW());"; mysql_query($mysqlquery); /** * Wypisywanie na stronie głównej informacji od administracji. */ $mysqlquery = "SELECT * FROM `main_page_info` ORDER BY `main_page_info_date` DESC, `main_page_info_time` DESC"; $result = mysql_query($mysqlquery); /** * Wprowadzanie informacji o znaczku do bazy (dodawnie nowego znaczka oraz modyfikacja istniejącego). */ $postid = addslashes($POST['postid']); $posttitle = addslashes($POST['posttitle']); $postprice = str_replace(",", ".", addslashes($POST['postprice'])); $postprinttech = addslashes($POST['postprinttech']); $posttooth = addslashes($POST['posttooth']); $postcolor = addslashes($POST['postcolor']); $postamount = addslashes($POST['postamount']); $postreleasedate = addslashes($POST['postreleasedate']); $postadditional = ($POST['postadditional'] == "Dodatkowe informacje") ? "" : addslashes($POST['postadditional']); $user = $SESSION['login']; $checked = (checkIfAdmin($SESSION['login'], $SESSION['pass'])) ? 1 : 0 ; $mysqlquery = "INSERT INTO `$database`.`poststamps` (`poststamp_id`, `poststamp_title`, `poststamp_price`, `poststamp_print_tech`, `poststamp_tooth`, `poststamp_color`, `poststamp_amount`, `poststamp_release`, `poststamp_additional`, `poststamp_user`, `poststamp_date`, `poststamp_time`, `poststamp_checked`) VALUES ('$postid', '$posttitle', '$postprice', '$postprinttech', '$posttooth', '$postcolor', '$postamount', '$postreleasedate', '$postadditional', '$user', CURDATE(), NOW(), $checked);"; mysql_query($mysqlquery); /** * Akceptacja/unieważnienie przez administratowa znaczka (zielona/czerwona ramka znaczka, świadcząca o jego wiarygodności). */ $postid = addslashes($GET['postnr']); $checked = ($GET['checked'] == "true") ? 1 : 0; $mysqlquery = "UPDATE `$database`.`poststamps` SET `poststamp_checked` = $checked WHERE `poststamp_id` = $postid;"; mysql_query($mysqlquery); /** * Wyciąganie informacji o konkretnym znaczku. */ $mysqlquery = "SELECT * FROM `poststamps` WHERE `poststamp_id` = $postnr"; $result = mysql_query($mysqlquery);
Po wykonaniu wszystkich zapytań połączenie z bazą danych jest zawsze zamykane:
/** * Zakończenie połączenia z bazą danych. */ if(!$connection) { mysql_close($connection); } /*if(!$connection)*/