Nawigacja
Pierwsza wtyczka do PHP-Fusion v7 cz.4: Baza danych
Napisane przez Chemikpil dnia 13 marca 2011 15:52 · 0 komentarzy · 12150 czytań · · ·
Streszczenie:
Podstawą każdej aplikacja są dane, na których wykonywane są pewne operacje. Dane te muszą być gdzieś składowane, i przeważnie jest to baza danych. Nie inaczej sprawa wygląda, jeśli mówimy o wtyczkach w PHP-Fusion. Chcą stworzyć poważny skrypt, musimy uwzględnić wykorzystanie bazy danych i tym się dziś zajmiemy.Uwaga! Aby dobrze zrozumieć ten artykuł, wymagana jest choćby podstawowa wiedz na temat SQL.
Plik infusion.php
Na początek dokonamy edycji pliku instalacyjnego, w którym zadeklarujemy strukturę tabeli wykorzystywanej przez nasz skrypt. Przypominam, że zajmujemy się skryptem losującym cytaty. Zanim to jednak zrobimy, musimy poinformować instalator ile tabel będziemy tworzyć i usuwać.
$inf_newtables = 1; // Ilość tworzonych tabel
$inf_insertdbrows = 0; // Ilość wstawianych wierszy
$inf_altertables = 0; // Ilość zmienianych tabel
$inf_deldbrows = 1; // Ilość usuwanych tabel
W tabeli będziemy przechowywać treść cytatu i jego autora.
$inf_newtable[1] = DB_CYTATY." (
id SMALLINT(5) UNSIGNED NOT NULL AUTO_INCREMENT,
cytat VARCHAR(255) NOT NULL,
autor VARCHAR(100) NOT NULL,
PRIMARY KEY(id)
) TYPE=MyISAM;";
Przyjrzyjmy się bliżej składni. $inf_newtable to tablica w której trzymamy kolejne deklaracje tabel, DB_CYTATY to stała zastępująca nam nazwę tabeli o której powiem za chwile, a dalej to już tylko SQL.
Następnie dodajemy linijkę informującą deinstalator, które tabele ma usunąć.
$inf_droptable[1] = DB_CYTATY;
Poza wymienionymi sposobami interakcji z bazą danych są jeszcze dwa inne: wstawianie nowych kolumn...
$inf_altertable[1] = DB_CYTATY." ADD year DATE";
... oraz wstawianie nowych wierszy:
$inf_insertdbrow[1] = DB_CYTATY."(cytat, autor) VALUES('Człowiek jest tym, o czym przez cały dzień myśli', 'Ralph Waldo Emerson')";
Oczywiście o każdym takim zabiegu należy informować instalator, przypisując większą liczbę do zmiennych z początku artykułu.
Plik infusion_db.php
W pliku infusion_db.php definiujemy stałe, które wykorzystywane były w pliku infusion.php oraz będą używane w pozostałych plikach naszej aplikacji zamiast całych nazw tabel. Poniżej poprawna zawartość pliku infusion_db.php:
if (!defined("IN_FUSION")) { die("Access Denied"); }
if (!defined("DB_CYTATY")) {
define("DB_CYTATY", DB_PREFIX."cytaty");
}
Po utworzeniu tego pliku musimy go dodać jeszcze do naszego instalatora:
include INFUSIONS."cite_panel/infusion_db.php";
... do tego pamiętajmy by wcześniej odinstalować wcześniejszą wersje wtyczki i możemy zainstalować nową, wykorzystującą bazę danych.Warto jeszcze sprawdzić prze PHPMyAdmin czy tabele faktycznie zostały utworzone, tak dla większej pewności.
Poniżej prezentuje poprawny plik infusion.php:
<?php
if (!defined("IN_FUSION")) { die("Access Denied"); }
include INFUSIONS."cite_panel/infusion_db.php";
if (file_exists(INFUSIONS."cite_panel/locale/".$settings['locale'].".php")) {
include INFUSIONS."cite_panel/locale/".$settings['locale'].".php";
}
$inf_title = "Cite panel"; // Nazwa infusiona
$inf_description = $locale['HL102']; // Opis infusiona
$inf_version = "1.0"; // Wersja infusiona
$inf_developer = "Autor"; // Autor infusiona
$inf_email = "adres@email.com"; // Email autora
$inf_weburl = "www.twojastrona.pl"; // Strona domowa autora
$inf_folder = "cite_panel"; // Folder w którym znajdują się pliki infusiona
$inf_newtables = 1; // Ilość tworzonych tabel
$inf_insertdbrows = 0; // Ilość wstawianych wierszy
$inf_altertables = 0; // Ilość zmienianych tabel
$inf_deldbrows = 1; // Ilość usuwanych tabel
$inf_newtable[1] = DB_CYTATY." (
id SMALLINT(5) UNSIGNED NOT NULL AUTO_INCREMENT,
cytat VARCHAR(255) NOT NULL,
autor VARCHAR(100) NOT NULL,
PRIMARY KEY(id)
) TYPE=MyISAM;";
$inf_droptable[1] = DB_CYTATY;
$inf_sitelink[1] = array(
"title" => $locale['HL103'], // Tytuł linku
"url" => "cite_index.php", // Adres pliku
"visibility" => "0" //Widoczność 0 - wszyscy, 1 - zalogowani, 2 - admin
);
?>
Zapytania
By wykonać jakieś zapytanie do bazy danych, należy skorzystać z funkcji dbquery. Jako argument przyjmuje ona zapytanie w języku SQL, np takie:
dbquery("SELECT * FROM ".DB_CYTATY." ");
Takie zapytanie warto wywoływać jako warunek if, gdyż w przypadku niepowodzenia funkcja zwraca false, dzięki czemu będziemy mogli obsłużyć po swojemu tego typu zajścia.
Inną ważna funkcją jest dbarray, która zwraca wyniki w postaci tablicy asocjacyjnej. Przykład: mamy tabelę o takiej strukturze:
id | imie | nazwisko
Chcąc teraz pobrać i wyświetlić wszystkie imiona, najpierw musimy wykonać zapytanie SELECT, przy pomocy dbquery, a potem wyniki zwrócić w postaci tablicy asocjacyjnej przy pomocy dbarray:
$resutl = dbquery("SELECT * FROM ".DB_OSOBY." ");
while($data = dbarray($result)) {
echo $data['imie'];
}
Oczywiście PHP-Fusion posiada więcej wbudowanych funkcji obsługujących bazę, ale po więcej informacji odsyłam do dokumentacji:
Przykład
Tu powinien znaleźć się przykład bazujący na naszej aplikacji wyświetlającej losowy cytat. Zostawiam to jednak jako ćwiczenie w myśl pytania: "jak chcesz zdobyć wiedzę inaczej niż przez praktykę?". W następnej części zgłębimy tajniki administracji oraz bezpieczeństwa (najprawdopodobniej połączę dwie ostatnie części).
Komentarze
Dodaj komentarz
Oceny
Zaloguj się lub zarejestruj, żeby móc zagłosować.
Świetne! | 100% | [2 głosy] | |
Bardzo dobre | 0% | [0 głosów] | |
Dobre | 0% | [0 głosów] | |
Średnie | 0% | [0 głosów] | |
Słabe | 0% | [0 głosów] |