Prilikom izrade malo zahtevnijih projekata često raste potreba za kreiranjem novih objekata. Međutim, svakako raste potreba za njihovim međusobnim povezivanjima, kako unutar klase, tako i van nje. Samo instanciranje objekata, kao i njihovo međusobno povezivanje ne predstavlja problem ali znatno je veći problem što su te veze čvrste. Samim tim je čvrsta i nemogućnost da se aplikacija kasnije nadogradi ili prilagodi nekim novim potrebama. Stoga je neophodno olabaviti zavisnosti. Pojavom php verzije 5.2 dobijena je mogućnost prosleđivanja objekata klasama (Dependency Injection Pattern). Dakle, ukoliko je nekoj klasi potreban neki objekat, nesmetano joj se može proslediti. Time je smanjena odgovornost klase da ga sama kreira. Dakle Injection == prosleđivanje objekata.
Jedna od mogućnosti prosleđivanja objekata je preko konstruktora klase. Ovo je i najrasprostranjeniji metod, iako se prosleđivanje može vršiti i pomoću setter metoda. Predstaviću prost primer koji u praksi demonstrira Dependency Injection. Primer se sastoji iz 3 klase, Correct i Fuel sa svojim metodama, kao i Car koju realizuje DI pattern. Car.php
<?php
class Car {
//Definisani property klase Car
private $__correct;
private $__fuel;
private $__ignition;
//Dependency Injection preko konstruktora klase
public function __construct(Correct $correct, Fuel $fuel) {
$this->__correct = $correct;
$this->__fuel = $fuel;
}
public function go() {
//Automobil moze jedino krenuti ako je ispravan i ako ima goriva
if ($this->__correct->isCorrect() && $this->__fuel->have_Fuel()) {
$this->__ignition = TRUE;
}
echo 'HERE WE GO!!!!';
}
public function stop() {
//Ukoliko je automobil neispravan ili nema goriva, ne moze krenuti
if ($this->__correct->notCorrect() || $this->__fuel->not_Fuel()) {
$this->__ignition = FALSE;
}
echo 'WE HAVE TO STOP!!!';
}
}
Correct.php
<?php
class Correct {
private $__is_Correct;
public function isCorrect() {
$this->__is_Correct = TRUE;
}
public function notCorrect() {
$this->__is_Correct = FALSE;
}
public function correct() {
return $this->__is_Correct;
}
}
Fuel.php
<?php
class Fuel {
private $__have_Fuel;
public function have_Fuel() {
$this->__have_Fuel = TRUE;
}
public function not_Fuel() {
$this->__have_Fuel = FALSE;
}
public function fuel() {
return $this->__have_Fuel;
}
}
Ostaje još index.php koji daje rezultate korišćenjem DI pattern-a.
<?php
require 'core/init.php'; //Autoloading
$car = new Car(new Correct, new Fuel);
$car->go();
echo " ";
$car->stop();
Kao i ranije, korišćen je autoloading. Iako nema mnogo klasa, zgodno ga je koristiti, naročito ukoliko se javi potreba za preimenovanjem klasa.
Ovaj helper ima zadatak da ukaže na neispravno popunjene forme, odnosno nepopunjene forme. Helper ne koristi framework za razliku od ostalih projekata na blogu, ali svakako ima za cilj da demonstrira OO pristup, PDO API kroz prepare() statement i tzv. SQL Injection, sve to naravno kroz PHP. Sam helper nije veliki (koristi samo 3 klase), ali se uz veoma malu doradu uspešno može implementirati u svaki custom framework. Na isti (ili barem sličan) način funkcionišu validation_helper, odnosno validation_library u mnogim radnim okvirima kojima upravlja PHP. Dakle, u našem slučaju ćemo koristiti bazu sa jednom tabelom, čisto radi provere da li uneti podatak sa forme već postoji u bazi ili ne. Sve ostalo se izvršava direktno u skruptu, bez komunikacije sa bazom. Napomena: syntax highlighting na blogu hoće po neki put da "pojede" po koji html tag, tako da će vam se možda index.php učiniti malo čudnim. Kompletan projekat se može videti na github.com/vlradovanovic Baza se može preuzeti ovde, a izgleda ovako:
-- phpMyAdmin SQL Dump
-- version 4.0.4.1
-- http://www.phpmyadmin.net
--
-- Host: 127.0.0.1
-- Generation Time: Jan 28, 2014 at 01:36 PM
-- Server version: 5.5.32
-- PHP Version: 5.4.19
SET SQL_MODE = "NO_AUTO_VALUE_ON_ZERO";
SET time_zone = "+00:00";
/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
/*!40101 SET NAMES utf8 */;
--
-- Database: `validacija`
--
CREATE DATABASE IF NOT EXISTS `validacija` DEFAULT CHARACTER SET latin1 COLLATE latin1_swedish_ci;
USE `validacija`;
-- --------------------------------------------------------
--
-- Table structure for table `korisnici`
--
CREATE TABLE IF NOT EXISTS `korisnici` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`korisnicko_ime` varchar(25) NOT NULL,
`lozinka` varchar(60) NOT NULL,
`ime_prezime` varchar(35) NOT NULL,
`email` varchar(20) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=3 ;
--
-- Dumping data for table `korisnici`
--
INSERT INTO `korisnici` (`id`, `korisnicko_ime`, `lozinka`, `ime_prezime`, `email`) VALUES
(1, 'admin', 'd033e22ae348aeb5660fc2140aec35850c4da997', 'Vladimir Radovanovic', 'vl.radovanovic@gmail');
/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;
/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;
/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;
Input_class.php -- Proverava da li postoji unos i ako postoji deklariše metode ($_GET, odnosno $_POST):
<?php
class Input_class
{
//Ukoliko postoji unos, prveri da li je GET ili POST, oba dolaze u obzir
//Default je 'post'
public static function exist($case = 'post')
{
switch ($case) {
case 'post':
if (!empty($_POST))
{
return TRUE;
}
else return FALSE;
break;
case 'get':
if (!empty($_GET))
{
return TRUE;
}
else return FALSE;
break;
default:
break;
}
}
public static function input($value)
{
if (isset($_POST[$value]))
{
return $_POST[$value];
}
elseif (isset ($_GET[$value])) {
return $_GET[$value];
}
return '';
}
}
FormValidation_class.php izgleda ovako:
<?php
class FormValidation_class
{
//Definisani property
private $__database = null,
$__error = array(),
$__success = false;
public function __construct() {
$this->__database = DataBase_class::instance();
}
public function check($input, $fields = array())
{
foreach ($fields as $fields => $rules) {
foreach ($rules as $key => $key_value) {
$value = $input[$fields]; // Unos sa tastature, polje textbox
if ($key === 'obavezno' && empty($value)) //U slucaju da je polje obavezno a da je unos prazan
{
$this->addError("{$fields} je obavezno uneti."); //Npr: Korisnicko ime je obavezno
}
elseif (!empty ($value)) {
switch ($key) {
case 'minimalno':
if (strlen($value) < $key_value)
{
$this->addError("Polje {$fields} mora imati najmanje {$key_value} karaktera.");
}
break;
case 'maksimalno':
{
if (strlen($value) > $key_value)
{
$this->addError("Polje {$fields} mora imati najviše {$key_value} karaktera.");
}
}
break;
case 'jedinstven': //U slucaju da vec postoji taj username u bazi
{
$query = $this->__database->query("korisnicko_ime");
if ($query->count())
{
$this->addError("{$fields} postoji u bazi, pokušajte sa nekim drugim.");
}
}
break;
case 'isto':
{
if ($value != $input[$key_value])
{
$this->addError("Polje {$fields} mora biti isto kao polje lozinka");
}
}
break;
case 'ispravno':
{
if (!preg_match("/([\w\-]+\@[\w\-]+\.[\w\-]+)/", $value))
{
$this->addError("Pogrešan {$key_value} format");
}
}
break;
default:
break;
}
}
}
}
if (empty($this->__error))
{
$this->__success = TRUE;
}
return $this; //Vraca current objekat
}
public function success()
{
return $this->__success;
}
public function error()
{
return $this->__error;
}
private function addError($error)
{
$this->__error[] = $error;
}
}
DataBase_class.php treba da izgleda ovako:
<?php
class DataBase_class {
//Definisani property
private static $__instance = null;
private $__pdo,
$__error = false,
$__result,
$__query,
$__count = 0;
private function __construct() {
// Napraviti konekciju prema bazi
$hostname = "localhost";
$user = "root";
$pass = "";
$dbname = "validacija";
try {
$conn = "mysql:host=$hostname;dbname=$dbname";
$this->__pdo = new PDO($conn, $user, $pass);
}
catch (Exception $exc) {
die($exc->getMessage());
}
}
public static function instance()
{
//Pomocu instance() komuniciramo sa bazom iz razlicitih klasa
if (!isset(self::$__instance))
{
self::$__instance = new DataBase_class();
}
return self::$__instance;
}
public function query($value)
{
$this->__error = FALSE;
if ($this->__query = $this->__pdo->prepare("SELECT * FROM korisnici WHERE korisnicko_ime = :name"))
{
$this->__query->bindParam(":name", Input_class::input($value));
if ($this->__query->execute())
{
$this->__result = $this->__query->fetchAll(PDO::FETCH_OBJ);
$this->__count = $this->__query->rowCount();
}
}
else {
$this->__error = TRUE;
}
return $this;
}
public function count()
{
return $this->__count;
}
public function result()
{
return $this->__result;
}
public function error()
{
return $this->__error;
}
}
Evo još jedne aplikacije koja ima za cilj da demonstrira moj skromni trud. U pitanju je simulacija nekih osnovnih usluga koje se koriste u bankarstvu. Naravno i ovu aplikaciju pokreće CodeIgniter framework, iz već dobro znanih razloga. Dakle, kao i kod bloga, f-je controller-a pozivaju tzv. multiple view. Ova aplikacija koristi višedimenzionalne sesije, što znači da admin, i jedino admin može upravljati sadržajem. Parametri za pristup su: Username: vlada Password: admin
Od biblioteka koristi "email", "session", "form_validation", "database"... Ostale aplikacije možete pogledati na github.com/vlradovanovic
Za sam početak, naravno baza koja se može preuzeti ovde.
-- phpMyAdmin SQL Dump
-- version 3.5.2
-- http://www.phpmyadmin.net
--
-- Host: localhost
-- Generation Time: Sep 23, 2013 at 01:43 PM
-- Server version: 5.5.25a
-- PHP Version: 5.4.4
SET SQL_MODE="NO_AUTO_VALUE_ON_ZERO";
SET time_zone = "+00:00";
/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
/*!40101 SET NAMES utf8 */;
--
-- Database: `ebank`
--
-- --------------------------------------------------------
--
-- Table structure for table `klijenti`
--
CREATE TABLE IF NOT EXISTS `klijenti` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`ime` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
`prezime` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
`ulica` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
`mesto` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
`telefon` varchar(25) COLLATE utf8_unicode_ci NOT NULL,
`brracuna` varchar(50) COLLATE utf8_unicode_ci NOT NULL,
`brojlk` int(30) NOT NULL,
`JMBG` varchar(15) COLLATE utf8_unicode_ci NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci AUTO_INCREMENT=4 ;
--
-- Dumping data for table `klijenti`
--
INSERT INTO `klijenti` (`id`, `ime`, `prezime`, `ulica`, `mesto`, `telefon`, `brracuna`, `brojlk`, `JMBG`) VALUES
(1, 'Vladimir', 'Radovanović', 'Lep. bulevar 1', 'Kragujevac', '0606804060', '225-11522366-58', 336558, '0804984720019'),
(2, 'Milodarka', 'Radovanović', 'Nikole Pašića 10/31', 'Kragujevac', '0649804060', '224-22366522-85', 366842, '2604984788916'),
(3, 'Miodrag', 'Radovanović', 'Milivoja Živanovića 5/22', 'Kragujevac', '0641152806', '114-5566225-55', 25441, '3107949720016');
-- --------------------------------------------------------
--
-- Table structure for table `korisnici`
--
CREATE TABLE IF NOT EXISTS `korisnici` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`username` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
`password` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci AUTO_INCREMENT=2 ;
--
-- Dumping data for table `korisnici`
--
INSERT INTO `korisnici` (`id`, `username`, `password`) VALUES
(1, 'vlada', '21232f297a57a5a743894a0e4a801fc3');
-- --------------------------------------------------------
--
-- Table structure for table `nalog_isplata`
--
CREATE TABLE IF NOT EXISTS `nalog_isplata` (
`id_isplata` int(11) NOT NULL AUTO_INCREMENT,
`id_klijenta` int(15) NOT NULL,
`JMBG` varchar(15) COLLATE utf8_unicode_ci NOT NULL,
`isplatilac` varchar(50) COLLATE utf8_unicode_ci NOT NULL,
`primalac` varchar(25) COLLATE utf8_unicode_ci NOT NULL,
`svrha` text COLLATE utf8_unicode_ci NOT NULL,
`brracuna` varchar(25) COLLATE utf8_unicode_ci NOT NULL,
`iznos` decimal(10,2) NOT NULL,
`poziv_na_broj` varchar(25) COLLATE utf8_unicode_ci NOT NULL,
`komentar` text COLLATE utf8_unicode_ci NOT NULL,
`datum` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
PRIMARY KEY (`id_isplata`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci AUTO_INCREMENT=3 ;
--
-- Dumping data for table `nalog_isplata`
--
INSERT INTO `nalog_isplata` (`id_isplata`, `id_klijenta`, `JMBG`, `isplatilac`, `primalac`, `svrha`, `brracuna`, `iznos`, `poziv_na_broj`, `komentar`, `datum`) VALUES
(1, 1, '0804984720019', 'Vladimir Radovanović', 'Milodarka Radovanovic', 'asdfsdfsdfdf', '225-11522366-58', 49.00, '33622', '0', '2013-09-05 11:45:41'),
(2, 1, '0804984720019', 'Vladimir Radovanović', 'Mileva', 'fghfh', '225-11522366-58', 20.00, '556-332RS', '0', '2013-09-10 07:06:16');
-- --------------------------------------------------------
--
-- Table structure for table `nalog_uplata`
--
CREATE TABLE IF NOT EXISTS `nalog_uplata` (
`id_uplata` int(11) NOT NULL AUTO_INCREMENT,
`id_klijenta` int(15) NOT NULL,
`JMBG` varchar(15) COLLATE utf8_unicode_ci NOT NULL,
`uplatilac` varchar(50) COLLATE utf8_unicode_ci NOT NULL,
`primalac` varchar(50) COLLATE utf8_unicode_ci NOT NULL,
`svrha` text COLLATE utf8_unicode_ci NOT NULL,
`racun_primaoca` varchar(25) COLLATE utf8_unicode_ci NOT NULL,
`iznos` decimal(10,2) NOT NULL,
`poziv_na_broj` varchar(25) COLLATE utf8_unicode_ci NOT NULL,
`komentar` text COLLATE utf8_unicode_ci NOT NULL,
`datum` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
PRIMARY KEY (`id_uplata`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci AUTO_INCREMENT=47 ;
--
-- Dumping data for table `nalog_uplata`
--
INSERT INTO `nalog_uplata` (`id_uplata`, `id_klijenta`, `JMBG`, `uplatilac`, `primalac`, `svrha`, `racun_primaoca`, `iznos`, `poziv_na_broj`, `komentar`, `datum`) VALUES
(23, 1, '0804984720019', 'Vladimir Radovanović', 'xcvxcv', 'vxcv', 'xcvxcv', 50.00, 'xcvv', 'xcvcxvxv', '2013-09-04 22:00:00'),
(24, 1, '0804984720019', 'Vladimir Radovanović', 'vscv c', 'vxcvxcv', 'xvxcv', 600.00, 'xcvxcv', 'xcvv', '2013-09-04 22:00:00'),
(25, 1, '0804984720019', 'Vlada Radovanović', 'sdsd', 'asdasd', 'asdasd', 550.00, 'adasd', 'asdasd', '2013-09-04 22:00:00'),
(26, 1, '0804984720019', 'Vlada Radovanović', 'dfdsf', 'sdff', 'sdfsdf', 600.00, 'sf', 'sfsdfsf', '2013-09-04 22:00:00'),
(27, 1, '0804984720019', 'Vlada Radovanović', 'sdfsdf', 'sdfsdf', 'sdfdsf', 600.00, 'dfsf', 'dsfdsfdfsf', '2013-09-04 22:00:00'),
(28, 1, '0804984720019', 'Vlada Radovanović', 'Milodarka Radovanovic', 'dfgd', '336-552669-55', 152.00, '336', 'fgh', '2013-09-04 22:00:00'),
(29, 1, '0804984720019', 'Vlada Radovanović', 'dfsdf', 'sdfdsf', 'sdfsdf', 400.00, 'sdff', 'sdff', '2013-09-04 22:00:00'),
(30, 1, '0804984720019', 'Vlada Radovanović', 'sdfds', 'fdfsf', 'sdfdf', 300.00, 'dsfsdf', 'sdf', '2013-09-04 22:00:00'),
(31, 1, '0804984720019', 'Vlada Radovanović', 'Milodarka Radovanovic', 'tert', 'ertrt', 100.00, 'ererg', 'gerg', '2013-09-04 22:00:00'),
(32, 1, '0804984720019', 'Vlada Radovanović', 'dfgdfg', 'dgdfg', 'sdfdf', 300.00, 'fdgfdg', 'dfgd', '2013-09-04 22:00:00'),
(33, 1, '0804984720019', 'Vlada Radovanović', 'dfgfd', 'dfgdfg', 'fgdfg', 152.00, 'dfgfdg', 'dfgfdg', '2013-09-04 22:00:00'),
(34, 1, '0804984720019', 'Vlada Radovanović', 'Milodarka Radovanovic', 'sfsd', '336-552669-55', 500.00, 'dfgdg', 'fdsfds', '2013-09-04 22:00:00'),
(35, 1, '0804984720019', 'Vlada Radovanović', 'Milodarka Radovanovic', 'dfgdfgd', 'fgdfgfdg', 600.00, 'dfgfg', 'gdfgfd', '2013-09-04 22:00:00'),
(36, 1, '0804984720019', 'Vlada Radovanović', 'dfgdfg', 'sdfdsf', '336-552669-55', 400.00, 'dfgdg', 'sdfsdfsdf', '2013-09-04 22:00:00'),
(37, 1, '0804984720019', 'Vlada Radovanović', 'fgbbfb', 'fgbgb', '336-552669-55', 500.00, 'fbgb', 'fbfgb', '2013-09-04 22:00:00'),
(38, 1, '0804984720019', 'Vlada Radovanović', 'ssacsac', '0', '0', 600.00, 'ascasc', '0', '2013-09-04 22:00:00'),
(39, 1, '0804984720019', 'Vladimir Radovanović', 'JP Srbija Gas', 'Racun za gas', '665-556222-22', 150.00, '223-22', 'osodasd', '2013-09-04 22:00:00'),
(40, 1, '0804984720019', 'Vladimir Radovanović', 'sdsd', 'sdcfsdv', 'sdvsdv', 100.00, 'sdvsd', 'sdvsd', '2013-09-04 22:00:00'),
(41, 1, '0804984720019', 'Vladimir Radovanović', 'zczxc ', 'zxczczc', 'zxccxxc', 25.00, 'xczc', 'zxcxzc', '2013-09-04 22:00:00'),
(42, 1, '0804984720019', 'Vladimir Radovanović', 'Milodarka Radovanovic', 'fghdfgg', 'fdgdfg', 50.00, 'dfgdfg', 'dfgdfg', '2013-09-08 22:00:00'),
(43, 1, '0804984720019', 'Vladimir Radovanović', 'fghfgh', 'fghgfh', 'fgfghgh', 30.00, 'fhfgh', 'fgfh', '2013-09-09 07:51:08'),
(44, 1, '0804984720019', 'Vladimir Radovanović', 'Leposava Mirovic', 'Kredit za telefon', '663-225442-69', 300.00, '556-332RS', 'Dopuna kredita', '2013-09-10 06:57:53'),
(45, 1, '0804984720019', 'Vladimir Radovanović', 'Leposava Mirovic', '0', '0', 20.00, '556-332RS', '0', '2013-09-10 06:59:50'),
(46, 1, '0804984720019', 'Vladimir Radovanović', 'Mileva', '0', '0', 332.00, 'sdfsdf', '0', '2013-09-10 07:02:46');
-- --------------------------------------------------------
--
-- Table structure for table `racun`
--
CREATE TABLE IF NOT EXISTS `racun` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`broj_racuna` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
`broj_lk` int(30) NOT NULL,
`JMBG` varchar(15) COLLATE utf8_unicode_ci NOT NULL,
`vrsta` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
`banka` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
`prethodno_stanje` decimal(10,2) NOT NULL,
`trenutno_stanje` decimal(10,2) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci AUTO_INCREMENT=4 ;
--
-- Dumping data for table `racun`
--
INSERT INTO `racun` (`id`, `broj_racuna`, `broj_lk`, `JMBG`, `vrsta`, `banka`, `prethodno_stanje`, `trenutno_stanje`) VALUES
(1, '225-11522366-58', 336558, '0804984720019', 'Dinarski', 'EFG', 948.00, 950.00),
(2, '224-22366522-85', 366842, '2604984788916', 'Dinarski', 'ProCredin Bank AD', 225222.00, 55220.00),
(3, '114-5566225-55', 25441, '3107949720016', 'Devizni', 'Komercijalna banka', 552.00, 225.00);
-- --------------------------------------------------------
--
-- Table structure for table `uplata_licni`
--
CREATE TABLE IF NOT EXISTS `uplata_licni` (
`id_uplata` int(11) NOT NULL AUTO_INCREMENT,
`id_klijenta` int(15) NOT NULL,
`JMBG` varchar(15) COLLATE utf8_unicode_ci NOT NULL,
`iznos` decimal(10,2) NOT NULL,
`komentar` text COLLATE utf8_unicode_ci NOT NULL,
`datum` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
PRIMARY KEY (`id_uplata`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci AUTO_INCREMENT=3 ;
--
-- Dumping data for table `uplata_licni`
--
INSERT INTO `uplata_licni` (`id_uplata`, `id_klijenta`, `JMBG`, `iznos`, `komentar`, `datum`) VALUES
(1, 1, '0804984720019', 500.00, '0', '2013-09-13 09:46:06'),
(2, 1, '0804984720019', 2.00, '0', '2013-09-13 09:47:43');
/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;
/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;
/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;
Biblioteke i helpere je moguće učitati u konstruktoru klase, samoj f-ji ili u autoload.php
Ovaj servis omogućuje sve vidove uplata na račun poverioca. Mogu se izvršiti i oslali
vidovi plaćanja putem opšte uplatnice.
<?php if (!$this->session->userdata('logged_client'))
{
?>
<a href=<?php echo base_url()."Home/clients_payment"; ?> class="button">Izvrši uplatu
Ovaj servis omogućuje sve isplatu novca u gotovom. Neophodno je imati sredstva na računu za uspešnu za uspešnu realizaciju.
<?php if (!$this->session->userdata('logged_client'))
{
?>
<a href=<?php echo base_url()."Home/clients_payout"; ?> class="button">Izvrši isplatu
<a href=Izvrši isplatu
Uplata na sopstven račun
Ovim servisom možete izvršiti uplate na sopstven račun.
<?php if (!$this->session->userdata('logged_client'))
{
?>
<a href=Uplati na račun
Ovim servisom možete izvršiti uvid u stanje Vašeg računa.
<?php if (!$this->session->userdata('logged_client'))
{
?>
Uvid u stanje
<?php
}
else {
?>
Uvid u stanje
<?php
}
?>
Istorija transakcija
Pogledajte istoriju transakcija
Ovim servisom možete videti kompletnu istoriju transakcija sa Vašeg računa.
<?php if (!$this->session->userdata('logged_client'))
{
?>
Istorija
<?php
}
else {
?>
Istorija
<?php
}
?>
Zovem se Vladimir Radovanović. Rođen sam u Kragujevcu 08.04.1984. godine.
Završio sam specijalističke strukovne studije na Visokoj Tehničkoj školi strukovnih studija u Kragujevcu i dobio zvanje "strukovni informatičar specijalista".
Na studijama nisam imao
puno prilike da kroz realne probleme učim programiranje tako da sam morao lično da pronađem najbolji način da se posvetim praksi. Web programiranjem se nikada nisam bavio
profesionalno, ali me je oduvek interesovalo tako da mi i učenje nije padalo teško.
Od tehnologija preferiram PHP i CodeIgniter kao framework. Zašto?
1. Laka instalacija i konfiguracija
2. Čista i elegantna MVC implementacija
3. Nudi i Active Record za upravljanje bazom podataka
4. Dobre performanse
5. Veliki broj biblioteka i helpera koje olakšavaju rad
6. Velika CI zajednica
7. Jednostavno mi pasuje
Od tehnologija za upravljanje sadržajem najviše sam koristio Joomla-u od 1.5 do 2.5 verzije. Jednostavno volim hijerarhijsku strukturu preko sekcija, kategorija do članaka, kojim Joomla
upravlja. Kao akrivan član na forum.joomla.org stekao sam mnogo znanja pri rešavanju konkretnih problema.
Ranije objavljeni projekti: hranaizdravlje.com, prostorinzenjering.com,
vladimir.radovanovic.com, kao i mnostvo ne objavljenih projekata.
Vladimir Radovanovićgithub.com/vlradovanoviccodexist.blogspot.com
</div>
</div>
Views/about_app.php izgleda ovako:
<div id="three-column-column" class="container">
Aplikacija "Ebanking" predstavlja simulaciju rada nekih najosnovnijih usluga u bankarstvu. I ovu aplikaciju pokreće CodeIgniter framework.
Kao i kod aplikacije "blog", za učitavanje strana
koristi se tzv. multiple view, kroz svaku f-ju controller-a.
Ova aplikacija koristi višedimenzionalne sesije što znači da admin, i jedino admin može
upravljati sadržajem.
Na osnovu unetog broja tekuceg racuna i broja licne karte moze se dalje
upravljati sadrzajem.
Parametri za pristup su: Username: vlada Password: admin
Od biblioteka koristi "database", "session", "form_validation", "email"...
Vladimir Radovanovićgithub.com/vlradovanoviccodexist.blogspot.com
Ovaj servis omogućuje sve vidove uplata na račun poverioca. Mogu se izvršiti i oslali
vidovi plaćanja putem opšte uplatnice.
<?php if (!$this->session->userdata('logged_client'))
{
?>
class="button">Izvrši uplatu
<?php
}
else {
?>
class="button">Izvrši uplatu
<?php
}
?>
isplata gotovine
Ovaj servis omogućuje sve isplatu novca u gotovom. Neophodno je imati sredstva na računu za uspešnu za uspešnu realizaciju.
<?php if (!$this->session->userdata('logged_client'))
{
?>
class="button">Izvrši isplatu
<?php
}
else {
?>
class="button">Izvrši isplatu
<?php
}
?>
Uplata na sopstven račun
Ovim servisom možete izvršiti uplate na sopstven račun.
<?php if (!$this->session->userdata('logged_client'))
{
?>
Uplati na račun
<?php
}
else {
?>
Uplati na račun
<?php
}
?>