Both sides previous revision
Poprzednia wersja
Nowa wersja
|
Poprzednia wersja
|
pl:dydaktyka:ztb:2010:projekty:znaczki:start [2010/06/29 19:01] ztb2010 |
pl:dydaktyka:ztb:2010:projekty:znaczki:start [2019/06/27 15:50] (aktualna) |
[[dawid.boisse@gmail.com|Dawid Boisse]], Wojciech Myśliwiec | [[dawid.boisse@gmail.com|Dawid Boisse]], Wojciech Myśliwiec |
| |
| Projekt realizowano również na przedmiocie Technologie i programowanie WWW. |
| |
===== Streszczenie ===== | ===== Streszczenie ===== |
| |
===== Projektowanie tabel ===== | ===== Projektowanie tabel ===== |
| |
| <code sql> |
| 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; |
| </code> |
| |
===== Normalizacja tabel ===== | ===== Normalizacja tabel ===== |
* Mamy z nią do czynienia wtedy i tylko wtedy, gdy tabela jest w 2NF oraz gdy wszystkie pola nie będące polami klucza głównego są od niego zależne bezpośrednio. | * Mamy z nią do czynienia wtedy i tylko wtedy, gdy tabela jest w 2NF oraz gdy wszystkie pola nie będące polami klucza głównego są od niego zależne bezpośrednio. |
| |
===== Wybór Encji i ich atrybutów ===== | |
===== Diagram ERD ===== | |
| ===== Diagram ERD oraz wybór encji i ich atrybutów ===== |
| |
| {{:pl:dydaktyka:ztb:2010:projekty:znaczki:erd_znaczki.png|ERD dla portalu o znaczkach}} |
| |
| ===== Projektowanie operacji na danych ===== |
| |
| 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 |
| <code php> |
| /** |
| * 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); |
| </code> |
| Same zapytania do bazy danych były wykonywane w najprostszy sposób: |
| <code php> |
| /** |
| * 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); |
| </code> |
| Po wykonaniu wszystkich zapytań połączenie z bazą danych jest zawsze zamykane: |
| <code php> |
| /** |
| * Zakończenie połączenia z bazą danych. |
| */ |
| if(!$connection) { |
| mysql_close($connection); |
| } /*if(!$connection)*/ |
| </code> |
===== Implementacja (screeny, platforma, interfejsy, uzytkowanie, przyszłośc) ===== | ===== Implementacja (screeny, platforma, interfejsy, uzytkowanie, przyszłośc) ===== |
| |
| * Strona główna |
| {{:pl:dydaktyka:ztb:2010:projekty:znaczki:znaczek_01.png?200}} |
| * Dodawanie informacji na stronie głównej |
| {{:pl:dydaktyka:ztb:2010:projekty:znaczki:znaczek_02.png?200}} |
| * Katalog znaczków - strona informacyjna |
| {{:pl:dydaktyka:ztb:2010:projekty:znaczki:znaczek_03.png?200}} |
| * Katalog znaczków - informacje o znaczku |
| {{:pl:dydaktyka:ztb:2010:projekty:znaczki:znaczek_04.png?200}} |
| * Katalog znaczków - dodawanie informacji o znaczku |
| {{:pl:dydaktyka:ztb:2010:projekty:znaczki:znaczek_05.png?200}} |
| |
===== Literatura ===== | ===== Literatura ===== |
| |
* [[http://www.databaseanswers.org/data_models/]] | * [[http://www.databaseanswers.org/data_models/|Database Answers]] |
| * [[http://pl.wikipedia.org/wiki/Posta%C4%87_normalna_%28bazy_danych%29|Postać normalna (Wikipedia)]] |
* William Kent, "A Simple Guide to Five Normal Forms in Relational Database Theory", Communications of the ACM 26(2), Feb. 1983, 120-125. | * William Kent, "A Simple Guide to Five Normal Forms in Relational Database Theory", Communications of the ACM 26(2), Feb. 1983, 120-125. |