Podstawy PHP i MySQL
Temat 15 - Zapisywanie i odczyt danych z bazy MySQL
Powrót do spisu tematów


W tym rozdziale:

  1. Zapisywanie danych pochodzących z formularza do bazy MySQL
  2. Wyświetlenie danych przechowywanych w bazie MySQL
Zapisywanie danych

Dane możemy zapisywać do bazy kierując do niej zapytanie insert.
Odpowiedni fragment kodu wpisującego do wcześniej przygotowanej tabeli w bazie MySQL może wygladać następująco:

$tabela='nazwa_tabeli';
$zapytanie="INSERT INTO $tabela SET imie='$imie', nazwisko='$nazwisko', data='$data', mail='$mail'";
mysql_query($zapytanie);

ćwiczenie 15_01 - Dopisanie rekordu do wcześniej utworzonej tabeli

  1. Należy umieścić na domowym serwerze WWW plik 15_01.php (do pobrania tutaj 15_01.zip)
  2. Należy ustawić parametry połączenia z serwerem baz (miejsca xxx) w pliku 15_01.php
  3. Należy uruchomić plik 15_01.php (przez http) i dopisać kilka danych.
  4. Należy sprawdzić istnienie danych za pomocą narzędzia PHPMyAdmin.

Odczyt danych przechowywanych w bazie

Aby odczytać dane z bazy skierujemy do niej zapytanie select.
Odpowiedni fragment kodu może wyglądać następująco:

$tabela='nazwa_tabeli';
$zapytanie = "SELECT * FROM $tabela'";
$wynik=mysql_query($zapytanie);
$row = mysql_fetch_array($wynik);
$nazwisko=$row['nazwisko'];
$imie=$row['imie'];

Spowoduje to jednak odczytanie wartości tylko jednego rekordu. Aby odczytać wszystkie rekordy, należy zastosować pętlę, która obróci się tyle razy, ile istnieje rekordów w tabeli.

$tabela='nazwa_tabeli';
$zapytanie = "SELECT * FROM $tabela";
$wynik=mysql_query($zapytanie);
while($row = mysql_fetch_array($wynik))
{
   $nazwisko=$row['nazwisko'];
   $imie=$row['imie'];
};

mysql_select_db($nazwa_bazy);

ćwiczenie 15_02 - Odczyt wszystkich rekordów z tabeli

  1. Należy umieścić na domowym serwerze WWW plik 15_02.php (do pobrania tutaj 15_02.zip)
  2. Należy ustawić parametry połączenia z serwerem baz (miejsca xxx) w pliku 15_02.php
  3. Należy uruchomić plik 15_02.php (przez http).
  4. Należy przeanalizować kod podanego skryptu.

Sortowanie wybieranych danych

Dane odczytywane z bazy można sortować już w samym procesie odczytu. Do zapytania select należy dodać parametr order by oraz nazwę pola (ewentualnie pól), według którego mają być sortowane dane.

$zapytanie = "SELECT * FROM $tabela ORDER BY nazwisko";
Efektem będzie sortowanie rosnąco (wg alfabetu) według pola nazwisko.

$zapytanie = "SELECT * FROM $tabela ORDER BY nazwisko, imie";
Efektem będzie sortowanie rosnąco (wg alfabetu) według pola nazwisko i imie. Czyli jeżeli powtórzą się takie same nazwiska, zapytanie zwróci rekordy według imion.

Parametr desc służy do sortowania malejącego (jeśli jest to pole tekstowe, sortowanie od ż do a).
$zapytanie = "SELECT * FROM $tabela ORDER BY nazwisko, imie DESC";

Selektywne wybieranie danych

Często interesują nas nie wszystkie dane, lecz te, które spełniają jakiś warunek. W samym zapytaniu wybierającym z bazy możemy dokonać filtrowania danych. W tym celu należy zastosować parametr where.

$zapytanie = "SELECT * FROM $tabela where data>'2007-01-01' ORDER BY nazwisko";
Efektem powyższego zapytania będzie wybranie rekordów, w których pole data jest starsze (większe) od daty 1 styczeñ 2007 r.

$zapytanie = "SELECT * FROM $tabela where data='2007-01-01' ORDER BY nazwisko";
Zapytanie to zwróci wynik w postaci rekordu (rekordów), które dokładnie odpowiadają podanej wartości pola "data".
UWAGA - tym razem operatorem porównania jest jeden znak równości, nie jak przy instrukcji warunkowej podwójny.

Zliczanie rekordów spełniających dany warunek

Zanim wyświetlimy dane, możemy policzyć, ile rekordów spełnia dany warunek. Chcemy na przykład wyświetlić tabelę pewnych danych. Możemy przed narysowaniem nagłówka tabeli sprawdzić, czy są dane do wyświetlenia.

Zliczenie rekordów może wyglądać następująco:

$tabela='nazwa_tabeli';
$zapytanie = "SELECT * FROM $tabela where data='2007-03-05'";
$wynik=mysql_query($zapytanie);
$znaleziono=mysql_num_rows($wynik);

Zadanie 16 - Księga gości oparta na bazie MySQL

  1. Należy umieścić na swoim koncie WWW plik zadanie16.php
  2. Należy utworzyć tabelę o nazwie "ksiega" z następującymi polami:
    id - pole z kluczem głównym o automatycznej numeracji,
    autor - krótkie pole tekstowe (tinytext) przechowujące dane o autorze wpisu,
    tresc - pole tekstowe (text) przechowujące treść postu,
    data - pole (datetime) przechowujące datę i czas umieszczenia postu.
  3. Pierwsza część projektu powinna wyświetlić formularz, który umożliwi wprowadzenie nazwy autora (nick) oraz treści postu.
  4. Druga część projektu powinna dopisać do bazy wprowadzone przez użytkownika dane wraz z datą ich umieszczenia.
  5. Trzecia część projektu powinna wyświetlić wszystkie posty wprowadzone do księgi gości (należy zadbać o przyjazny wygląd graficzny).
  6. Podobny projekt był przygotowany w zadaniu 12. W obecnym zadaniu różnica polega jedynie na sposobie przechowywania danych - zamiast pliku tekstowego należy wykorzystać bazę MySQL.

Zadanie 17 - Sonda oparta na bazie MySQL

  1. Należy umieścić na swoim koncie WWW plik zadanie17.php
  2. Należy utworzyć tabelę o nazwie "sonda" i zaprojektować układ jej pól.
  3. Sonda powinna działać podobnie, jak w ćwiczeniu 10_05.
  4. System sondy powinien uniemożliwiać oddanie głosu przez użytkownika posługującego się tym samym numerem IP w przeciągu jednej minuty.

 

Do zapamiętania

  1. Operatorem porównania w zapytaniu SELECT nie jest podwójny znak równości, lecz pojedynczy.

 


Powrót do spisu tematów