Informatyka dla klas III

Baza danych w PHP

Język PHP posiada wiele funkcji, które ułatwiają współpracę z serwerami baz danych. W ramach zajęć utworzymy prostą bazę danych oraz interfejs w PHP do jej przeglądania. Nie jesteśmy w stanie w ramach czasowych omówić tego zagadnienia w całości, jednakże podane tutaj informacje staną się dobrą bazą do samodzielnego rozszerzenia swojej wiedzy. W sieci Internet znajdziesz mnóstwo kursów programowania baz danych w PHP.
Projektowana baza danych będzie przechowywała proste informacje o cyfrowych układach scalonych. Do jej utworzenia wykorzystamy poniższe zestawienie:
00;bramki NAND;DIL14
01;bramki NAND;DIL14
02;bramki NOR;DIL14
03;bramki NAND;DIL14
04;bramki NOT;DIL14
05;bramki NOT;DIL14
06;bramki NOT;DIL14
07;bufory;DIL14
08;bramki AND;DIL14
09;bramki AND;DIL14
10;bramki NAND;DIL14
11;bramki AND;DIL14
12;bramki NAND;DIL14
13;bramki NAND;DIL14
14;bramki NOT;DIL14
15;bramki AND;DIL14
16;bramki NOT;DIL14
17;bufory;DIL14
18;bramki NAND;DIL14
19;bramki NOT;DIL14
20;bramki NAND;DIL14
21;bramki AND;DIL14
22;bramki NAND;DIL14
23;bramki NOR;DIL16
24;bramki NAND;DIL14
25;bramki NOR;DIL14
26;bramki NAND;DIL14
27;bramki NOR;DIL14
28;bramki NOR;DIL14
30;bramki NAND;DIL14
31;bramki;DIL16
32;bramki OR;DIL14
33;bramki NOR;DIL14
34;bufory;DIL14
35;bufory;DIL14
36;bramki NOR;DIL14
37;bramki NAND;DIL14
38;bramki NAND;DIL14
39;bramki NAND;DIL14
40;bramki NAND;DIL14
41;dekoder;DIL16
42;dekoder;DIL16
43;dekoder;DIL16
44;dekoder;DIL16
45;dekoder;DIL16
46;dekoder;DIL16
47;dekoder;DIL16
48;dekoder;DIL16
49;dekoder;DIL14
50;bramki AND-OR-INVERT;DIL14
51;bramki AND-OR-INVERT;DIL14
52;bramki AND-OR;DIL14
53;bramki AND-OR-INVERT;DIL14
54;bramki AND-OR-INVERT;DIL14
55;bramki AND-OR-INVERT;DIL14
56;dzielnik;DIL8
57;dzielnik;DIL8
58;bramki AND-OR;DIL14
59;bramki AND-OR-INVERT;DIL14
60;ekspandery;DIL14
61;ekspandery;DIL14
62;ekspandery;DIL14
63;bramki;DIL14
64;bramki AND-OR-INVERT;DIL14
65;bramki AND-OR-INVERT;DIL14
68;liczniki;DIL16
69;liczniki;DIL16
70;przerzutniki JK;DIL14
71;przerzutniki RS;DIL14
72;przerzutniki JK;DIL14
73;przerzutniki JK;DIL14
74;przerzutniki D;DIL14
75;przerzutniki D;DIL16
76;przerzutniki JK;DIL16
77;przerzutniki D;DIL14
78;przerzutniki JK;DIL14
79;przerzutniki D;DIL14
80;sumatory;DIL14
81;RAM;DIL14
82;sumatory;DIL14
83;sumatory;DIL16
84;RAM;DIL16
85;komparator;DIL16
86;bramki EXCLUSIVE-OR;DIL14
87;bramki;DIL14
88;ROM;DIL16
89;RAM;DIL16
90;liczniki;DIL14
91;rejestr;DIL14
92;liczniki;DIL14
93;liczniki;DIL14
94;rejestr;DIL16
95;rejestr;DIL14
96;rejestr;DIL16
97;multiplikator;DIL16
98;rejestr;DIL16
99;rejestr;DIL16

Przedstawia ono około 100 układów cyfrowych. Każdy wiersz definiuje jeden układ scalony. Definicja składa się z trzech części, które są rozdzielone średnikami. Na początku mamy numer układu, który określa jego zawartość. Później jest krótki opis, a na końcu znajduje się informacja o obudowie.

Nazwa układu cyfrowego zbudowana jest następująco:

 

SN74XX

SN - oznaczenie producenta, SN = Texas Instruments
74 - seria, 74 oznacza układ cyfrowy do zastosowań cywilnych, 54 do zastosowań wojskowych
XX - jest numerem wewnątrz serii, który określa zawartość układu

Obudowa DILnn określa ilość wyprowadzeń układu scalonego, które są ułożone w dwóch rzędach (ang. DIL = Dual In Line):

http://www.eliptor.pl/galerie/p/pamiec-eeprom-24c1024-mi_636.jpg

DIL8

http://www.elektro-hofman.cz/_obchody/elektro-hofman.shop5.cz/prilohy/4/ne556-cmos-dil14-2xcasovac-0.jpg.big.jpg
DIL14
http://www.cetronic.es/sqlcommerce/ficheros/dk_93/productos/78-26ls31-3.jpg
DIL16

 

Dane podane powyżej nie nadają się jeszcze do zastosowania w bazie danych, ponieważ zawierają elementy powtarzające się. Najpierw będziemy musieli je przetworzyć. W tym celu napiszemy odpowiedni program w języku PHP, który wczyta dane i utworzy na ich podstawie trzy pliki na dysku:
dil.txt - zawiera definicje wyprowadzeń. Składa się z tylu wierszy, ile różnych typów wyprowadzeń zastosowano w danych wejściowych. W każdym wierszu zdefiniowany ma być jeden typ w sposób następujący: numer porządkowy;DILnn.

Na przykład:

1;DIL14
2;DIL8
...

opisy.txt - zawiera opisy układów. Składa się z tylu wierszy, ile różnych opisów znajduje się w danych wejściowych. W każdym wierszu zdefiniowany ma być jeden opis w sposób następujący: numer porządkowy;opis

Na przykład:

1;bramki NAND
2;bramki NOR
...

us.txt - zawiera definicje układów. Plik ten odpowiada danym wejściowym, w których zamieniono opisy i typ wyprowadzeń na numery zdefiniowane w plikach dil.txt i opisy.txt. Każdy wiersz ma definiować jeden układ scalony w sposób następujący:

XX;Y;Z
XX - numer układu od 00 do 99
Y - numer opisu
Z - numer typu wyprowadzeń

Na przykład:

00;1;1

00 - układ SN7400
1 - opis: bramki NAND
1 - obudowa DIL14

 

Poniższy skrypt umieść w sekcji BODY pliku index.php w katalogu C:/wamp/www, po czym w polu adresowym przeglądarki wpisz localhost, aby skrypt został uruchomiony przez serwer WWW:

Skrypt działa następująco:

Najpierw wczytujemy dane z pliku dane.txt do tablicy $dane. Każdy element tej tablicy jest wierszem z pliku i zawiera kolejno informacje o numerze układu, o jego rodzaju oraz o typie obudowy. Informacje te są rozdzielone średnikami.

 

W pętli rozbijamy każdy wiersz (czyli każdy element tablicy $dane, dostępny wewnątrz pętli w zmiennej $v) na trzy składowe, które umieszczamy kolejno:

  • w zmiennej $n, którą ignorujemy – tutaj trafi numer układu, np. 00, 01, ..., 99.
  • na końcu tablicy $opis, tutaj trafi opis układu, np. bramki NAND
  • na końcu tablicy $obudowa, tutaj trafi opis obudowy, np. DIL8, DIL14

Po wykonaniu tych operacji z tablic $opis i $obudowa zostaną usunięte duplikaty, każdy opis będzie zatem występował dokładnie jeden raz.

 

Obie tablice sortujemy naturalnie (bez uwzględniania wielkości liter, wg kolejnych numerów). Elementy będą posortowane, jednakże ich indeksy będą w nieładzie.

 

Te dwie pętle utworzą nowe tablice $opis2 i $obudowa2, w których elementy i indeksy będą uporządkowane.

 

Informacje o obudowach zapisujemy w pliku dil.txt. W każdym wierszu będzie numer oraz opis obudowy rozdzielone średnikiem

 

Informacje o typie układu zapisujemy w pliku opisy.txt. W każdym wierszu zostanie zapisany numer oraz opis.

 

I na koniec zapisujemy dane w pliku us.txt. Każdy wiersz tego pliku zawiera numer układu scalonego, numer opisu w tablicy $opis2, numer opisu obudowy w tablicy $obudowa2.

 

Pliki dil.txt, opisy.txt oraz us.txt przekopiuj do katalogu C:\tmp. Teraz musimy w bazie danych utworzyć odpowiednie tabele, w których będziemy przechowywali dane o układach scalonych. Tabel będzie trzy:
 
obudowy
id_ob obudowa
INT VARCHAR(5)

 

opisy
id_op opis
INT VARCHAR(50)

 

scalaki
typ op ob
VARCHAR(4) INT INT

 

W tabeli scalaki pole op zawiera numer id_op z tabeli opisy, a pole id_ob zawiera numer id_ob z tabeli obudowy.

Zaloguj się do serwera SQL i utwórz tabele (polecenia wpisuj w Notatniku i kopiuj poprzez schowek do wiersza poleceń serwera SQL - w razie pomyłki będzie mniej pisania):

Gdy tabele zostaną utworzone, należy wczytać do nich dane z plików, które utworzyliśmy programem w C++ i zapisaliśmy w katalogu c:\tmp.

Sprawdź zawartość bazy danych poleceniem.

Gdy mamy już działającą bazę danych, możemy zacząć komunikować się z nią z poziomu skryptów PHP.

Utwórz plik index.html, który będzie wywoływał odpowiednie pliki php.

W sekcji body pliku all.php wpisz skrypt:

 

Schemat współpracy skryptu PHP z serwerem SQL jest następujący:

Najpierw łączymy się z serwerem za pomocą funkcji @mysql_connect(). Wymaga ona trzech parametrów:

  • adresu serwera SQL (w naszym przypadku będzie to localhost, czyli serwer na tym samym komputerze, na którym jest wykonywany skrypt PHP)
  • nazwy konta użytkownika
  • hasła użytkownika

Jeśli połączenie się powiedzie, to funkcja zwróci wartość różną od zera. Jeśli zwróci zero, to połączenie nie zostało nawiązane. W takim przypadku kończymy działanie skryptu poleceniem exit.

 

Gdy połączenie z serwerem SQL zostanie nawiązane, wybieramy bazę danych, która przechowuje nasze dane. Dokonujemy tego za pomocą funkcji @mysql_select_db. W przypadku niepowodzenia, funkcja zwróci zero. W takim razie kończymy działanie skryptu poleceniem exit.

 

Gdy uda się wybrać bazę danych, wysyłamy do niej kwerendę wybierającą za pomocą funkcji @mysql_query. Wynik zapamiętujemy w zmiennej. Jeśli wynik wynosi zero, to kwerenda nie zwróciła żadnych danych.

 

Inaczej pobieramy z kwerendy kolejne wiersze i umieszczamy je w tablicy $układ. Dostęp do poszczególnych pól mamy za pomocą indeksów tekstowych, takich samych jak w wysłanej kwerendzie. Przetwarzamy dane z tablicy, umieszczając je w tabelce HTML.

 

Ćwiczenie

Napisz skrypty obsługujące pozostałe dwie operacje:

  • Wyświetlanie wg typu: użytkownik wprowadza w polu formularza ostatnie dwie cyfry numeru układu scalonego. Dane te zostają przesłane do skryptu, który połączy się z bazą danych i pobierze z niej opis oraz rodzaj obudowy danego układu scalonego i wyświetli to na stronie.
  • Wyświetlanie wg rodzaju obudowy: użytkownik wprowadza w polu formularza typ obudowy (DIL8, DIL14 lub DIL16). Dane te zostają przesłane do skryptu, który połączy się z bazą danych i pobierze z niej informacje o numerach i opisach wszystkich układów scalonych, które posiadają dany rodzaj obudowy.


List do administratora Serwisu Edukacyjnego Nauczycieli I LO

Twój email: (jeśli chcesz otrzymać odpowiedź)
Temat:
Uwaga: ← tutaj wpisz wyraz  ilo , inaczej list zostanie zignorowany

Poniżej wpisz swoje uwagi lub pytania dotyczące tego rozdziału (max. 2048 znaków).

Liczba znaków do wykorzystania: 2048

 

W związku z dużą liczbą listów do naszego serwisu edukacyjnego nie będziemy udzielać odpowiedzi na prośby rozwiązywania zadań, pisania programów zaliczeniowych, przesyłania materiałów czy też tłumaczenia zagadnień szeroko opisywanych w podręcznikach.



   I Liceum Ogólnokształcące   
im. Kazimierza Brodzińskiego
w Tarnowie

©2017 mgr Jerzy Wałaszek

Dokument ten rozpowszechniany jest zgodnie z zasadami licencji
GNU Free Documentation License.