Wolisz proste rozwiązania? Możesz liczyć na CodeIgniter!
CodeIgniter to ni mniej, ni więcej, tylko doskonały framework, którzy przyda się wszystkim programistom języka PHP. Pozwala on na szybkie i efektywne zaimplementowanie tych elementów stron czy aplikacji internetowych, których samodzielne przygotowanie jest trudne i czasochłonne. Jego główne zalety to niewielkie wymagania co do serwera, na którym ma działać oprogramowanie, zapewnienie logicznego i wygodnego rozdziału elementów strony, brak potrzeby konfiguracji oraz świetna dokumentacja i życzliwa społeczność użytkowników, chętnie dzielących się z innymi swoim doświadczeniem w pracy z programem.
Ta książka, przeznaczona zarówno dla początkujących, jak i zaawansowanych programistów PHP pozwoli Ci zapoznać się z wieloma aspektami używania CodeIgniter. Znajdziesz tu informacje o instalacji frameworka i jego strukturze. Zobaczysz, jak działają klasy systemu, jakie funkcje oraz metody warto wykorzystać w różnych sytuacjach i jak działają sterowniki systemu do bazy danych. Będziesz mógł także przećwiczyć tworzenie aplikacji z użyciem tego zestawu bibliotek. Programowanie z frameworkiem CodeIgniter to czysta przyjemność!
Instalacja CodeIgniter na serwerze
Używanie frameworka (model, widok, kontroler)
Klasy systemu
Sterowniki systemu dla bazy danych
Pomocnicy (funkcje)
Tworzenie pierwszej aplikacji
Zyskaj czas z CodeIgniter!
Darmowy fragment publikacji:
Wszelkie prawa zastrzeżone. Nieautoryzowane rozpowszechnianie całości
lub fragmentu niniejszej publikacji w jakiejkolwiek postaci jest zabronione.
Wykonywanie kopii metodą kserograficzną, fotograficzną, a także kopiowanie
książki na nośniku filmowym, magnetycznym lub innym powoduje naruszenie
praw autorskich niniejszej publikacji.
Wszystkie znaki występujące w tekście są zastrzeżonymi znakami firmowymi
bądź towarowymi ich właścicieli.
Autor oraz Wydawnictwo HELION dołożyli wszelkich starań, by zawarte
w tej książce informacje były kompletne i rzetelne. Nie biorą jednak żadnej
odpowiedzialności ani za ich wykorzystanie, ani za związane z tym ewentualne
naruszenie praw patentowych lub autorskich. Autor oraz Wydawnictwo HELION
nie ponoszą również żadnej odpowiedzialności za ewentualne szkody wynikłe
z wykorzystania informacji zawartych w książce.
Redaktor prowadzący: Ewelina Burska
Projekt okładki: Michał Wójcik
Materiały graficzne na okładce zostały wykorzystane za zgodą Shutterstock.
Wydawnictwo HELION
ul. Kościuszki 1c, 44-100 GLIWICE
tel. 32 231 22 19, 32 230 98 63
e-mail: helion@helion.pl
WWW: http://helion.pl (księgarnia internetowa, katalog książek)
Drogi Czytelniku!
Jeżeli chcesz ocenić tę książkę, zajrzyj pod adres
http://helion.pl/user/opinie?codeig
Możesz tam wpisać swoje uwagi, spostrzeżenia, recenzję.
Materiały do książki znajdują się pod adresem:
ftp://ftp.helion.pl/przyklady/codeig.zip
ISBN: 978-83-246-4964-8
Copyright © Helion 2013
Printed in Poland.
• Kup książkę
• Poleć książkę
• Oceń książkę
• Księgarnia internetowa
• Lubię to! » Nasza społeczność
Spis treĈci
Wstöp ............................................................................................ 11
Rozdziaä 1. Instalacja CodeIgnitera na serwerze ............................................... 13
Instalacja oprogramowania na serwerze ......................................................................... 14
Aktualizacja CodeIgnitera .............................................................................................. 14
Praca z ksiąĪką ............................................................................................................... 15
Rozdziaä 2. Korzystanie z frameworku ............................................................... 17
Model, widok, kontroler ................................................................................................. 17
Adresy URL ................................................................................................................... 18
Adresy URL dla wyszukiwarek ...................................................................................... 18
Kontroler (controller) ..................................................................................................... 19
Definicja domyĞlnego kontrolera (default_controller) ............................................. 19
Metody prywatne (private) ....................................................................................... 20
Umieszczanie kontrolerów w folderach ................................................................... 20
Automatyczne áadowanie (__construct) ................................................................... 21
Nazwy zastrzeĪone ................................................................................................... 21
Widok (view) .................................................................................................................. 21
àadowanie widoku do kontrolera (load- view) ....................................................... 22
àadowanie kilku widoków ....................................................................................... 23
Umieszczanie widoków w folderach ........................................................................ 23
Dodawanie danych do widoku ................................................................................. 23
Przekazywanie widoków jako danych ...................................................................... 24
Model (model) ................................................................................................................ 24
Pierwszy model ........................................................................................................ 25
àadowanie modelu (load- model) ........................................................................... 25
Umieszczanie modeli w katalogu ............................................................................. 26
DostĊp do metod modelu .......................................................................................... 26
àadowanie bibliotek (load- library) ............................................................................... 27
àadowanie klas pomocniczych (load- helper) ............................................................... 28
àadowanie sterowników (load- driver) ......................................................................... 28
Automatyczne áadowanie zasobów ................................................................................. 29
Routowanie URL ............................................................................................................ 29
Ustanawianie wáasnych reguá ................................................................................... 30
ZastrzeĪone nazwy wáaĞciwoĞci ............................................................................... 30
Obsáuga báĊdów .............................................................................................................. 31
Funkcja show_error() ............................................................................................... 31
Funkcja show_404() ................................................................................................. 32
Funkcja log_message() ............................................................................................. 32
4
CodeIgniter. Zaawansowane tworzenie stron w PHP
Zapisywanie stron w plikach tymczasowych (cache) ..................................................... 33
Metoda cache() ......................................................................................................... 34
Usuwanie plików tymczasowych ............................................................................. 34
BezpieczeĔstwo .............................................................................................................. 34
Zabezpieczanie adresów URL .................................................................................. 35
Opcja register_globals .............................................................................................. 35
Opcja error_reporting ............................................................................................... 35
Opcja magic_quotes_runtime ................................................................................... 36
Najlepsze praktyki .................................................................................................... 36
Rozdziaä 3. Klasy systemowe ........................................................................... 37
WydajnoĞü systemu (benchmark) ................................................................................... 37
WyĞwietlanie informacji o zuĪyciu pamiĊci podczas generowania strony ............... 38
Kalendarz (calendar) ....................................................................................................... 39
Metoda generate() .................................................................................................... 39
Wyszczególnianie dat w kalendarzu ......................................................................... 40
Opcje wyĞwietlania kalendarza ................................................................................ 41
Opcje konfiguracji kalendarza .................................................................................. 42
Dostosowywanie wyglądu kalendarza ...................................................................... 42
Konfiguracja (config) ..................................................................................................... 43
Metoda load() ........................................................................................................... 44
Metoda item() ........................................................................................................... 44
Metoda set_item() .................................................................................................... 45
Metoda site_url() ...................................................................................................... 45
Metoda base_url() .................................................................................................... 46
Metoda system_url() ................................................................................................ 46
E-mail (email) ................................................................................................................. 46
Metoda from() .......................................................................................................... 47
Metoda reply_to() ..................................................................................................... 47
Metoda cc() .............................................................................................................. 47
Metoda bcc() ............................................................................................................ 47
Metoda subject() ....................................................................................................... 47
Metoda message() .................................................................................................... 48
Metoda set_alt_message() ........................................................................................ 48
Metoda clear() .......................................................................................................... 48
Metoda attach() ........................................................................................................ 48
Metoda send() ........................................................................................................... 48
Metoda print_debugger() .......................................................................................... 48
Ustawianie zawijania wierszy w treĞci wiadomoĞci ................................................. 49
Ustawianie opcji ....................................................................................................... 49
Opcje wysyáania wiadomoĞci e-mail ........................................................................ 49
Kodowanie i szyfrowanie (encrypt) ................................................................................ 50
Metoda encode() ....................................................................................................... 51
Metoda decode() ....................................................................................................... 52
Metoda sha1() ........................................................................................................... 53
Przesyáanie plików na serwer (upload) ........................................................................... 53
Ustawianie preferencji .............................................................................................. 55
Metoda do_upload() ................................................................................................. 57
Metoda display_errors() ........................................................................................... 57
Metoda data() ........................................................................................................... 57
Walidacja formularzy (form_validation) ........................................................................ 58
Metoda set_rules() .................................................................................................... 62
Metoda run() ............................................................................................................. 62
Twoja wáasna metoda ............................................................................................... 63
Spis treĈci
5
Funkcja form_error() ................................................................................................ 64
Funkcja validation_errors() ...................................................................................... 64
FTP (ftp) ......................................................................................................................... 64
Metoda connect() ...................................................................................................... 65
Metoda upload() ....................................................................................................... 66
Metoda download() .................................................................................................. 66
Metoda rename() ...................................................................................................... 67
Metoda move() ......................................................................................................... 68
Metoda delete_file() ................................................................................................. 68
Metoda delete_dir() .................................................................................................. 69
Metoda list_files() .................................................................................................... 70
Metoda mirror() ........................................................................................................ 70
Metoda mkdir() ........................................................................................................ 71
Metoda chmod() ....................................................................................................... 72
Metoda close() .......................................................................................................... 72
Generowanie tabel HTML (table) ................................................................................... 73
Metoda generate() .................................................................................................... 74
Metoda set_caption() ................................................................................................ 74
Metoda set_heading() ............................................................................................... 75
Metoda add_row() .................................................................................................... 75
Metoda make_columns() .......................................................................................... 75
Metoda set_template() .............................................................................................. 76
Metoda set_empty() .................................................................................................. 76
Metoda clear() .......................................................................................................... 77
Metoda function() ..................................................................................................... 78
Wprowadzanie danych (input) ........................................................................................ 79
Filtrowanie XSS ....................................................................................................... 80
Wykorzystywanie $_POST, $_COOKIE i $_SERVER ........................................... 80
Metoda get() ............................................................................................................. 80
Metoda get_post() .................................................................................................... 81
Metoda set_cookie() ................................................................................................. 81
Metoda ip_address() ................................................................................................. 82
Metoda valid_ip() ..................................................................................................... 83
Metoda user_agent() ................................................................................................. 83
Metoda request_headers() ........................................................................................ 84
Metoda get_request_header() ................................................................................... 84
àadowanie klas i przeksztaácanie ich w obiekty ............................................................. 85
Metoda library() ....................................................................................................... 85
Metoda view() .......................................................................................................... 86
Metoda model() ........................................................................................................ 86
Metoda database() .................................................................................................... 87
Metoda helper() ........................................................................................................ 87
Metoda language() .................................................................................................... 87
JĊzyki (lang) ................................................................................................................... 88
Tworzenie pliku z wersją jĊzykową ......................................................................... 88
Metoda load() ........................................................................................................... 89
Metoda line() ............................................................................................................ 89
Automatyczne áadowanie plików jĊzykowych ......................................................... 90
Generowanie strony (output) .......................................................................................... 90
Metoda set_output() ................................................................................................. 90
Metoda set_content_type() ....................................................................................... 90
Metoda set_header() ................................................................................................. 91
Metoda set_status_header() ...................................................................................... 91
Metoda enable_profiler() .......................................................................................... 91
6
CodeIgniter. Zaawansowane tworzenie stron w PHP
Dzielenie treĞci (pagination) ........................................................................................... 91
Metoda initialize() .................................................................................................... 92
Metoda create_links() ............................................................................................... 93
Opcje podziaáu treĞci na strony ................................................................................ 93
BezpieczeĔstwo (security) .............................................................................................. 95
Filtrowanie XSS ....................................................................................................... 95
Metoda xss_clean() .................................................................................................. 95
Metoda sanitize_filename() ...................................................................................... 96
Ochrona przed atakami typu CSRF .......................................................................... 97
Sesja (session) ................................................................................................................ 97
Metoda userdata() ..................................................................................................... 98
Metoda set_userdata() .............................................................................................. 98
Metoda all_userdata() ............................................................................................... 99
Metoda unset_userdata() ........................................................................................ 100
Ustawienia sesji ...................................................................................................... 100
Wygląd strony (parser) ................................................................................................. 101
Metoda parse() ....................................................................................................... 102
URI (uri) ....................................................................................................................... 103
Metoda segment() ................................................................................................... 103
Metoda uri_to_assoc() ............................................................................................ 103
Metoda assoc_to_uri() ............................................................................................ 104
Przeglądarka uĪytkownika (user_agent) ....................................................................... 105
Identyfikacja przeglądarki uĪytkownika ................................................................. 105
Metoda is_browser() .............................................................................................. 106
Metoda is_mobile() ................................................................................................ 107
Metoda is_robot() ................................................................................................... 107
Metoda is_referral() ................................................................................................ 108
Metoda browser() ................................................................................................... 108
Metoda version() .................................................................................................... 109
Metoda mobile() ..................................................................................................... 109
Metoda robot() ....................................................................................................... 110
Metoda platform() .................................................................................................. 110
Metoda referrer() .................................................................................................... 111
Metoda agent_string() ............................................................................................ 111
Metoda accept_lang() ............................................................................................. 112
Metoda accept_charset() ......................................................................................... 113
Kompresja plików (zip) ................................................................................................ 113
Metoda add_data() .................................................................................................. 114
Metoda add_dir() .................................................................................................... 114
Metoda read_file() .................................................................................................. 115
Metoda read_dir() ................................................................................................... 115
Metoda archive() .................................................................................................... 116
Metoda download() ................................................................................................ 116
Metoda get_zip() .................................................................................................... 117
Metoda clear_data() ................................................................................................ 117
Rozdziaä 4. Sterowniki systemu do obsäugi bazy danych .................................. 119
Praca z bazą danych ...................................................................................................... 119
Wczytanie sterownika (load- database) ....................................................................... 120
Poáączenie z bazą danych — konfiguracja danych dostĊpowych ................................. 120
Poáączenie z bazą danych (database) ............................................................................ 122
Metoda reconnect() ....................................................................................................... 123
Metoda close() .............................................................................................................. 124
Wykonywanie zapytania (query) .................................................................................. 125
Spis treĈci
7
Metoda query() ............................................................................................................. 126
Zabezpieczanie danych (escape, escape_str i escape_like_str) ..................................... 126
Bezpieczne zapytania (query) ....................................................................................... 127
Generowanie rezultatów zapytania ............................................................................... 128
Metoda result() ....................................................................................................... 128
Metoda result_array() ............................................................................................. 129
Metoda num_rows() ............................................................................................... 129
Metoda free_result() ............................................................................................... 130
Metoda insert_id() .................................................................................................. 131
Metoda affected_rows() ......................................................................................... 131
Metoda count_all() ................................................................................................. 132
Metoda platform() .................................................................................................. 132
Metoda version() .................................................................................................... 133
Metoda last_query() ............................................................................................... 133
Informacje o tabelach ................................................................................................... 134
Metoda list_tables() ................................................................................................ 134
Metoda table_exists() ............................................................................................. 134
Informacje o polach tabeli ............................................................................................ 135
Metoda list_fields() ................................................................................................ 135
Metoda field_exists() .............................................................................................. 136
Metoda field_data() ................................................................................................ 137
Rozdziaä 5. Klasy pomocnicze ........................................................................ 139
Tablica (array) .............................................................................................................. 139
Funkcja element() ................................................................................................... 139
Funkcja random_element() ..................................................................................... 140
Funkcja elements() ................................................................................................. 141
Wysyáanie danych z formularza ............................................................................. 142
Pliki cookie (cookie) ..................................................................................................... 143
Funkcja set_cookie() .............................................................................................. 143
Funkcja get_cookie() .............................................................................................. 143
Funkcja delete_cookie() ......................................................................................... 143
Data (date) .................................................................................................................... 144
Funkcja now() ........................................................................................................ 144
Funkcja standard_date() ......................................................................................... 144
Funkcja local_to_gmt() .......................................................................................... 145
Funkcja unix_to_human() ...................................................................................... 146
Funkcja timespan() ................................................................................................. 146
Funkcja days_in_month() ....................................................................................... 147
Funkcja timezones() ............................................................................................... 148
Funkcja timezone_menu() ...................................................................................... 148
Katalog (directory) ....................................................................................................... 150
Funkcja directory_map() ........................................................................................ 150
Pobieranie (download) .................................................................................................. 152
Funkcja force_download() ..................................................................................... 152
E-mail (email) ............................................................................................................... 153
Funkcja valid_email() ............................................................................................. 153
Funkcja send_email() ............................................................................................. 154
Plik (file) ...................................................................................................................... 154
Funkcja write_file() ................................................................................................ 154
Funkcja read_file() ................................................................................................. 155
Funkcja delete_files() ............................................................................................. 155
Funkcja get_dir_file_info() .................................................................................... 156
Funkcja get_file_info() ........................................................................................... 158
8
CodeIgniter. Zaawansowane tworzenie stron w PHP
Funkcja get_mime_by_extension() ........................................................................ 159
Funkcja symbolic_permissions() ............................................................................ 159
Funkcja octal_permissions() ................................................................................... 160
Formularz (form) .......................................................................................................... 161
Funkcja form_open() .............................................................................................. 161
Funkcja form_open_multipart() ............................................................................. 162
Funkcja form_hidden() ........................................................................................... 162
Funkcja form_input() ............................................................................................. 163
Funkcja form_password() ....................................................................................... 164
Funkcja form_upload() ........................................................................................... 164
Funkcja form_textarea() ......................................................................................... 165
Funkcja form_dropdown() ..................................................................................... 165
Funkcja form_multiselect() .................................................................................... 166
Funkcje form_fieldset() i form_fieldset_close() ..................................................... 167
Funkcja form_checkbox() ...................................................................................... 167
Funkcja form_radio() ............................................................................................. 168
Funkcja form_submit() ........................................................................................... 169
Funkcja form_reset() .............................................................................................. 169
Funkcja form_button() ........................................................................................... 170
Funkcja form_close() ............................................................................................. 171
Funkcja form_prep() .............................................................................................. 171
HTML (html) ................................................................................................................ 171
Funkcja br() ............................................................................................................ 172
Funkcja heading() ................................................................................................... 172
Funkcja img() ......................................................................................................... 173
Funkcja link_tag() .................................................................................................. 174
Funkcja nbs() .......................................................................................................... 175
Funkcje ol() i ul() ................................................................................................... 175
Funkcja meta() ....................................................................................................... 177
Funkcja doctype() ................................................................................................... 179
JĊzyk (language) ........................................................................................................... 179
Funkcja lang() ........................................................................................................ 180
Liczba (number) ........................................................................................................... 181
Funkcja byte_format() ............................................................................................ 181
ĝcieĪka (path) ............................................................................................................... 182
Funkcja set_realpath() ............................................................................................ 183
BezpieczeĔstwo (security) ............................................................................................ 184
Funkcja xss_clean() ................................................................................................ 184
Funkcja sanitize_filename() ................................................................................... 184
Funkcja do_hash() .................................................................................................. 185
Funkcja strip_image_tags() .................................................................................... 185
Funkcja encode_php_tags() .................................................................................... 186
Ciąg (string) .................................................................................................................. 187
Funkcja random_string() ........................................................................................ 187
Funkcja increment_string() .................................................................................... 188
Funkcja alternator() ................................................................................................ 188
Funkcja repeater() .................................................................................................. 189
Funkcja reduce_double_slashes() ........................................................................... 190
Funkcja trim_slashes() ........................................................................................... 190
Funkcja quotes_to_entities() .................................................................................. 191
Funkcja strip_quotes() ............................................................................................ 191
Tekst (text) ................................................................................................................... 192
Funkcja word_limiter() ........................................................................................... 192
Funkcja character_limiter() .................................................................................... 193
Funkcja ascii_to_entities() ..................................................................................... 193
Spis treĈci
9
Funkcja entities_to_ascii() ..................................................................................... 194
Funkcja highlight_code() ....................................................................................... 194
Funkcja word_wrap() ............................................................................................. 195
Funkcja ellipsize() .................................................................................................. 196
URL (url) ...................................................................................................................... 197
Funkcja site_url() ................................................................................................... 197
Funkcja base_url() .................................................................................................. 197
Funkcja current_url() .............................................................................................. 198
Funkcja uri_string() ................................................................................................ 198
Funkcja index_page() ............................................................................................. 199
Funkcja anchor() .................................................................................................... 199
Funkcja redirect() ................................................................................................... 200
XML (xml) ................................................................................................................... 200
Funkcja xml_convert() ........................................................................................... 201
Rozdziaä 6. Tworzenie pierwszej aplikacji ........................................................ 203
RozpoczĊcie pracy ........................................................................................................ 203
Baza danych ................................................................................................................. 204
Gáówny plik aplikacji ................................................................................................... 204
Plik konfiguracyjny ...................................................................................................... 204
Konfiguracja automatycznego áadowania ..................................................................... 204
Konfiguracja bazy danych ............................................................................................ 205
Konfiguracja domyĞlnego kontrolera ........................................................................... 205
Tworzenie pliku do przepisywania adresów ................................................................. 205
Kontroler — logowanie administratora ........................................................................ 206
Kontroler — wylogowanie administratora ................................................................... 208
Kontroler — strona gáówna .......................................................................................... 209
Kontroler — kategoria wpisów .................................................................................... 212
Kontroler — wpis ......................................................................................................... 215
Kontroler — edycja wpisów ......................................................................................... 219
Model — logowanie uĪytkownika ................................................................................ 227
Model — strona gáówna ............................................................................................... 228
Model — kategoria ....................................................................................................... 229
Model — wpis .............................................................................................................. 231
Model — polecenia wspóádzielone ............................................................................... 233
Model — edycja ........................................................................................................... 233
Widok — nagáówek ...................................................................................................... 237
Widok — stopka ........................................................................................................... 240
Widok — menu ............................................................................................................ 240
Widok — menu administratora .................................................................................... 242
Widok — menu administratora przed zalogowaniem ................................................... 242
Widok — kategoria ...................................................................................................... 243
Widok — edytowanie kategorii .................................................................................... 245
Widok — dodawanie kategorii ..................................................................................... 246
Widok — wpisy ............................................................................................................ 246
Widok — nowy wpis .................................................................................................... 249
Widok — edytowanie wpisu ........................................................................................ 251
Widok — najnowsze wpisy .......................................................................................... 253
Widok — zaloguj ......................................................................................................... 254
Widok — strona gáówna ............................................................................................... 255
Widok — zmieĔ hasáo .................................................................................................. 256
ZakoĔczenie .................................................................................................................. 257
10
CodeIgniter. Zaawansowane tworzenie stron w PHP
Nazwy zastrzeĔone ....................................................................... 259
Podsumowanie ............................................................................. 261
Skorowidz .................................................................................... 263
Rozdziaä 4.
Sterowniki systemu
do obsäugi bazy danych
Sterownik przeznaczony do obsáugi bazy danych umoĪliwia korzystanie z jej zaso-
bów. CodeIgniter pozwala na wykorzystywanie takich baz danych jak na przykáad
MySQL i PostgreSQL. DziĊki temu jest dogodną platformą do tworzenia zaawanso-
wanych aplikacji — umoĪliwia przeprowadzenie róĪnych operacji na rekordach, takich
jak umieszczanie ich w tabeli, aktualizowanie czy usuwanie.
Praca z bazñ danych
Zanim zaczniemy przygodĊ z bazą danych, musimy utworzyü dwie bazy: pierwszą o na-
zwie codeigniter oraz drugą — codeigniter2. Najprawdopodobniej pracujesz na opro-
gramowaniu XAMPP, wiĊc w celu ich utworzenia moĪesz skorzystaü z narzĊdzia
phpMyAdmin, do którego dostĊp uzyskasz, wpisując adres URL w pasku adresu prze-
glądarki internetowej: http://localhost/phpMyAdmin.
NastĊpnie w pierwszej bazie o nazwie codeigniter naleĪy wykonaü poniĪszy kod za-
pytaĔ SQL:
CREATE TABLE IF NOT EXISTS tabela (
id int(11) NOT NULL AUTO_INCREMENT,
tytul varchar(255) COLLATE utf8_unicode_ci NOT NULL,
PRIMARY KEY ( id )
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci AUTO_INCREMENT=3 ;
INSERT INTO tabela ( id , tytul ) VALUES
(1, Treħè 1 ),
(2, Treħè 2 );
CREATE TABLE IF NOT EXISTS tabela_post (
post_id int(11) NOT NULL AUTO_INCREMENT,
post_tytul varchar(255) COLLATE utf8_unicode_ci NOT NULL,
post_tresc text COLLATE utf8_unicode_ci NOT NULL,
120
CodeIgniter. Zaawansowane tworzenie stron w PHP
post_aktywny char(1) COLLATE utf8_unicode_ci NOT NULL,
PRIMARY KEY ( post_id )
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci AUTO_INCREMENT=3 ;
INSERT INTO tabela_post ( post_id , post_tytul , post_tresc , post_aktywny ) VALUES
(1, Temat wiadomoħci , , t ),
(2, Kolejny temat wiadomoħci , , t );
CREATE TABLE IF NOT EXISTS uzytkownicy (
uzytkownik_id int(11) NOT NULL AUTO_INCREMENT,
uzytkownik_nazwa varchar(255) COLLATE utf8_unicode_ci NOT NULL,
PRIMARY KEY ( uzytkownik_id )
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci AUTO_INCREMENT=1 ;
W przypadku zainstalowania oprogramowania XAMPP uĪytkownik mający peáen do-
stĊp do baz danych to root, a jego hasáo jest puste.
Wczytanie sterownika (load- database)
Sterownik sáuĪący do obsáugi bazy danych jest uruchamiany poprzez metodĊ database()
z obiektu load (listing 4.1). Wszystkie dane potrzebne do nawiązania poáączenia z bazą
danych definiuje siĊ w pliku konfiguracyjnym.
Listing 4.1. àadowanie sterownika bazy danych
?php
if(!defined( BASEPATH ))
{
exit( No direct script access allowed );
}
class Mvc extends CI_Controller
{
public function index()
{
$this- load- database();
}
}
?
Poäñczenie z bazñ danych
— konfiguracja danych dostöpowych
Aby zapewniü sobie moĪliwoĞü wykorzystania bazy danych, najpierw naleĪy skonfi-
gurowaü dane dostĊpowe: okreĞliü nazwĊ hosta, nazwĊ uĪytkownika i jego hasáo, wska-
zaü nazwĊ bazy danych oraz zdefiniowaü inne potrzebne wáaĞciwoĞci. W przypadku
CodeIgnitera dane te są przechowywane w pliku application/config/database.php.
Rozdziaä 4. i Sterowniki systemu do obsäugi bazy danych
121
Plik ten zawiera tablicĊ, w której ustawia siĊ róĪnego rodzaju dane dostĊpowe do bazy
danych (listing 4.2).
Listing 4.2. Tablica konfiguracji danych dostĊpowych do bazy danych
$db[ default ][ hostname ] = localhost ;
$db[ default ][ username ] = root ;
$db[ default ][ password ] = ;
$db[ default ][ database ] = codeigniter ;
$db[ default ][ dbdriver ] = mysql ;
$db[ default ][ dbprefix ] = ;
$db[ default ][ pconnect ] = TRUE;
$db[ default ][ db_debug ] = FALSE;
$db[ default ][ cache_on ] = FALSE;
$db[ default ][ cachedir ] = ;
$db[ default ][ char_set ] = utf8 ;
$db[ default ][ dbcollat ] = utf8_general_ci ;
$db[ default ][ swap_pre ] = ;
$db[ default ][ autoinit ] = TRUE;
$db[ default ][ stricton ] = FALSE;
$db[ default ][ port ] = 3306;
PoniĪej zostaáy objaĞnione dostĊpne parametry:
hostname — nazwa hosta bazy danych,
username — nazwa uĪytkownika,
password — hasáo uĪytkownika,
database — nazwa bazy danych,
dbdriver — typ sterownika bazy danych, przykáadowe wartoĞci tego parametru
to: mysql, postgres, odbc itd.,
dbprefix — prefiks nazw tabel w bazie danych, który bĊdzie automatycznie
dodawany w przypadku korzystania z interfejsu Active Record,
pconnect (TRUE/FALSE) — definiuje, czy chcemy uĪywaü staáego poáączenia,
db_debug (TRUE/FALSE) — wyĞwietlanie komunikatów o báĊdach bazy danych,
cache_on (TRUE/FALSE) — wáączenie pamiĊci podrĊcznej do przechowywania
wyników zapytaĔ,
cachedir — katalog na serwerze do tymczasowego przechowywania wyników
zapytaĔ do bazy danych,
char_set — zestaw znaków wykorzystywany do pracy z bazą danych,
dbcollat — ustawienie kodowania pól w bazie danych,
swap_pre — prefiks nazw tabel, stosowany podczas pracy nad wersją rozwojową
aplikacji,
autoinit — okreĞlenie automatycznego áączenia siĊ z bazą danych po wáączeniu
interfejsu,
122
CodeIgniter. Zaawansowane tworzenie stron w PHP
stricton (TRUE/FALSE) — wymuszenie poáączenia z bazą danych w trybie
Strict Mode1,
port — port wykorzystany do nawiązania poáączenia z bazą danych.
Nie wszystkie opcje konfiguracyjne dostĊpne w pliku database.php są zawsze po-
trzebne. To, jakie dane bĊdziesz musiaá zdefiniowaü, zaleĪy od rodzaju bazy danych.
Przedstawiona powyĪej konfiguracja jest odpowiednia dla bazy MySQL.
Poäñczenie z bazñ danych (database)
CodeIgniter umoĪliwia dwa sposoby áączenia siĊ z bazą danych. Pierwszy z nich po-
lega na kaĪdorazowym zaáadowaniu odpowiedniego sterownika podczas uruchamia-
nia aplikacji, co powoduje automatyczne nawiązanie poáączenia z bazą danych. Opcja ta
jest bardzo przydatna, gdy mamy zamiar utworzyü aplikacjĊ korzystającą z zasobów
tylko jednej bazy danych.
Drugim sposobem jest rĊczne zestawianie poáączenia za pomocą metody database().
Pierwszym parametrem tej metody jest nazwa klucza tablicy, w której znajdują siĊ dane
potrzebne do poáączenia z bazą danych. Jak pamiĊtasz, tablicĊ tĊ deklarujemy w pliku
application/config/database.php. Kopiujemy juĪ obecną w tym pliku tablicĊ $db
´[ default ] i zmieniamy jej klucz na dowolny inny, waĪne jednak, by byá on zgodny
z nazwami kluczy w jĊzyku PHP (listing 4.3). MoĪe siĊ on nazywaü na przykáad
drugiepolaczenie (listing 4.4).
Listing 4.3. Fragment zmodyfikowanego pliku database.php
$db[ default ][ hostname ] = localhost ;
$db[ default ][ username ] = root ;
$db[ default ][ password ] = ;
$db[ default ][ database ] = codeigniter ;
$db[ default ][ dbdriver ] = mysql ;
$db[ default ][ dbprefix ] = ;
$db[ default ][ pconnect ] = TRUE;
$db[ default ][ db_debug ] = FALSE;
$db[ default ][ cache_on ] = FALSE;
$db[ default ][ cachedir ] = ;
$db[ default ][ char_set ] = utf8 ;
$db[ default ][ dbcollat ] = utf8_general_ci ;
$db[ default ][ swap_pre ] = ;
$db[ default ][ autoinit ] = TRUE;
$db[ default ][ stricton ] = FALSE;
$db[ default ][ port ] = 3306
$db[ drugiepolaczenie ][ hostname ] = localhost ;
$db[ drugiepolaczenie ][ username ] = root ;
$db[ drugiepolaczenie ][ password ] = ;
1 Strict Mode — tzw. tryb Ğcisáy pracy, w którym baza danych nie bĊdzie podejmowaáa prób obsáuĪenia
danych przekazanych w nieprawidáowym formacie — przyp. red.
Rozdziaä 4. i Sterowniki systemu do obsäugi bazy danych
123
$db[ drugiepolaczenie ][ database ] = codeigniter2 ;
$db[ drugiepolaczenie ][ dbdriver ] = mysql ;
$db[ drugiepolaczenie ][ dbprefix ] = ;
$db[ drugiepolaczenie ][ pconnect ] = TRUE;
$db[ drugiepolaczenie ][ db_debug ] = FALSE;
$db[ drugiepolaczenie ][ cache_on ] = FALSE;
$db[ drugiepolaczenie ][ cachedir ] = ;
$db[ drugiepolaczenie ][ char_set ] = utf8 ;
$db[ drugiepolaczenie ][ dbcollat ] = utf8_general_ci ;
$db[ drugiepolaczenie ][ swap_pre ] = ;
$db[ drugiepolaczenie ][ autoinit ] = TRUE;
$db[ drugiepolaczenie ][ stricton ] = FALSE;
$db[ drugiepolaczenie ][ port ] = 3306;
Listing 4.4. RĊczne áączenie siĊ z bazą danych
$this- load- database( drugiepolaczenie );
Na etapie tworzenia projektu aplikacji naleĪy siĊ dobrze zastanowiü, z ilu baz danych
bĊdzie siĊ korzystaü. W zaleĪnoĞci od tego, czy bĊdzie to jedna baza, czy wiĊksza ich
liczba, konstrukcja poleceĔ w metodzie bĊdzie nieco inna (listingi 4.5 i 4.6).
Listing 4.5. Wykonywanie zapytaĔ w przypadku áączenia siĊ z tylko jedną bazą danych
$this- db- query();
$this- db- result();
Listing 4.6. Wykonywanie zapytaĔ w przypadku áączenia siĊ z dwiema lub wiĊkszą liczbą baz danych
$DB1- query();
$DB1- result();
$DB2- query();
$DB2- result();
PamiĊtaj, Īe poszczególne obiekty obsáugujące bazy danych zawierają w swojej na-
zwie liczby odpowiadające kolejnoĞci dokonywania poáączeĔ. ZnajomoĞü tych numerów
umoĪliwi prawidáowe odwoáywanie siĊ do tych obiektów.
Metoda reconnect()
Podczas pracy aplikacji niekiedy dochodzi do utraty poáączenia z bazą danych, na
przykáad na skutek przekroczenia limitu bezczynnoĞci serwera bazy danych. Aby unik-
nąü ponownego definiowania wszystkich argumentów, w celu ponownego poáączenia siĊ
z bazą wystarczy wywoáaü metodĊ reconnect(), która automatycznie podtrzyma poáą-
czenie lub — w przypadku jego utraty — ponownie je nawiąĪe (listing 4.7).
124
CodeIgniter. Zaawansowane tworzenie stron w PHP
Listing 4.7. Podtrzymanie lub powtórne nawiązanie poáączenia z bazą danych
?php
if(!defined( BASEPATH ))
{
exit( No direct script access allowed );
}
class Mvc extends CI_Controller
{
public function index()
{
$this- load- database();
$Informacje = $this- db- query( SELECT * FROM tabela );
echo pre ;
print_r($Informacje);
echo /pre ;
$this- db- reconnect();
$Informacje = $this- db- query( SELECT * FROM tabela );
echo pre ;
print_r($Informacje);
echo /pre ;
}
}
?
Metoda close()
CodeIgniter zapewnia automatyczne zamykanie poáączenia z bazą danych, jednak jeĪeli
chcesz zamknąü je rĊcznie, moĪesz wywoáaü metodĊ close() (listing 4.8).
Listing 4.8. ZakoĔczenie poáączenia z bazą danych
?php
if(!defined( BASEPATH ))
{
exit( No direct script access allowed );
}
class Mvc extends CI_Controller
{
public function index()
{
$this- load- database();
$this- db- close();
}
}
?
Rozdziaä 4. i Sterowniki systemu do obsäugi bazy danych
125
Wykonywanie zapytania (query)
Zapytanie, które chcemy wykonaü w bazie danych, musi speániaü wymagania stan-
dardu jĊzyka SQL zgodnego z bazą danych, którą bĊdziemy wykorzystywaü. Zapyta-
nie SQL podajemy jako parametr metody query() z obiektu db (listing 4.9). Przykáadowy
rezultat wykonania skryptu obrazuje rysunek 4.1.
Listing 4.9. Wykonanie zapytania SQL
?php
if(!defined( BASEPATH ))
{
exit( No direct script access allowed );
}
class Mvc extends CI_Controller
{
public function index()
{
$this- load- database();
$Informacje = $this- db- query( SELECT * FROM tabela );
echo pre ;
print_r($Informacje);
echo /pre ;
}
}
?
Rysunek 4.1.
Wynik zapytania
126
CodeIgniter. Zaawansowane tworzenie stron w PHP
Metoda query()
Same zapytania wysyáane do bazy danych konstruuje siĊ w jĊzyku SQL w imple-
mentacji odpowiadającej zastosowanej bazie danych. Jednak ze wzglĊdu na obowią-
zujące standardy w wiĊkszoĞci przypadków skáadnia SQL jest bardzo podobna.
W jĊzyku PHP do uzyskiwania wyników zapytaĔ SQL wykorzystuje siĊ metodĊ query().
Parametrem tej metody jest zapytanie w jĊzyku SQL. Na listingu 4.10 przedstawiono
przykáad prostego zapytania do bazy danych.
Listing 4.10. Zapytanie do bazy danych
?php
if(!defined( BASEPATH ))
{
exit( No direct script access allowed );
}
class Mvc extends CI_Controller
{
public function index()
{
$this- load- database();
$this- db- query( SELECT * FROM tabela );
}
}
?
W przypadku zapytania SQL pobierającego dane z bazy danych, takiego jak SELECT,
metoda query() zwraca obiekt zbioru wyników odpowiadający wykonanemu zapytaniu.
W dalszej czĊĞci rozdziaáu pokaĪemy, w jaki sposób moĪna przetworzyü ten obiekt.
W pozostaáych przypadkach (kiedy w wyniku zapytania nie otrzymujemy zbioru da-
nych) wartoĞcią przekazaną przez metodĊ query() jest TRUE, gdy zapytanie zostanie
poprawnie wykonane, lub FALSE, gdy nastąpi báąd.
Zabezpieczanie danych (escape,
escape_str i escape_like_str)
Aby uchroniü swoją aplikacjĊ przed atakami typu SQL Injection, trzeba pamiĊtaü o prze-
filtrowaniu danych przed ich wprowadzeniem do zapytania SQL i wysáaniem do bazy
danych. Jest to bardzo waĪne ze wzglĊdu na bezpieczeĔstwo naszej aplikacji. W tabeli
4.1 przedstawiono dostĊpne w CodeIgniterze metody umoĪliwiające zabezpieczanie
danych wpisywanych przez uĪytkownika poprzez wstawianie lewych ukoĞników przed
znakami specjalnymi, takimi jak apostrof czy cudzysáów.
Rozdziaä 4. i Sterowniki systemu do obsäugi bazy danych
127
Tabela 4.1. Metody zabezpieczające dane
Metoda
$this- db- escape()
Opis
Odpowiedni tylko dla ciągów
znakowych
$this- db- escape_str()
Odpowiedni dla wszystkich
danych, bez wzglĊdu na ich typ
$this- db- escape_
like_str()
Odpowiedni dla ciągu znakowego
wykorzystanego jako parametr
w zapytaniach z uĪyciem sáowa
kluczowego LIKE
Przykäad
$Sql = INSERT INTO tabela
(tytul) VALUES ( .$this-
db- escape($Tytul). ) ;
$Sql = INSERT INTO tabela
(tytul) VALUES( .$this-
db- escape_str($Tytul). ) ;
$Tytul = 20 upustu ;
$Sql = SELECT id FROM
tabela WHERE tytul LIKE
.$this- db- escape_like_
str ($Tytul). ;
Bezpieczne zapytania (query)
Zastosowanie tego typu zapytaĔ pozwala na zapewnienie wiĊkszego bezpieczeĔstwa
aplikacji, poniewaĪ programista nie musi pamiĊtaü o sprawdzaniu danych wejĞciowych.
Sterownik bazy danych CodeIgnitera zapewni odpowiednie filtrowanie danych (li-
sting 4.11).
Listing 4.11. Tworzenie zapytania wiązanego
?php
if(!defined( BASEPATH ))
{
exit( No direct script access allowed );
}
class Mvc extends CI_Controller
{
public function index()
{
$this- load- database();
$Zapytanie = SELECT * FROM tabela_post WHERE post_id = ? AND post_tytul = ?
´AND post_aktywny = ? ;
$Parametry = array(1, Temat wiadomoħci , t );
$this- db- query($Zapytanie, $Parametry);
}
}
?
Metoda query() przyjmuje w tym przypadku dwa parametry. Pierwszym jest zapytanie
do bazy danych wraz ze znakami zapytania (?) w miejscach, w których powinny siĊ
znaleĨü konkretne wartoĞci. Drugim parametrem jest tablica z tymi wáaĞnie wartoĞciami.
128
CodeIgniter. Zaawansowane tworzenie stron w PHP
Musimy pamiĊtaü o jeszcze jednej bardzo waĪnej sprawie: liczba wartoĞci w tablicy
musi byü równa liczbie znaków zapytania umieszczonych w pierwszym parametrze.
Generowanie rezultatów zapytania
Istnieje kilka sposobów generowania rezultatu wykonanego zapytania. Wybór konkret-
nego sposobu zaleĪy od tego, jaką wartoĞü chcemy uzyskaü, w jaki sposób ma zostaü
zaprezentowana uĪytkownikowi i do czego ma nam sáuĪyü.
Metoda result()
Metoda result() daje dostĊp do wyniku zapytania uzyskanego z wczeĞniej omówionej
metody query(). Wynik ten jest udostĊpniany jako obiekt, który moĪna przetworzyü
w pĊtli foreach. Na listingu 4.12 pokazano przykáadowy skrypt. Rezultatem jego wy-
konania bĊdzie:
1 Temat wiadomoħci t
2 Kolejny temat wiadomoħci t
Listing 4.12. Odbieranie wyniku zapytania za pomocą metody result()
?php
if(!defined( BASEPATH ))
{
exit( No direct script access allowed );
}
class Mvc extends CI_Controller
{
public function index()
{
$this- load- database();
$Rezultat = $this- db- query( SELECT * FROM tabela_post );
foreach($Rezultat- result() as $dane)
{
echo $dane- post_id;
echo ;
echo $dane- post_tytul;
echo ;
echo $dane- post_aktywny;
echo br / ;
}
}
}
?
Rozdziaä 4. i Sterowniki systemu do obsäugi bazy danych
129
Metoda result_array()
Metoda result_array() umoĪliwia otrzymanie wyniku zapytania w postaci zwykáej
tablicy asocjacyjnej, w której kluczami są nazwy kolumn z tabeli (listing 4.13).
Listing 4.13. Odbieranie wyników zapytaĔ za pomocą metody result_array()
?php
if(!defined( BASEPATH ))
{
exit( No direct script access allowed );
}
class Mvc extends CI_Controller
{
public function index()
{
$this- load- database();
$Rezultat = $this- db- query( SELECT * FROM tabela_post );
foreach ($Rezultat- result_array() as $dane)
{
echo $dane[ post_id ];
echo ;
echo $dane[ post_tytul ];
echo ;
echo $dane[ post_aktywny ];
echo br / ;
}
}
}
?
Metoda num_rows()
Aby otrzymaü liczbĊ rekordów uzyskanych w wyniku zapytania, moĪna siĊ posáuĪyü
metodą num_rows(). Wywoáujemy ją jako metodĊ obiektu zawierającego rezultat tego
zapytania. Na listingu 4.14 pokazano przykáadowy skrypt. Wynikiem jego wykonania
bĊdzie liczba 2.
Listing 4.14. Przekazywanie liczby wybranych rekordów
?php
if(!defined( BASEPATH ))
{
exit( No direct script access allowed );
}
class Mvc extends CI_Controller
{
public function index()
{
130
CodeIgniter. Zaawansowane tworzenie stron w PHP
$this- load- database();
$Rezultat = $this- db- query( SELECT * FROM tabela_post );
echo $Rezultat- num_rows();
}
}
?
Metoda free_result()
Zwykle PHP automatycznie zwalnia pamiĊü przy zakoĔczeniu przetwarzania skryptu.
JeĞli jednak tworzysz duĪy projekt i chcesz uniknąü ryzyka wystąpienia báĊdu PHP
spowodowanego wyczerpaniem siĊ przydzielonych aplikacji zasobów pamiĊci RAM
serwera, warto rozwaĪyü rĊczne, a nie automatyczne zwalnianie pamiĊci po kaĪdym
wykonaniu zapytania. Do tego celu sáuĪy metoda free_result(). Na listingu 4.15 znaj-
duje siĊ przykáad zastosowania tej metody.
Listing 4.15. Czyszczenie zawartoĞci zapytania z pamiĊci serwera
?php
if(!defined( BASEPATH ))
{
exit( No direct script access allowed );
}
class Mvc extends CI_Controller
{
public function index()
{
$this- load- database();
$Rezultat = $this- db- query( SELECT * FROM tabela_post );
foreach ($Rezultat- result_array() as $dane)
{
echo $dane[ post_id ];
echo ;
echo $dane[ post_tytul ];
echo ;
echo $dane[ post_aktywny ];
echo br / ;
}
$Rezultat- free_result();
}
}
?
Rozdziaä 4. i Sterowniki systemu do obsäugi bazy danych
131
Metoda insert_id()
Metoda insert_id() przekazuje identyfikator wartoĞci, która zostaáa ostatnio dodana
do tabeli za pomocą zapytania INSERT. Jest on pobierany z pola typu auto_increment.
Rezultatem wykonania skryptu z listingu 4.16 bĊdzie liczba 3.
Listing 4.16. WyĞwietlanie ostatniego dodanego numeru w polu auto_increment
?php
if(!defined( BASEPATH ))
{
exit( No direct script access allowed );
}
class Mvc extends CI_Controller
{
public function index()
{
$this- load- database();
$Rezultat = $this- db- query( INSERT INTO tabela_post
´(post_tytul,post_aktywny) VALUES ( Inny post , t ) );
echo $this- db- insert_id();
}
}
?
Metoda affected_rows()
Metoda affected_rows() przekazuje liczbĊ rekordów zmienionych podczas wyko-
nywania ostatniego zapytania UPDATE. Rezultatem wykonania skryptu z listingu 4.17
bĊdzie liczba 1.
Listing 4.17. WyĞwietlanie liczby rekordów zmienionych podczas ostatniego zapytania
?php
if(!defined( BASEPATH ))
{
exit( No direct script access allowed );
}
Pobierz darmowy fragment (pdf)