40

CodeIgniter. Zaawansowane tworzenie stron w PHP - Helion

  • Upload
    others

  • View
    11

  • Download
    0

Embed Size (px)

Citation preview

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 BurskaProjekt okładki: Michał Wójcik Materiały graficzne na okładce zostały wykorzystane za zgodą Shutterstock.

Wydawnictwo HELIONul. Kościuszki 1c, 44-100 GLIWICEtel. 32 231 22 19, 32 230 98 63e-mail: [email protected]: 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?codeigMoż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 ............................................... 13Instalacja oprogramowania na serwerze ......................................................................... 14Aktualizacja CodeIgnitera .............................................................................................. 14Praca z ksi��k� ............................................................................................................... 15

Rozdzia� 2. Korzystanie z frameworku ............................................................... 17Model, widok, kontroler ................................................................................................. 17Adresy URL ................................................................................................................... 18Adresy URL dla wyszukiwarek ...................................................................................... 18Kontroler (controller) ..................................................................................................... 19

Definicja domy�lnego kontrolera (default_controller) ............................................. 19Metody prywatne (private) ....................................................................................... 20Umieszczanie kontrolerów w folderach ................................................................... 20Automatyczne �adowanie (__construct) ................................................................... 21Nazwy zastrze�one ................................................................................................... 21

Widok (view) .................................................................................................................. 21�adowanie widoku do kontrolera (load->view) ....................................................... 22�adowanie kilku widoków ....................................................................................... 23Umieszczanie widoków w folderach ........................................................................ 23Dodawanie danych do widoku ................................................................................. 23Przekazywanie widoków jako danych ...................................................................... 24

Model (model) ................................................................................................................ 24Pierwszy model ........................................................................................................ 25�adowanie modelu (load->model) ........................................................................... 25Umieszczanie modeli w katalogu ............................................................................. 26Dost�p do metod modelu .......................................................................................... 26

�adowanie bibliotek (load->library) ............................................................................... 27�adowanie klas pomocniczych (load->helper) ............................................................... 28�adowanie sterowników (load->driver) ......................................................................... 28Automatyczne �adowanie zasobów ................................................................................. 29Routowanie URL ............................................................................................................ 29

Ustanawianie w�asnych regu� ................................................................................... 30Zastrze�one nazwy w�a�ciwo�ci ............................................................................... 30

Obs�uga b��dów .............................................................................................................. 31Funkcja show_error() ............................................................................................... 31Funkcja show_404() ................................................................................................. 32Funkcja log_message() ............................................................................................. 32

4 CodeIgniter. Zaawansowane tworzenie stron w PHP

Zapisywanie stron w plikach tymczasowych (cache) ..................................................... 33Metoda cache() ......................................................................................................... 34Usuwanie plików tymczasowych ............................................................................. 34

Bezpiecze�stwo .............................................................................................................. 34Zabezpieczanie adresów URL .................................................................................. 35Opcja register_globals .............................................................................................. 35Opcja error_reporting ............................................................................................... 35Opcja magic_quotes_runtime ................................................................................... 36Najlepsze praktyki .................................................................................................... 36

Rozdzia� 3. Klasy systemowe ........................................................................... 37Wydajno� systemu (benchmark) ................................................................................... 37

Wy�wietlanie informacji o zu�yciu pami�ci podczas generowania strony ............... 38Kalendarz (calendar) ....................................................................................................... 39

Metoda generate() .................................................................................................... 39Wyszczególnianie dat w kalendarzu ......................................................................... 40Opcje wy�wietlania kalendarza ................................................................................ 41Opcje konfiguracji kalendarza .................................................................................. 42Dostosowywanie wygl�du kalendarza ...................................................................... 42

Konfiguracja (config) ..................................................................................................... 43Metoda load() ........................................................................................................... 44Metoda item() ........................................................................................................... 44Metoda set_item() .................................................................................................... 45Metoda site_url() ...................................................................................................... 45Metoda base_url() .................................................................................................... 46Metoda system_url() ................................................................................................ 46

E-mail (email) ................................................................................................................. 46Metoda from() .......................................................................................................... 47Metoda reply_to() ..................................................................................................... 47Metoda cc() .............................................................................................................. 47Metoda bcc() ............................................................................................................ 47Metoda subject() ....................................................................................................... 47Metoda message() .................................................................................................... 48Metoda set_alt_message() ........................................................................................ 48Metoda clear() .......................................................................................................... 48Metoda attach() ........................................................................................................ 48Metoda send() ........................................................................................................... 48Metoda print_debugger() .......................................................................................... 48Ustawianie zawijania wierszy w tre�ci wiadomo�ci ................................................. 49Ustawianie opcji ....................................................................................................... 49Opcje wysy�ania wiadomo�ci e-mail ........................................................................ 49

Kodowanie i szyfrowanie (encrypt) ................................................................................ 50Metoda encode() ....................................................................................................... 51Metoda decode() ....................................................................................................... 52Metoda sha1() ........................................................................................................... 53

Przesy�anie plików na serwer (upload) ........................................................................... 53Ustawianie preferencji .............................................................................................. 55Metoda do_upload() ................................................................................................. 57Metoda display_errors() ........................................................................................... 57Metoda data() ........................................................................................................... 57

Walidacja formularzy (form_validation) ........................................................................ 58Metoda set_rules() .................................................................................................... 62Metoda run() ............................................................................................................. 62Twoja w�asna metoda ............................................................................................... 63

Spis tre�ci 5

Funkcja form_error() ................................................................................................ 64Funkcja validation_errors() ...................................................................................... 64

FTP (ftp) ......................................................................................................................... 64Metoda connect() ...................................................................................................... 65Metoda upload() ....................................................................................................... 66Metoda download() .................................................................................................. 66Metoda rename() ...................................................................................................... 67Metoda move() ......................................................................................................... 68Metoda delete_file() ................................................................................................. 68Metoda delete_dir() .................................................................................................. 69Metoda list_files() .................................................................................................... 70Metoda mirror() ........................................................................................................ 70Metoda mkdir() ........................................................................................................ 71Metoda chmod() ....................................................................................................... 72Metoda close() .......................................................................................................... 72

Generowanie tabel HTML (table) ................................................................................... 73Metoda generate() .................................................................................................... 74Metoda set_caption() ................................................................................................ 74Metoda set_heading() ............................................................................................... 75Metoda add_row() .................................................................................................... 75Metoda make_columns() .......................................................................................... 75Metoda set_template() .............................................................................................. 76Metoda set_empty() .................................................................................................. 76Metoda clear() .......................................................................................................... 77Metoda function() ..................................................................................................... 78

Wprowadzanie danych (input) ........................................................................................ 79Filtrowanie XSS ....................................................................................................... 80Wykorzystywanie $_POST, $_COOKIE i $_SERVER ........................................... 80Metoda get() ............................................................................................................. 80Metoda get_post() .................................................................................................... 81Metoda set_cookie() ................................................................................................. 81Metoda ip_address() ................................................................................................. 82Metoda valid_ip() ..................................................................................................... 83Metoda user_agent() ................................................................................................. 83Metoda request_headers() ........................................................................................ 84Metoda get_request_header() ................................................................................... 84

�adowanie klas i przekszta�canie ich w obiekty ............................................................. 85Metoda library() ....................................................................................................... 85Metoda view() .......................................................................................................... 86Metoda model() ........................................................................................................ 86Metoda database() .................................................................................................... 87Metoda helper() ........................................................................................................ 87Metoda language() .................................................................................................... 87

J�zyki (lang) ................................................................................................................... 88Tworzenie pliku z wersj� j�zykow� ......................................................................... 88Metoda load() ........................................................................................................... 89Metoda line() ............................................................................................................ 89Automatyczne �adowanie plików j�zykowych ......................................................... 90

Generowanie strony (output) .......................................................................................... 90Metoda set_output() ................................................................................................. 90Metoda set_content_type() ....................................................................................... 90Metoda set_header() ................................................................................................. 91Metoda set_status_header() ...................................................................................... 91Metoda enable_profiler() .......................................................................................... 91

6 CodeIgniter. Zaawansowane tworzenie stron w PHP

Dzielenie tre�ci (pagination) ........................................................................................... 91Metoda initialize() .................................................................................................... 92Metoda create_links() ............................................................................................... 93Opcje podzia�u tre�ci na strony ................................................................................ 93

Bezpiecze�stwo (security) .............................................................................................. 95Filtrowanie XSS ....................................................................................................... 95Metoda xss_clean() .................................................................................................. 95Metoda sanitize_filename() ...................................................................................... 96Ochrona przed atakami typu CSRF .......................................................................... 97

Sesja (session) ................................................................................................................ 97Metoda userdata() ..................................................................................................... 98Metoda set_userdata() .............................................................................................. 98Metoda all_userdata() ............................................................................................... 99Metoda unset_userdata() ........................................................................................ 100Ustawienia sesji ...................................................................................................... 100

Wygl�d strony (parser) ................................................................................................. 101Metoda parse() ....................................................................................................... 102

URI (uri) ....................................................................................................................... 103Metoda segment() ................................................................................................... 103Metoda uri_to_assoc() ............................................................................................ 103Metoda assoc_to_uri() ............................................................................................ 104

Przegl�darka u�ytkownika (user_agent) ....................................................................... 105Identyfikacja przegl�darki u�ytkownika ................................................................. 105Metoda is_browser() .............................................................................................. 106Metoda is_mobile() ................................................................................................ 107Metoda is_robot() ................................................................................................... 107Metoda is_referral() ................................................................................................ 108Metoda browser() ................................................................................................... 108Metoda version() .................................................................................................... 109Metoda mobile() ..................................................................................................... 109Metoda robot() ....................................................................................................... 110Metoda platform() .................................................................................................. 110Metoda referrer() .................................................................................................... 111Metoda agent_string() ............................................................................................ 111Metoda accept_lang() ............................................................................................. 112Metoda accept_charset() ......................................................................................... 113

Kompresja plików (zip) ................................................................................................ 113Metoda add_data() .................................................................................................. 114Metoda add_dir() .................................................................................................... 114Metoda read_file() .................................................................................................. 115Metoda read_dir() ................................................................................................... 115Metoda archive() .................................................................................................... 116Metoda download() ................................................................................................ 116Metoda get_zip() .................................................................................................... 117Metoda clear_data() ................................................................................................ 117

Rozdzia� 4. Sterowniki systemu do obs�ugi bazy danych .................................. 119Praca z baz� danych ...................................................................................................... 119Wczytanie sterownika (load->database) ....................................................................... 120Po��czenie z baz� danych — konfiguracja danych dost�powych ................................. 120Po��czenie z baz� danych (database) ............................................................................ 122Metoda reconnect() ....................................................................................................... 123Metoda close() .............................................................................................................. 124Wykonywanie zapytania (query) .................................................................................. 125

Spis tre�ci 7

Metoda query() ............................................................................................................. 126Zabezpieczanie danych (escape, escape_str i escape_like_str) ..................................... 126Bezpieczne zapytania (query) ....................................................................................... 127Generowanie rezultatów zapytania ............................................................................... 128

Metoda result() ....................................................................................................... 128Metoda result_array() ............................................................................................. 129Metoda num_rows() ............................................................................................... 129Metoda free_result() ............................................................................................... 130Metoda insert_id() .................................................................................................. 131Metoda affected_rows() ......................................................................................... 131Metoda count_all() ................................................................................................. 132Metoda platform() .................................................................................................. 132Metoda version() .................................................................................................... 133Metoda last_query() ............................................................................................... 133

Informacje o tabelach ................................................................................................... 134Metoda list_tables() ................................................................................................ 134Metoda table_exists() ............................................................................................. 134

Informacje o polach tabeli ............................................................................................ 135Metoda list_fields() ................................................................................................ 135Metoda field_exists() .............................................................................................. 136Metoda field_data() ................................................................................................ 137

Rozdzia� 5. Klasy pomocnicze ........................................................................ 139Tablica (array) .............................................................................................................. 139

Funkcja element() ................................................................................................... 139Funkcja random_element() ..................................................................................... 140Funkcja elements() ................................................................................................. 141Wysy�anie danych z formularza ............................................................................. 142

Pliki cookie (cookie) ..................................................................................................... 143Funkcja set_cookie() .............................................................................................. 143Funkcja get_cookie() .............................................................................................. 143Funkcja delete_cookie() ......................................................................................... 143

Data (date) .................................................................................................................... 144Funkcja now() ........................................................................................................ 144Funkcja standard_date() ......................................................................................... 144Funkcja local_to_gmt() .......................................................................................... 145Funkcja unix_to_human() ...................................................................................... 146Funkcja timespan() ................................................................................................. 146Funkcja days_in_month() ....................................................................................... 147Funkcja timezones() ............................................................................................... 148Funkcja timezone_menu() ...................................................................................... 148

Katalog (directory) ....................................................................................................... 150Funkcja directory_map() ........................................................................................ 150

Pobieranie (download) .................................................................................................. 152Funkcja force_download() ..................................................................................... 152

E-mail (email) ............................................................................................................... 153Funkcja valid_email() ............................................................................................. 153Funkcja send_email() ............................................................................................. 154

Plik (file) ...................................................................................................................... 154Funkcja write_file() ................................................................................................ 154Funkcja read_file() ................................................................................................. 155Funkcja delete_files() ............................................................................................. 155Funkcja get_dir_file_info() .................................................................................... 156Funkcja get_file_info() ........................................................................................... 158

8 CodeIgniter. Zaawansowane tworzenie stron w PHP

Funkcja get_mime_by_extension() ........................................................................ 159Funkcja symbolic_permissions() ............................................................................ 159Funkcja octal_permissions() ................................................................................... 160

Formularz (form) .......................................................................................................... 161Funkcja form_open() .............................................................................................. 161Funkcja form_open_multipart() ............................................................................. 162Funkcja form_hidden() ........................................................................................... 162Funkcja form_input() ............................................................................................. 163Funkcja form_password() ....................................................................................... 164Funkcja form_upload() ........................................................................................... 164Funkcja form_textarea() ......................................................................................... 165Funkcja form_dropdown() ..................................................................................... 165Funkcja form_multiselect() .................................................................................... 166Funkcje form_fieldset() i form_fieldset_close() ..................................................... 167Funkcja form_checkbox() ...................................................................................... 167Funkcja form_radio() ............................................................................................. 168Funkcja form_submit() ........................................................................................... 169Funkcja form_reset() .............................................................................................. 169Funkcja form_button() ........................................................................................... 170Funkcja form_close() ............................................................................................. 171Funkcja form_prep() .............................................................................................. 171

HTML (html) ................................................................................................................ 171Funkcja br() ............................................................................................................ 172Funkcja heading() ................................................................................................... 172Funkcja img() ......................................................................................................... 173Funkcja link_tag() .................................................................................................. 174Funkcja nbs() .......................................................................................................... 175Funkcje ol() i ul() ................................................................................................... 175Funkcja meta() ....................................................................................................... 177Funkcja doctype() ................................................................................................... 179

J�zyk (language) ........................................................................................................... 179Funkcja lang() ........................................................................................................ 180

Liczba (number) ........................................................................................................... 181Funkcja byte_format() ............................................................................................ 181

cie�ka (path) ............................................................................................................... 182Funkcja set_realpath() ............................................................................................ 183

Bezpiecze�stwo (security) ............................................................................................ 184Funkcja xss_clean() ................................................................................................ 184Funkcja sanitize_filename() ................................................................................... 184Funkcja do_hash() .................................................................................................. 185Funkcja strip_image_tags() .................................................................................... 185Funkcja encode_php_tags() .................................................................................... 186

Ci�g (string) .................................................................................................................. 187Funkcja random_string() ........................................................................................ 187Funkcja increment_string() .................................................................................... 188Funkcja alternator() ................................................................................................ 188Funkcja repeater() .................................................................................................. 189Funkcja reduce_double_slashes() ........................................................................... 190Funkcja trim_slashes() ........................................................................................... 190Funkcja quotes_to_entities() .................................................................................. 191Funkcja strip_quotes() ............................................................................................ 191

Tekst (text) ................................................................................................................... 192Funkcja word_limiter() ........................................................................................... 192Funkcja character_limiter() .................................................................................... 193Funkcja ascii_to_entities() ..................................................................................... 193

Spis tre�ci 9

Funkcja entities_to_ascii() ..................................................................................... 194Funkcja highlight_code() ....................................................................................... 194Funkcja word_wrap() ............................................................................................. 195Funkcja ellipsize() .................................................................................................. 196

URL (url) ...................................................................................................................... 197Funkcja site_url() ................................................................................................... 197Funkcja base_url() .................................................................................................. 197Funkcja current_url() .............................................................................................. 198Funkcja uri_string() ................................................................................................ 198Funkcja index_page() ............................................................................................. 199Funkcja anchor() .................................................................................................... 199Funkcja redirect() ................................................................................................... 200

XML (xml) ................................................................................................................... 200Funkcja xml_convert() ........................................................................................... 201

Rozdzia� 6. Tworzenie pierwszej aplikacji ........................................................ 203Rozpocz�cie pracy ........................................................................................................ 203Baza danych ................................................................................................................. 204G�ówny plik aplikacji ................................................................................................... 204Plik konfiguracyjny ...................................................................................................... 204Konfiguracja automatycznego �adowania ..................................................................... 204Konfiguracja bazy danych ............................................................................................ 205Konfiguracja domy�lnego kontrolera ........................................................................... 205Tworzenie pliku do przepisywania adresów ................................................................. 205Kontroler — logowanie administratora ........................................................................ 206Kontroler — wylogowanie administratora ................................................................... 208Kontroler — strona g�ówna .......................................................................................... 209Kontroler — kategoria wpisów .................................................................................... 212Kontroler — wpis ......................................................................................................... 215Kontroler — edycja wpisów ......................................................................................... 219Model — logowanie u�ytkownika ................................................................................ 227Model — strona g�ówna ............................................................................................... 228Model — kategoria ....................................................................................................... 229Model — wpis .............................................................................................................. 231Model — polecenia wspó�dzielone ............................................................................... 233Model — edycja ........................................................................................................... 233Widok — nag�ówek ...................................................................................................... 237Widok — stopka ........................................................................................................... 240Widok — menu ............................................................................................................ 240Widok — menu administratora .................................................................................... 242Widok — menu administratora przed zalogowaniem ................................................... 242Widok — kategoria ...................................................................................................... 243Widok — edytowanie kategorii .................................................................................... 245Widok — dodawanie kategorii ..................................................................................... 246Widok — wpisy ............................................................................................................ 246Widok — nowy wpis .................................................................................................... 249Widok — edytowanie wpisu ........................................................................................ 251Widok — najnowsze wpisy .......................................................................................... 253Widok — zaloguj ......................................................................................................... 254Widok — strona g�ówna ............................................................................................... 255Widok — zmie� has�o .................................................................................................. 256Zako�czenie .................................................................................................................. 257

10 CodeIgniter. Zaawansowane tworzenie stron w PHP

Nazwy zastrze�one ....................................................................... 259

Podsumowanie ............................................................................. 261

Skorowidz .................................................................................... 263

Rozdzia� 4.

Sterowniki systemudo 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�adMySQL i PostgreSQL. Dzi�ki temu jest dogodn� platform� do tworzenia zaawanso-wanych aplikacji — umo�liwia przeprowadzenie ró�nych operacji na rekordach, takichjak umieszczanie ich w tabeli, aktualizowanie czy usuwanie.

Praca z baz� danychZanim 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�dziaphpMyAdmin, 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

<?phpif(!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 przypadkuCodeIgnitera dane te s� przechowywane w pliku application/config/database.php.

Rozdzia� 4. � Sterowniki systemu do obs�ugi bazy danych 121

Plik ten zawiera tablic�, w której ustawia si� ró�nego rodzaju dane dost�powe do bazydanych (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 parametruto: mysql, postgres, odbc itd.,

� dbprefix — prefiks nazw tabel w bazie danych, który b�dzie automatyczniedodawany 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 przechowywaniawyników zapyta�,

� cachedir — katalog na serwerze do tymczasowego przechowywania wynikówzapyta� 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��czeniuinterfejsu,

122 CodeIgniter. Zaawansowane tworzenie stron w PHP

� stricton (TRUE/FALSE) — wymuszenie po��czenia z baz� danych w trybieStrict 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 tajest bardzo przydatna, gdy mamy zamiar utworzy aplikacj� korzystaj�c� z zasobówtylko 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� danepotrzebne do po��czenia z baz� danych. Jak pami�tasz, tablic� t� deklarujemy w plikuapplication/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 zgodnyz nazwami kluczy w j�zyku PHP (listing 4.3). Mo�e si� on nazywa na przyk�addrugiepolaczenie (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. � 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 danychb�dzie si� korzysta. W zale�no�ci od tego, czy b�dzie to jedna baza, czy wi�ksza ichliczba, 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ówumo�liwi prawid�owe odwo�ywanie si� do tych obiektów.

Metoda reconnect()Podczas pracy aplikacji niekiedy dochodzi do utraty po��czenia z baz� danych, naprzyk�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

<?phpif(!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�elichcesz zamkn� je r�cznie, mo�esz wywo�a metod� close() (listing 4.8).

Listing 4.8. Zakoczenie po��czenia z baz� danych

<?phpif(!defined('BASEPATH')){ exit('No direct script access allowed');}

class Mvc extends CI_Controller{ public function index() { $this->load->database();

$this->db->close(); }}?>

Rozdzia� 4. � 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�adowyrezultat wykonania skryptu obrazuje rysunek 4.1.

Listing 4.9. Wykonanie zapytania SQL

<?phpif(!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 przedstawionoprzyk�ad prostego zapytania do bazy danych.

Listing 4.10. Zapytanie do bazy danych

<?phpif(!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 zostaniepoprawnie 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 bazydanych. Jest to bardzo wa�ne ze wzgl�du na bezpiecze�stwo naszej aplikacji. W tabeli4.1 przedstawiono dost�pne w CodeIgniterze metody umo�liwiaj�ce zabezpieczaniedanych wpisywanych przez u�ytkownika poprzez wstawianie lewych uko�ników przedznakami specjalnymi, takimi jak apostrof czy cudzys�ów.

Rozdzia� 4. � Sterowniki systemu do obs�ugi bazy danych 127

Tabela 4.1. Metody zabezpieczaj�ce dane

Metoda Opis Przyk�ad

$this->db->escape() Odpowiedni tylko dla ci�gówznakowych

$Sql = "INSERT INTO tabela(tytul) VALUES (".$this->db->escape($Tytul).")";

$this->db->escape_str() Odpowiedni dla wszystkichdanych, bez wzgl�du na ich typ

$Sql = "INSERT INTO tabela(tytul) VALUES('".$this->db->escape_str($Tytul)."')";

$this->db->escape_like_str()

Odpowiedni dla ci�gu znakowegowykorzystanego jako parametrw zapytaniach z u�yciem s�owakluczowego LIKE

$Tytul = '20% upustu';

$Sql = "SELECT id FROMtabela WHERE tytul LIKE'%".$this->db->escape_like_str ($Tytul)."%'";

Bezpieczne zapytania (query)Zastosowanie tego typu zapyta� pozwala na zapewnienie wi�kszego bezpiecze�stwaaplikacji, 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

<?phpif(!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 zapytaniedo 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 tablicymusi by równa liczbie znaków zapytania umieszczonych w pierwszym parametrze.

Generowanie rezultatów zapytaniaIstnieje 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 zostazaprezentowana 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ówionejmetody query(). Wynik ten jest udost�pniany jako obiekt, który mo�na przetworzyw p�tli foreach. Na listingu 4.12 pokazano przyk�adowy skrypt. Rezultatem jego wy-konania b�dzie:

1 Temat wiadomo�ci t2 Kolejny temat wiadomo�ci t

Listing 4.12. Odbieranie wyniku zapytania za pomoc� metody result()

<?phpif(!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. � Sterowniki systemu do obs�ugi bazy danych 129

Metoda result_array()

Metoda result_array() umo�liwia otrzymanie wyniku zapytania w postaci zwyk�ejtablicy 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()

<?phpif(!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�ymetod� num_rows(). Wywo�ujemy j� jako metod� obiektu zawieraj�cego rezultat tegozapytania. Na listingu 4.14 pokazano przyk�adowy skrypt. Wynikiem jego wykonaniab�dzie liczba 2.

Listing 4.14. Przekazywanie liczby wybranych rekordów

<?phpif(!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 PHPspowodowanego wyczerpaniem si� przydzielonych aplikacji zasobów pami�ci RAMserwera, warto rozwa�y r�czne, a nie automatyczne zwalnianie pami�ci po ka�dymwykonaniu 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

<?phpif(!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. � Sterowniki systemu do obs�ugi bazy danych 131

Metoda insert_id()

Metoda insert_id() przekazuje identyfikator warto�ci, która zosta�a ostatnio dodanado 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

<?phpif(!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.17b�dzie liczba 1.

Listing 4.17. Wy�wietlanie liczby rekordów zmienionych podczas ostatniego zapytania

<?phpif(!defined('BASEPATH')){ exit('No direct script access allowed');}

class Mvc extends CI_Controller{ public function index() { $this->load->database();

$Rezultat = $this->db->query('UPDATE tabela_post SET post_tytul = "Nowy post" �WHERE post_id = 3');

echo $this->db->affected_rows();

132 CodeIgniter. Zaawansowane tworzenie stron w PHP

}}?>

Metoda count_all()

Metoda ta zlicza wszystkie rekordy tabeli, której nazw� podano w parametrze. Na listin-gu 4.18 znajduje si� przyk�adowy skrypt. Rezultatem jego wykonania b�dzie liczba 3.

Listing 4.18. Wy�wietlanie liczby rekordów w tabeli

<?phpif(!defined('BASEPATH')){ exit('No direct script access allowed');}

class Mvc extends CI_Controller{ public function index() { $this->load->database();

echo $this->db->count_all('tabela_post'); }}?>

Metoda platform()

Metoda platform() pozwala na wy�wietlenie nazwy typu bazy danych. Rezultatemwykonania skryptu z listingu 4.19 mo�e by na przyk�ad mysql.

Listing 4.19. Przekazywanie informacji o typie bazy danych

<?phpif(!defined('BASEPATH')){ exit('No direct script access allowed');}

class Mvc extends CI_Controller{ public function index() { $this->load->database();

echo $this->db->platform(); }}?>

Rozdzia� 4. � Sterowniki systemu do obs�ugi bazy danych 133

Metoda version()

Metoda version() przekazuje numer wersji aktualnie wykorzystywanej bazy danych.Na listingu 4.20 znajduje si� odpowiedni przyk�ad. Rezultatem wykonania tego skryptub�dzie 5.5.8 (wersja bazy danych mo�e si� ró�ni).

Listing 4.20. Numer wersji bazy danych

<?phpif(!defined('BASEPATH')){ exit('No direct script access allowed');}

class Mvc extends CI_Controller{ public function index() { $this->load->database();

echo $this->db->version(); }}?>

Metoda last_query()

Metoda last_query() pozwala na wy�wietlenie ostatniego zapytania, jakie wykonano nabazie danych. Na listingu 4.21 pokazano przyk�ad wykorzystania tej metody. Rezultatemwykonania tego skryptu b�dzie UPDATE tabela_post SET post_tytul = "Nowy post"WHERE post_id = 3.

Listing 4.21. Wy�wietlanie ostatniego wykonanego zapytania

<?phpif(!defined('BASEPATH')){ exit('No direct script access allowed');}

class Mvc extends CI_Controller{ public function index() { $this->load->database();

$Rezultat = $this->db->query('UPDATE tabela_post SET post_tytul = "Nowy post" �WHERE post_id = 3');

echo $this->db->last_query(); }}?>

134 CodeIgniter. Zaawansowane tworzenie stron w PHP

Informacje o tabelachW ramach obs�ugi baz danych CodeIgniter udost�pnia równie� metody pozwalaj�cena uzyskanie pewnych informacji o tabelach w bazie danych.

Metoda list_tables()

Za pomoc� metody list_tables() mo�emy uzyska nazwy wszystkich tabel z aktu-alnie wykorzystywanej bazy danych. Na listingu 4.22 pokazano odpowiedni przyk�ad.Rezultatem wykonania tego skryptu b�dzie wynik:

tabelatabela_postuzytkownicy

Listing 4.22. Wy�wietlanie nazw tabel z obecnie wykorzystywanej bazy danych

<?phpif(!defined('BASEPATH')){ exit('No direct script access allowed');}

class Mvc extends CI_Controller{ public function index() { $this->load->database();

$Tabele = $this->db->list_tables();

foreach ($Tabele as $Tabela) { echo $Tabela; echo '<br />'; }

}}?>

Metoda table_exists()

Metoda table_exists() umo�liwia sprawdzenie, czy tabela o nazwie podanej jako pa-rametr tej metody istnieje w bazie danych (listing 4.23). Rezultatem wykonania skryptub�dzie: Tabela istnieje w bazie danych, je�eli si� tam rzeczywi�cie znajduje, lubkomunikat: Tabela NIE istnieje w bazie danych w przypadku jej braku.

Rozdzia� 4. � Sterowniki systemu do obs�ugi bazy danych 135

Listing 4.23. Sprawdzenie, czy dana tabela istnieje w bazie danych

<?phpif(!defined('BASEPATH')){ exit('No direct script access allowed');}

class Mvc extends CI_Controller{ public function index() { $this->load->database();

if($this->db->table_exists('tabela')) { echo 'Tabela istnieje w bazie danych'; } else { echo 'Tabela NIE istnieje w bazie danych'; } }}?>

Informacje o polach tabeliTwórcy CodeIgnitera udost�pnili programistom metody pomocne w uzyskiwaniu do-datkowych informacji na temat pól (kolumn) w tabelach bazy danych.

Metoda list_fields()

Metoda list_fields() przekazuje list� wszystkich pól w tabeli, której nazwa zosta�apodana jako parametr tej metody. Na listingu 4.24 znajduje si� przyk�adowy kod. Re-zultatem jego wykonania b�dzie:

post_idpost_tytulpost_trescpost_aktywny

Listing 4.24. Informacje o polach tabeli

<?phpif(!defined('BASEPATH')){ exit('No direct script access allowed');}

class Mvc extends CI_Controller

136 CodeIgniter. Zaawansowane tworzenie stron w PHP

{ public function index() { $this->load->database();

$Pola = $this->db->list_fields('tabela_post');

foreach ($Pola as $Pole) { echo $Pole; echo '<br />'; }

}}?>

Metoda field_exists()

Metoda field_exists() umo�liwia sprawdzenie, czy w tabeli istnieje dane pole. Pierw-szym parametrem metody jest nazwa kolumny, a drugim — nazwa tabeli (listing 4.25).Rezultatem wykonania skryptu b�dzie Kolumna post_tytul istnieje w tabeli w przy-padku stwierdzenia jej obecno�ci.

Listing 4.25. Informacja o okre�lonym polu w tabeli

<?phpif(!defined('BASEPATH')){ exit('No direct script access allowed');}

class Mvc extends CI_Controller{ public function index() { $this->load->database();

if($this->db->field_exists('post_tytul', 'tabela_post')) { echo 'Kolumna post_tytul istnieje w tabeli'; } else { echo 'Kolumna post_tytul NIE istnieje w tabeli'; } }}?>

Rozdzia� 4. � Sterowniki systemu do obs�ugi bazy danych 137

Metoda field_data()

Metoda field_data() przekazuje podstawowe informacje na temat pola w tabeli, któ-rego nazw� podano jako parametr tej metody. Odpowiedni przyk�ad znajduje si� nalistingu 4.26. Rezultatem jego wykonania b�dzie:

post_id int 11 1post_tytul varchar 255 0post_tresc text 0post_aktywny char 1 0

Listing 4.26. Wy�wietlanie informacji o polach tabeli

<?phpif(!defined('BASEPATH')){ exit('No direct script access allowed');}

class Mvc extends CI_Controller{ public function index() { $this->load->database();

$Pola = $this->db->field_data('tabela_post');

foreach($Pola as $Pole) { echo $Pole->name; echo ' '; echo $Pole->type; echo ' '; echo $Pole->max_length; echo ' '; echo $Pole->primary_key; echo '<br />'; } }}?>

Poni�ej omówiono przekazywane warto�ci:

� name — nazwa pola,

� type — typ pola,

� max_length — maksymalna d�ugo� danych w polu (wielko� przechowanychinformacji),

� primary_key — je�eli dane pole stanowi klucz g�ówny tabeli, warto� tegoparametru wyniesie 1.

138 CodeIgniter. Zaawansowane tworzenie stron w PHP

SkorowidzA

adrese-mail, 153IP, 82URL, 18

aktualizacja CodeIgnitera, 14arkusz stylów, 174atak

CSRF, 97directory travelsal, 184XSS, 79

automatyczne �adowanie, 21, 204

Bbaza danych, 12, 119, 204benchmark, 37bezpiecze�stwo, 34, 95, 184bezpieczne zapytania, 127biblioteka, 27

lang, 88pagination, 92, 213

b��d 404, 31buforowanie stron, 34

Cci�g, 187CodeIgniter, 11CSRF, Cross-Site Request Forgeries, 97czas generowania strony, 37czyszczenie zawarto�ci zapytania, 130

Ddane sesji, 99data, 144dodawanie

danych do widoku, 23pliku do archiwum, 114

dost�p dobazy danych, 121metod modelu, 26

dzielenie tre�ci, 91

Ee-mail, 46, 153

Ffiltrowanie

danych, 95, 142XSS, 80, 95

format daty, 145formularz, 54, 55, 58, 161framework

CodeIgniter, 11Symfony, 261Yii, 261Zend, 11, 261

FTP, 64funkcja

alternator(), 188anchor(), 199ascii_to_entities(), 193base_url(), 197br(), 172byte_format(), 181character_limiter(), 193current_url(), 198

264 CodeIgniter. Zaawansowane tworzenie stron w PHP

funkcjadays_in_month(), 147delete_cookie(), 143delete_files(), 155directory_map(), 150do_hash(), 185doctype(), 179element(), 139elements(), 141ellipsize(), 196encode_php_tags(), 186entities_to_ascii(), 194force_download(), 152form_button(), 170form_checkbox(), 167form_close(), 171form_dropdown(), 165form_error(), 64form_fieldset(), 167form_fieldset_close(), 167form_hidden(), 162form_input(), 163form_multiselect(), 166form_open(), 161form_open_multipart(), 162form_password(), 164form_prep(), 171form_radio(), 168form_reset(), 169form_submit(), 169form_textarea(), 165form_upload(), 164get_cookie(), 143get_dir_file_info(), 156get_file_info(), 158get_mime_by_extension(), 159heading(), 172highlight_code(), 194img(), 173increment_string(), 188index_page(), 199lang(), 180link_tag(), 174local_to_gmt(), 145log_message(), 32meta(), 177nbs(), 175now(), 144octal_permissions(), 160ol(), 175quotes_to_entities(), 191random_element(), 140random_string(), 187read_file(), 155redirect(), 200

reduce_double_slashes(), 190repeater(), 189sanitize_filename(), 184send_email(), 154set_cookie(), 143set_realpath(), 183show_404(), 32show_error(), 31site_url(), 197standard_date(), 144strip_image_tags(), 185strip_quotes(), 191symbolic_permissions(), 159timespan(), 146timezone_menu(), 148timezones(), 148trim_slashes(), 190ul(), 175unix_to_human(), 146uri_string(), 198valid_email(), 153validation_errors(), 64word_limiter(), 192word_wrap(), 195write_file(), 154xml_convert(), 201xss_clean(), 184

Ggenerowanie

adresu URL, 197ci�gu URI, 104��czy, 93nag�ówków, 91przycisku, 170rezultatów zapytania, 128strony, 90

grupowanie pól, 167

HHTML, 171

Iidentyfikacja przegl�darki, 105informacje o

plikach, 157polach tabeli, 135przegl�darce, 112tabelach, 134typie bazy danych, 132

instalacja CodeIgnitera, 14

Skorowidz 265

Jj�zyk, 88, 179

Kkalendarz, 39

opcje konfiguracji, 42opcje szablonu, 43opcje wy�wietlania, 41wyszczególnianie dat, 40

katalog, 150cache, 33CodeIgniter, 19CodeIgniterBlog, 203controllers, 18helpers, 28libraries, 27logs, 33uploads, 55views, 54

klasaarray, 139CI_Model, 25cookie, 143date, 144directory, 150download, 152email, 153file, 154form, 161html, 171language, 179number, 181parser, 101path, 182security, 95, 184session, 97string, 187text, 192uri, 103url, 197user_agent, 105xml, 200zip, 113

klasypomocnicze, 28, 139systemowe, 37

kodowanie, 53UTF-8, 113wyrazów, 185

kolorowanie sk�adni, 194kompresja plików, 113

konfiguracja, 43automatycznego �adowania, 204bazy danych, 205domy�lnego kontrolera, 205kalendarza, 42obiektu email, 49obiektu upload, 56sesji, 100

kontroler, 11, 17, 19edycja wpisów, 219domy�lny, 19formularza, 59kategoria wpisów, 212logowanie administratora, 206strona g�ówna, 209wpis, 215wylogowanie administratora, 208

konwersja znaczników, 186

LLAMPP, 203liczba, 181liczba rekordów, 132lista

rozwijana, 166wielokrotnego wyboru, 166wypunktowana, 176

��adowanie

automatyczne zasobów, 29biblioteki, 27, 53biblioteki dzielenia tre�ci, 92biblioteki email, 85biblioteki table, 86klasy, 85klasy pomocniczej, 28, 87modelu, 25, 87obiektu encrypt, 51obiektu form_validation, 58obiektu ftp, 64obiektu zip, 113pliku j�zykowego, 88, 90pliku konfiguracyjnego, 44preferencji, 41sterownika, 29sterownika bazy danych, 120wersji j�zykowej, 89widoku, 22, 23, 86

��cza do stron, 93, 199

266 CodeIgniter. Zaawansowane tworzenie stron w PHP

Mmetoda

accept_charset(), 113accept_lang(), 112add_data(), 114add_dir(), 114add_row(), 75affected_rows(), 131agent_string(), 111all_userdata(), 99archive(), 116assoc_to_uri(), 104attach(), 48base_url(), 46bcc(), 47browser(), 108cache(), 34cc(), 47chmod(), 72clear(), 48, 77clear_data(), 117close(), 72, 124connect(), 65count_all(), 132create_links(), 93data(), 57database(), 87, 120, 122decode(), 52delete_dir(), 69delete_file(), 68display_errors(), 57do_upload(), 57download(), 66, 116enable_profiler(), 91encode(), 51field_data(), 137field_exists(), 136free_result(), 130from(), 47function(), 78generate(), 39, 74get(), 80get_post(), 81get_request_header(), 84get_zip(), 117helper(), 28, 87initialize(), 92insert_id(), 131ip_address(), 82is_browser(), 106is_mobile(), 107is_referral(), 108is_robot(), 107item(), 44

language(), 87last_query(), 133library(), 85line(), 89list_fields(), 135list_files(), 70list_tables(), 134load(), 44, 89log_message(), 33make_columns(), 75message(), 48mirror(), 70mkdir(), 71mobile(), 109model(), 86move(), 68num_rows(), 129parse(), 102platform(), 110, 132print_debugger(), 48query(), 125, 126read_dir(), 115read_file(), 115reconnect(), 123referrer(), 111rename(), 67reply_to(), 47request_headers(), 84result(), 128result_array(), 129robot(), 110run(), 62sanitize_filename(), 96segment(), 103send(), 48set_alt_message(), 48set_caption(), 74set_content_type(), 90set_cookie(), 81set_empty(), 76set_header(), 91set_heading(), 75set_item(), 45set_output(), 90set_rules(), 62set_status_header(), 91set_template(), 76set_userdata(), 98sha1(), 53site_url(), 45subject(), 47system_url(), 46table_exists(), 134unset_userdata(), 100upload(), 66

Skorowidz 267

uri_to_assoc(), 103user_agent(), 83userdata(), 98valid_ip(), 83version(), 109, 133view(), 86xss_clean(), 95

metodyprywatne, 20zabezpieczaj�ce dane, 127

model, 11, 17, 24edycja, 233kategoria, 229logowanie u�ytkownika, 227polecenia wspó�dzielone, 233strona g�ówna, 228wpis, 231

MVC, Model–View–Controller, 11, 17

Nnag�ówek MIME, 159nag�ówki, 84, 91narz�dzie phpMyAdmin, 119, 204nazwy zastrze�one, 259nazwy zastrze�one w�a�ciwo�ci, 30

Oobiekt

benchmark, 37calendar, 39email, 46, 49encrypt, 50form_validation, 58ftp, 64input, 79load, 85modelu, 25output, 90table, 73upload, 53, 56zip, 113

obs�ugabazy danych, 119b��dów, 31

odczytywanie zawarto�ci pliku, 155odszyfrowywanie, 52opcja

error_reporting, 35magic_quotes_runtime, 36register_globals, 35

opcje walidacji formularza, 61

Ppami�, 38plik, 154

.htaccess, 18, 205autoload.php, 29, 44, 90, 204config.php, 18, 204database.php, 120, 122, 205index.php, 31, 204routes.php, 19, 30, 205

plikicookie, 81, 143dziennika, 33konfiguracyjne, 43kontrolerów, 20modelu, 26tymczasowe, 33, 35widoku, 22, 102

pobieranie, 152adresu IP, 82archiwum, 116pliku, 66pliku generowanego w locie, 152zmiennej, 80

podzia� na strony, 92pola tabeli, 135pole

tekstowe, 163typu checkbox, 168typu file, 164typu radio, 168ukryte, 162wieloliniowe, 165

po��czenie z baz� danych, 120, 122pozycjonowanie strony, 29prawa dost�pu do pliku, 160przegl�darka u�ytkownika, 105przekazywanie widoków, 24przenoszenie pliku, 68przesy�anie pliku, 53, 66

Rregu�y walidacji, 59resetowanie formularza, 170rezultaty zapyta�, 128

Ssesja, 97spolszczenie, 13sprawdzanie �cie�ki dost�pu, 183sterownik bazy danych, 120strefy czasowe, 149

268 CodeIgniter. Zaawansowane tworzenie stron w PHP

struktura katalogu, 150szablon

kalendarza, 42tabeli, 77

szyfrowanie, 51

�cie�ka, 182�rodowisko pracy, 203

Ttabele, 73, 134tablica, 139

$_POST, 80$config[], 43$route, 19, 30

tekst, 192tworzenie

aplikacji, 203archiwów, 116, 118bazy danych, 204formularza, 161katalogu, 71kolumn, 75kopii katalogu, 71listy, 176��cza, 199

UURI, 103URL, 197urz�dzenie mobilne, 107usuwanie

apostrofów, 191danych z sesji, 100katalogu, 69plików, 68, 156plików tymczasowych, 34uko�ników, 190znaczników, 186

VVPS, Virtual Private Server, 11

Wwalidacja

adresu e-mail, 153formularzy, 58

widok, 11, 17, 21dodawanie kategorii, 246edytowanie kategorii, 245edytowanie wpisu, 251formularz, 54kategoria, 243menu, 240menu administratora, 242nag�ówek, 237najnowsze wpisy, 253nowy wpis, 249stopka, 240strona g�ówna, 255wpisy, 246zaloguj, 254zmie� has�o, 256

wieloznaczniki, wildcards, 30w�asna metoda sprawdzaj�ca, 63wprowadzanie danych, 79wydajno� systemu, 37wydruk

nag�ówka, 172warto�ci pola, 171

wygl�d strony, 101wyra�enia regularne, 30wysy�anie

danych z formularza, 142, 169wiadomo�ci, 46, 49

wy�wietlaniedaty, 145struktury katalogu, 150wpisów, 212znacznika czasu, 145

XXAMPP, 203XML, 200XSS, Cross-Site Scripting, 79

Zzabezpieczanie

danych, 126nazwy pliku, 184

zamykanieformularza, 171po��czenia, 72

zapisdo sesji, 98tekstu do pliku, 154

zapytania SQL, 119, 125zapytanie wi�zane, 127

Skorowidz 269

zastrze�one nazwyfunkcji, 259kontrolerów, 259sta�ych, 260zmiennych, 260

zawijanie wierszy, 49zmiana

nazwy pliku, 67praw katalogu, 72

zmienna$c, 18$m, 18

znacznik<br />, 172<link />., 174<META>, 177DTD, 179IMG, 173

znaki ASCII, 193zu�ycie pami�ci, 38

270 CodeIgniter. Zaawansowane tworzenie stron w PHP