Archive for the ‘Programowanie’ Category

Gdy konfiguracja apache nie pozwala na „php_flag magic_quotes_gpc Off”

Maj 19th, 2010

Na niektórych hostingach bywa tak,  że z pewnych względów poniższy kod nie zadziała, a wskutek tego np ckeditor też poprawnie nie będzie interpretowała tworzonych linków.


php_flag magic_quotes_gpc Off

Rozwiązanie problemu okazało się banalne:


SetEnv MAGIC_QUOTES 0

„ORA-06553: PLS-382: expression is of wrong type” i tablica dual

Maj 5th, 2010

Kilka dni temu zacząłem się trochę więcej bawić z bazą danych Oracle i od razu napotkałem klika niespodzianek ;) Oto jedna z nich. Pisałem funkcje składowaną, która po wykonaniu jakiś zapytań na bazie i sprawdzeniu kilku warunków miała zwrócić true lube false, a z racji że PL/SQL udostępnia cudowny typ BOOLEAN to zapragnąłem własnie z niego skorzystać.


create or replace function czy_spelnione_wymagania(
 pesel IN varchar2,
 temat IN varchar2)
 return boolean
 is

....

Funkcja się skompilowała poprawnie, więc cały szczęśliwy chciałem ją przetestować korzystając z zabawnej tablicy DUAL.


SELECT czy_spelnione_wymagania('8089123243','Oaza Nowego Zycia 1') FROM DUAL;

I tu mnie spotkało niemiłe zaskoczenie:


ORA-06552: PL/SQL: Statement ignored
ORA-06553: PLS-382: expression is of wrong type

Zasięgnąłem informacji o błędzie i byłem dość  zaskoczony tym co było przyczyną. A mianowicie poczciwy SQL nie obsługuje udostępnianego przez PL/SQL typu BOOLEAN! Więc trzeba to obejść jakoś ładnie i poniżej przedstawiam moją propozycje rozwiązania tego problemu za pomocą bloku PL/SQL.


DECLARE
VAR_BOOL BOOLEAN;
BEGIN
VAR_BOOL :=czy_spelnione_wymagania();
IF( VAR_BOOL = TRUE ) THEN
DBMS_OUTPUT.PUT_LINE( ‘TRUE’ );
END IF;
END;

Tak więc nie jesteśmy zmuszeniu do modyfikacji formatu zwracanych danych przez naszą funkcje składowaną, ale oczywiście jak ktoś bardzo lubi to może sobie przyjąć, że będzie zwracał int, gdzie FALSE = 0 a TRUE = 1.

DostÄ™p do bazy danych w Bootstrap-erze… i można ;)

Styczeń 20th, 2010

PiszÄ…c dziÅ› projekt z BezpieczeÅ„stwa Aplikacji Internetowych zatrzymaÅ‚ mnie na chwilkÄ™ pewien problem…
Jak skorzystać z bazy danych już na poziomie bootstrapera?

W domyślnie wygenerowanym projekcie za pomocą narzędzia Zend_Tool, czyli wpisujemy w konsoli tak:

zf create project nazwa_projektu sciezka_projektu

Oprócz fajnej struktury katalogów otrzymujemy plik konfiguracyjny naszego projektu w prezencie. Znajduje się on w .\application\configs\application.ini i wygladajakoś tak:

[production]
phpSettings.display_startup_errors = 0
phpSettings.display_errors = 0
includePaths.library = APPLICATION_PATH "/../library"
bootstrap.path = APPLICATION_PATH "/Bootstrap.php"
bootstrap.class = "Bootstrap"
resources.frontController.controllerDirectory = APPLICATION_PATH "/controllers"

[staging : production]

[testing : production]
phpSettings.display_startup_errors = 1
phpSettings.display_errors = 1

[development : production]
phpSettings.display_startup_errors = 1
phpSettings.display_errors = 1

Mając taki ładny czysty projekt, każdy pewnie chce go wyposażyć w dostęp do bazy danych. I tu czeka nas miła, bo ustawienie adaptera do naszej bazy jest banalnie prosta i polega tylko na dodaniu małej wstawki w plik konfiguracyjny widoczny powyżej.

...
resources.frontController.controllerDirectory = APPLICATION_PATH "/controllers"
resources.db.adapter = PDO_MYSQL
resources.db.params.host = adres_bazy
resources.db.params.username = nazwa_konta
resources.db.params.password = haslo_dostepu
resources.db.params.dbname = nazwa_tablicy_w_bazie
[staging : production]
...

Powyższa czynność gwarantuje nam, bezproblemowy dostęp do tak skonfigurowanej bazy przy pomocy wszystkich klas z rodziny Zend_Db, w całym projekcie za wyjątkiem bootstrapera (.\application\Bootstrap.php). I tu właśnie się okazało, że w niektórych przypadkach i tam ten dostęp by był przydatny. Aby go uzyskać wystarczy przed naszym kodem korzystającym z dostępu do bazy ustawić domyślny adapter bazy danych, a raczej powiedzieć Zendowi gdzie leży jego konfiguracja. Pomoże nam w tym poniższy kawałek kodu:

...
$config = new Zend_Config_Ini('../application/configs/application.ini', 'production');
$db = Zend_Db::factory($config->resources->db);
Zend_Db_Table::setDefaultAdapter($db);
...

I można już odpytywać bazę danych i tu ;)

Prefixy nazw klas w Zend Framework

Styczeń 11th, 2010

Zend jako dość porzÄ…dny framework PHPowy wypracowaÅ‚ sobie bardzo ciekawy sposób Å‚adowanie klas, który wywodziÅ‚ siÄ™ z banalnego pomysÅ‚u na autoloadera. Mianowicie nazwa klasy zawieraÅ‚a w sobie częściowÄ… Å›cieżkÄ™ do pliku zawierajÄ…cÄ… kod naszego obiektu. Kolejne nazwy folderów i na koÅ„cu również samego pliku z klasÄ… byÅ‚y odseparowane od siebie podkreÅ›likiem „_” (chyba tak to siÄ™ nazywa ;) ), tak wiÄ™c przykÅ‚adowa nazwa klasy wyglÄ…daÅ‚a tak:

Core_Db_Connector co przenosiło się bezpośrednio na lokację /Core/Db/Connector.php.

Pomysł stary i dość powszechnie stosowany choć przeciwników też ma. Programiści Zenda jednak zaadoptowali ten pomysł, lecz gdy zauważyli, że co programista to inna wizja rozłożenia standardowych elementów systemu po katalogach, to pomogli nam to również uporządkować. Dlatego właśnie powstały prefixy dla najważniejszych i często stosowanych elementów systemu.

Poniżej przedstawiam taką podręczną liste, która każdemu początkującemu programiście Zend Frameworka się przyda ;)

Katalog Prefix Przykład zastosowania
api Api_ Api_Resetuj
forms Form_ Form_Dodaj
models Model_ Model_Wpisy
models/DbTable Model_DbTable_ Model_DbTable_Imiona
plugins Plugin_ Plugin_Kolorowanie

Ostatnimi czasy dłubie trochę przy pomocy tego rozwiązania, więc sądzę, że będzie tu więcej artykułów o Zendzie ;)