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

obrazek

DIL8

obrazek
DIL14
obrazek
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:

obrazek

Skrypt działa następująco:

obrazek

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.

 

obrazek

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

obrazek

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.

 

obrazek

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.

 

obrazek

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

 

obrazek

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

 

obrazek

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

 

obrazek

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

obrazek

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.

obrazek

Sprawdź zawartość bazy danych poleceniem.

obrazek

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.

obrazek

W sekcji body pliku all.php wpisz skrypt:

obrazek

 

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

obrazek

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.

 

obrazek

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.

 

obrazek

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.

 

obrazek

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.

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

©2021 mgr Jerzy Wałaszek

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

Pytania proszę przesyłać na adres email: i-lo@eduinf.waw.pl

W artykułach serwisu są używane cookies. Jeśli nie chcesz ich otrzymywać,
zablokuj je w swojej przeglądarce.
Informacje dodatkowe