Autor: Joanna Karwowska
Wygodniejszym i wydajniejszym sposobem przechowywania i korzystania z dużej ilości danych zapisanych na serwerze jest współpraca z relacyjną bazą danych. 2
1. Utworzyć bazę danych. 2. Zaprojektować tabele. 3. Wypełnić danymi (lub nie, jeśli chcemy pobierać dane z formularza). 4. Połączyć się z serwerem MySQL. 5. Wybrać bazę danych. 6. Wykonać zaplanowane prace (odebrać dane z formularza, przesłać zapytania związane z tworzeniem, modyfikowaniem i usuwaniem tabel). 7. Zamknąć połączenie z bazą danych. 3
Odbywa się za pomocą funkcji mysql_connect() mysql_connect(adres_serwera, nazwa_użytkownika, hasło); (adres IP lub nazwa hosta) W przypadku prawidłowego połączenia funkcja zwraca identyfikator połączenia. Jeżeli połączenie nie zostanie nawiązane, funkcja zwraca wartość FALSE. $polaczenie = mysql_connect( localhost, root, ); 4
Odbywa się za pomocą funkcji: mysql_select_db() @mysql_select_db( nazwa_bazy, $polaczenie); Umieszczenie znaku @ przed nazwą funkcji zapobiega wyświetleniu komunikatu o błędzie w wypadku, gdy baza danych nie zostanie odnaleziona. np. @mysql_select_db( osoby, $polaczenie); 5
mysql_set_charset( utf8 ); 6
Funkcją związaną z wykonaniem zapytania jest mysql_query(). Funkcja jako argument przyjmuje zmienną wskazującą na zapytanie napisane w języku obsługującym bazę. $zapytanie = select * from nazwa_tabeli ; mysql_query($zapytanie); Wynik zapytania jest najczęściej tablicą. 7
W przypadku instrukcji połączenia z bazą, wyboru bazy i wykonania zapytania warto wprowadzić dodatkową konstrukcję or die(), która w przypadku niepowodzenia pierwszej instrukcji wyprowadzi w oknie strony informację tekstową i przerwie działanie skryptu. funkcja (parametry) or die ( komunikat ); np. mysql_select_db() or die ( Błąd połączenia z bazą ); 8
Po wykonaniu pracy w bazie danych należy pamiętać o zamknięciu połączenia: mysql_close($polaczenie); 9
Funkcja mysql_fetch_row() jest najczęściej używana do czytania jednego wiersza danych. Po zwróceniu aktualnego wiersza odpowiedzi, następuje przejście do następnego. Jeżeli więc będziemy wywoływać mysql_fetch_row() w pętli, to dostaniemy tablice zawierające kolejne wiersze tabeli zwróconej przez zapytanie. W momencie dotarcia do końca tabeli, funkcja zwróci FALSE. 10
Funkcja podobna do poprzedniej, z tym, że kluczami zwracanej tablicy są nazwy kolumn z SQL-a (ewentualnie zmienione w zapytaniu). Przykład zapytania ze zmianą nazw kolumn: $w = mysql_query('select wiek AS latka, imie AS cokolwiek FROM tabela'); Tablica zwracana przez mysql_fetch_assoc() wygląda w tym przypadku tak: 'latka' => [wiek] 'cokolwiek' => [imie] Tak samo jak dla mysql_fetch_row(), po zwróceniu aktualnego wiersza odpowiedzi, następuje przejście do następnego. 11
Funkcja mysql_fetch_array zastosowana w pętli while powoduje wyświetlenie wszystkich rekordów jakie znajdują się w tabeli. np. while ($wynik = mysql_fetch_array($zapytanie)) { echo $wynik["nazwa_panstwa"]. <br /> ; } 12
Ta z kolei funkcja pozwala na dostęp do pojedynczego pola tabeli zwróconej w odpowiedzi na zapytanie. Generalnie jest ona wolniejsza od poprzednich, więc jeżeli przetwarzamy całe wiersze danych, nie jest zalecana. Zawsze lepiej jest ograniczyć zakres danych w zapytaniu do bazy, niż w samym skrypcie PHP. Dzięki temu mniej danych jest przesyłanych z bazy do skryptu, zmniejszamy też zużycie pamięci. Ograniczenie zakresu danych w skrypcie jest usprawiedliwione tylko wtedy, gdy kryterium jest na tyle skomplikowane, że trudno je zapisać w zapytaniu SQL. 13
Funkcja mysql_affected_rows() podaje ilość wierszy tablicy w bazie danych zmodyfikowanych przez zapytania takie jak UPDATE, DELETE, czy DROP. 14
1. Wyświetlanie danych z bazy (8-3.php). 2. Usuwanie danych z bazy (8z2.php). 3. Dodawanie rekordów do bazy danych (8z3.php). 4. Edycja rekordów w bazie danych (8z4.php). 5. Wyszukiwanie danych w bazie (8z4a.php). 15
Tabelę wyświetlającą dane uzupełnij o połączenie skasuj. Wywoła ono ten sam skrypt, z parametrem co, podkreślającym, że należy przeprowadzić usuwanie danych, oraz id, podającym numer rekordu do usunięcia. 16
Pod wyświetloną zawartością bazy przygotuj formularz z możliwością wpisania nowego rekordu. W ukrytym polu ustaw zmienną co (będzie określać operację, w przypadku dopisywania rekordu - dodaj). Dopisywanie jest realizowane jedynie wtedy, gdy każde z trzech pól zostanie wypełnione (nie chcesz mieć przecież niekompletnej książki telefonicznej). 17
W tabeli zawierającej wyświetlane rekordy poza połączeniem pozwalającym na usunięcie dowolnego z nich, wstaw też drugie, umożliwiające przejście do edycji rekordu. Dane (zmienne co i id) przekażesz metodą GET. Zmiennej $_GET[ co ] nadaj wartość edytuj, co będzie oznaczało, że należy wyświetlić formularz edycji rekordu. Zmienna $_GET[ co ] będzie mogła przyjąć dwie nowe wartości ( edytuj i popraw ). 18
Pierwsza z nich to edytuj. Należy odczytać z bazy danych konkretny rekord (dzięki wykorzystaniu zapytania SELECT z określonym warunkiem WHERE nr= $_GET[ id ]). Po odczytaniu danych (jednego rekordu) wyświetlasz formularz, wstawiając do pól domyślne (odczytane z bazy) wartości danych. Zmiennej $_GET[ co ] (przekazywanej dalej w polu ukrytym, czyli stającej się zmienną $_POST[ co ]) nadajesz wartość popraw. 19
Jeżeli odkryjesz, że $_POST[ co ] przybiera wartość popraw, oznacza to, że odczytałeś z formularza poprawione dane. Wykonujesz więc operację UPDATE na bazie. Musisz jej dokonać tylko na jednym rekordzie (jego numer został w poprzednim formularzu przekazany przez ukryte pole), więc korzystasz z warunku: WHERE nr= $_POST[ id ]. 20
Trzeba wprowadzić formularz, który pozwoli na wpisanie wyszukanej frazy (pole to nazwij fraza). Następnie należy przeprowadzić selekcję danych, czyli wybrać tylko te rekordy, które pasują do podanej frazy. Można to wykonać na dwa sposoby: odpowiednie skonstruowanie zapytania SELECT (a dokładniej jego sekcji WHERE) spowoduje, że zapytanie zwróci jedynie te rekordy, które pasują do szukanej frazy. metodą wyszukiwania podciągów w ciągu znaków. 21
Skorzystaj z metody wyszukiwania podciągów w ciągu znaków. W celu zbadania podobieństwa frazy z łańcuchem wykorzystaj funkcję stristr(). Wyszukuje ona wystąpienie łańcucha stanowiącego drugi argument w pierwszym, bez zwracania uwagi na wielkość znaków. Na przykład: if (!($_POST[ fraza ]) (stristr ($imie.$nazwisko, $_POST[ fraza ]))) 22
Dziękuję za uwagę! Zapraszam do wykonania ćwiczeń praktycznych! 23