Web aplication almost finished pt.2

Since being a good blogger I have to worry about my blog being read, every now and then, I had to start writing on English, as you can see. Now, I don’t know if that is going to make my blog more visited or not, but at least I can give it a try :).

So, in last article there was some talk about my “new” web site for faculty library. Now, you’ll say: “WOW, that must be AWSEOME”… And I say yes, it is awesome, but not super awesome since it has one page and practically just reads from database. No insertion or administration possibilities. Now you’ll say: “Dude WTF did you do then?” 🙂 and I’ll say, I built it with my ten fingers. From the scratch! I don’t want to make myself super dude or super programmer. This is just one basic web application which I programmed as I went through course of web programming in my classes. Technologies that were used are: PHP5, MySQL5, PDO, jQuery’s DataTables and of course HTML, CSS, JavaScript. I want to make special thanks to my home server with Ubuntu 8.04 Server OS, set up by me 🙂 and other things related to it… (if there are any left).

The web application had a really simple design, and that was not so appealing for the everyday use, so one professor from my department had some suggestions and I changed design.

Here you can see the new design and, I’m sorry if you can’t read it but it is not meant to be for foreigners. It is still simple web application for the intern use. If some day it becomes pretty used app I, or whoever keeps improving it  will certainly add English language.

Anyway, thanks for reading and I’d like to see some comments bout my new design…

Advertisements

Biblio веб апликација скоро па готова

Када сам се упустио у коштац са технологијама потребним за ову веб апликацију, одлучио сам да своје проблеме и решења постујем овде. Тако је настао овај блог. Неколико претходних постова су били на тему веб програмирања. Сада када је све готово, условно речено, могу да се похвалим и да кажем да је ово било једно супер искуство за мене као ученика. Доста интересантних и корисних ствари сам научио.

Веб апликација је настала из идеје да се студентима омогући преглед и брзо тражење књига библиотеке факултета. Као неко ко је у датом тренутку могао тако нешто да одради, почео сам и после пар месеци резултати нису изостали. Наравно, апликација није ни екстра компликована ни ултра једноставна :). Било како било, ево линка па просудите! Можда од мене и постане неки веб програмер/дизајнер!

PHP и MySQL, 2. део

Знам да је нездраво висити на блогу и нон стоп постовати :), али боље да то урадим док је “свеже”. Надам се да ћете ми опростити ;).

Вечерас говоримо о раду са југо знацима латинице у MySQL бази података. Даћу вам пар савета како да свој живот учините једноставнијим и не проживљавате бол и патњу коју сам ја проживео :). Хвала богу па је кратко трајало. Ево пар савета:

1. у раду са MySQL базом, битно је да поставите collation на utf8_unicode_ci.
$dbh->query("ALTER DATABASE $database DEFAULT CHARACTER SET utf8 COLLATE utf8_unicode_ci");

2. после остваривања конекције са базом, из PHP-a, постављате сет карактера којим ћете моћи да вршите упите тј. које ће и PHP и MySQL разумети. Може се одредити на пар начина:
$baza = new PDO("mysql:host=$server;dbname=$db;charset=UTF-8", $user, $password);
или
$baza->exec('SET CHARACTER SET utf8');
или
$dbh->query('SET NAMES utf8'); (више објашњења овде);

На крају, када желите резултате представити на веб страни морате јој рећи како да тумачи ваше карактере. То се једноставно каже браузеру са:
<meta http-equiv="Content-Type" content="text/html charset=UTF-8" >
тагом који се постави унутар head html тага.

PHP и MySQL, 1. део

Поздрав свима, овим почињемо серије о PHP и MySQL, у виду неких трикова и трипова :).

Као што сам навео у последњем посту о JSON-у и PHP-у, у задње време радим са базом библиотеке факултета. Ишчитане податке приказујем помоћу jQuery-јевих DataTables. Примери које сам нашао и употребио у раду са базом су користили класичне mysql драјвере. У консултацији са асистентом, одлучили смо да користимо PDO драјвере. Пошто користим објектни PHP, PDO драјвери су логичан след ствари, јер омогућују да се резултатима упита аутоматски попуњавају објекти, који ће се инстанцирати на основу класе коју сами дефинишете. То је мени било врло интересантно, и на крају крајева био изазов. У преправкама кода, морао сам да преправљам и дефинисане MySQL упите. Ту долазимо до трипа и трика, који сам хтео да вам откријем.

У раду са DataTables, при позивању PHP скрипте која се налази на серверу, шаљу се параметри, међу којима и параметри о броју приказаних објеката, које добијете из упита. Тим параметрима се попуњава део упита, који изгледа овако:

"LIMIT ".mysql_real_escape_string( $_GET['iDisplayStart'] ).", ".mysql_real_escape_string( $_GET['iDisplayLength'] );

Искључимо функцију mysql_real_escape_string која припада класичним MySQL драјверима. Треба је заменити PDO еквивалентом, што представља мој следећи изазов. Овај део упита се комбинује са делом за сортирање и главним SELECT делом, и добија се упит који се изврши и врати тачно онолико објеката у табелу, колико је речено овим LIMIT упитом. Дакле, iDislpayStart говори бази од ког реда резултата узима податке, а iDisplayLength колико ће редова узети. Истовремено, је потребно вратити и податак о броју редова који је упит вратио, без LIMIT-а, наравно. То је трип, сложићете се. У почетку ми ово није било познато, тако да сам имао проблема. За параметре који се шаљу LIMIT наредби, користи се једна спуштајућа листа, са предефинисаним бројем резултата које желите да видите у табели (10,25,50,100). Колико год да сам изабрао, резултата је увек било, али исто онолико колико сам селектовао. То ми је било чудно, јер је резултата било више.

Део упита који сам намерно изоставио је био SQL_CALC_FOUND_ROWS, који иде одмах после SELECT наредбе. Незнајући сврху овога, јавили су се већ поменути проблеми. На крају сам на тежи начин научио чему ова наредба служи :). Наиме, коришћење овакве функције је много брже него извођење неког упита са LIMIT и без LIMIT наредбе. Она ће, при првом упиту израчунати број редова које упит врати, не рачунајући ограничења LIMIT-а. То је трик ;). Овим ћете једним ударцем (упитом), завршити два посла.

Упитом који следи, ћете покупити број објеката, које сте добили упитом. На овај начин, који је бржи, добијате број враћених података и лимитиране податке за испис у табели.

Ево sql упита:
SELECT FOUND_ROWS()
Надам се да ће неком бити од помоћи. Видимо се ускоро! 😉