понедељак, 23. септембар 2013.

Ebanking system

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
$autoload['libraries'] = array('database', 'session', 'form_validation');


/*
| -------------------------------------------------------------------
|  Auto-load Helper Files
| -------------------------------------------------------------------
| Prototype:
|
| $autoload['helper'] = array('url', 'file');
*/

$autoload['helper'] = array('url', 'form');

database.php  (podešavanja baze) izgleda ovako:
$db['default']['hostname'] = 'localhost';
$db['default']['username'] = 'root';
$db['default']['password'] = '';
$db['default']['database'] = 'ebank';
$db['default']['dbdriver'] = 'mysql';
$db['default']['dbprefix'] = '';
$db['default']['pconnect'] = TRUE;
$db['default']['db_debug'] = TRUE;
$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;

Postaviti default controller u routes.php
$route['default_controller'] = "LoginController";
$route['404_override'] = '';

Controllers/LoginController.php izgleda ovako:
<?php
class LoginController extends CI_Controller
{
    public function __construct() {
        parent::__construct();
        $this->load->model('BankModel');
    }


    function index()
    {
        $this->load->view('login');
    }
    
    function provera()
    {
        $this->form_validation->set_rules('username', 'Korisničko ime', 'trim|required|xss_clean');
        $this->form_validation->set_rules('password', 'Lozinka', 'trim|required|xss_clean|callback_proveri_lozinku');
        
        if ($this->form_validation->run())
        {
            redirect('Home', 'refresh');
        }
 else {
            $this->load->view('login');    
        }   
    
    }
    
    function proveri_lozinku($user, $pass)
    {
        $user = $this->input->post('username');
        $pass = $this->input->post('password');
        
        if ($result = $this->BankModel->proveri($user, $pass))
        {
            $sess_array = array();
            foreach ($result as $rec) {
                $sess_array = array(
                    'username' => $rec->username,
                );
            }
            $this->session->set_userdata('logged', $sess_array);
            return TRUE;
        }
 else {
            $this->form_validation->set_message('proveri_lozinku', 'GREŠKA! Uneli ste pogrešno korisničko ime
                ili lozinku. Pokušajte ponovo!');
            return FALSE;
 }
    }
}

?>


Views/Login.php izgleda ovako:
html xmlns="http://www.w3.org/1999/xhtml">


ebanking









<?php echo validation_errors(); ?> <?php echo form_open('LoginController/provera'); ?>
Korisničko ime:
Lozinka:
<?php echo form_close(); ?>
</body> </html>

Models/BankModel.php.php izgleda ovako:
<?php
class BankModel extends CI_Model
{
    function proveri($user, $pass)
    {
        $this->db->where('username', $user);
        $this->db->where('password', md5($pass));
        
        $query = $this->db->get('korisnici');
        if ($query->num_rows() == 1)
        {
            return $query->result();
            return TRUE;
        }
        else            return FALSE;
    }
    
    function proveri_korisnika($br_racuna, $br_licne_karte)
    {
        $this->db->where('brracuna', $br_racuna);
        $this->db->where('brojlk', $br_licne_karte);
        
        $query = $this->db->get('klijenti');
        if ($query->num_rows() == 1)
        {
            return $result = $query->result();
            return TRUE;
        }
        else            return FALSE;
    }
    
    function getPayment($obj)
    {
        $this->db->select('t1.id_klijenta, t1.datum, t1.iznos, t1.primalac, t1.racun_primaoca, t1.svrha, t2.id');
        $this->db->from('nalog_uplata AS t1, klijenti AS t2');
        $this->db->where('t1.id_klijenta = t2.id');
        $this->db->where('t2.id', $obj['id']);
        $this->db->order_by('datum', 'desc');
        
        
        $query = $this->db->get();
        
        if ($query->num_rows >= 0)
        {
            return $result = $query->result();
         
        }
        else            return FALSE;
    }
    
    function getPayoff($obj)
    {
        $this->db->select('t1.id_klijenta, t1.datum, t1.iznos, t1.isplatilac, t1.primalac,  t1.svrha, t2.id');
        $this->db->from('nalog_isplata AS t1, klijenti AS t2');
        $this->db->where('t1.id_klijenta = t2.id');
        $this->db->where('t2.id', $obj['id']);
        $this->db->order_by('datum', 'desc');
        
        
        $query = $this->db->get();
        
        if ($query->num_rows >= 0)
        {
            return $result = $query->result();
         
        }
        else            return FALSE;
    }
    
    function getPaymentPersonal($obj)
    {
        $this->db->select('t1.id_klijenta, t1.datum, t1.iznos, t2.id');
        $this->db->from('uplata_licni AS t1, klijenti AS t2');
        $this->db->where('t1.id_klijenta = t2.id');
        $this->db->where('t2.id', $obj['id']);
        $this->db->order_by('datum', 'desc');
        
        
        $query = $this->db->get();
        
        if ($query->num_rows >= 0)
        {
            return $result = $query->result();
         
        }
        else            return FALSE;
    }




    function getData($obj)
    {
        $this->db->select('*');
        $this->db->from('klijenti');
        $this->db->where('id', $obj['id']);
        $this->db->limit(1);
        
        $query = $this->db->get();
        
        if ($query->num_rows == 1)
        {
            return $result = $query->result();
         
        }
        else            return FALSE;
    }
    
    function getAccount($obj)
    {
        $this->db->select('t1.broj_racuna, t1.JMBG, t1.vrsta, t1.banka, t1.prethodno_stanje, t1.trenutno_stanje, t2.JMBG');
        $this->db->from('racun AS t1, klijenti AS t2');
        $this->db->where('t1.JMBG = t2.JMBG');
        $this->db->where('t2.id', $obj['id']);
        $this->db->limit(1);
        
        
        $query = $this->db->get();
        
        if ($query->num_rows == 1)
        {
            return $result = $query->result();
         
        }
        else            return FALSE;
    }
    
    function edit_client($id)
    {
        $data = array ('ime' => $this->input->post('ime'), 
            'prezime' => $this->input->post('prezime'),
            'ulica' => $this->input->post('ulica'),
            'mesto' => $this->input->post('mesto'),
            'telefon' => $this->input->post('telefon'));
        
       $this->db->where('id', $id);
    $update = $this->db->update('klijenti', $data);
    return $update;
    }
    
    function edit_account($id)
    {
        $data = array ('broj_racuna' => $this->input->post('broj_racuna'), 
            'vrsta' => $this->input->post('vrsta'),
            'banka' => $this->input->post('banka')
            );
        
       $this->db->where('id', $id);
    $update = $this->db->update('racun', $data);
    return $update;
    }
    
    function getBodyData()
    {
        $this->db->select('ime, prezime, ulica, mesto, telefon');
        $this->db->from('klijenti');
        $this->db->where('id', $this->uri->segment(3));
       
        $upit = $this->db->get();
        
        if ($upit->num_rows > 0)
        {
            return $upit->result();
            return TRUE;
        }
        else            return FALSE;
    }
    
    function getAccountData()
    {
        $this->db->select('*');
        $this->db->from('racun');
        $this->db->where('id', $this->uri->segment(3));
       
        $upit = $this->db->get();
        
        if ($upit->num_rows > 0)
        {
            return $upit->result();
            return TRUE;
        }
        else            return FALSE;
    }
    
    function getTrenutnoStanje($obj)
    {
        
        
        $this->db->where('id', $obj['id']);
        $query = $this->db->get('racun');
        
        foreach ($query->result() as $row) {
            return $row->trenutno_stanje;
       
    }
    }


    function uplati($records, $iznos)
    {
        foreach ($records as $rec) {
            
        $data = array('uplatilac' => $rec->ime.' '.$rec->prezime,
            'JMBG' => $rec->JMBG,
            'primalac' => $this->input->post('primalac'),
       'svrha' => $this->input->post('svrha_uplate'),
        'racun_primaoca' => $this->input->post('racun_primaoca'),
        'iznos' => $iznos,
            'id_klijenta' => $rec->id,
       'poziv_na_broj' => $this->input->post('poziv_na_broj'),
        'komentar' => $this->input->post('komentar'));
 
    }
    
    $query = $this->db->insert('nalog_uplata', $data);
    if ($query)
    {
        return TRUE;
    }
    else        return FALSE;

    }
    
    function isplati($records, $iznos)
    {
        foreach ($records as $rec) {
            
        $data = array('isplatilac' => $rec->ime.' '.$rec->prezime,
            'JMBG' => $rec->JMBG,
            'primalac' => $this->input->post('primalac'),
       'svrha' => $this->input->post('svrha_isplate'),
        'brracuna' => $rec->brracuna,
        'iznos' => $iznos,
            'id_klijenta' => $rec->id,
       'poziv_na_broj' => $this->input->post('poziv_na_broj'),
        'komentar' => $this->input->post('komentar'));
 
    }
    
    $query = $this->db->insert('nalog_isplata', $data);
    if ($query)
    {
        return TRUE;
    }
    else        return FALSE;

    }
    
    function uplati_licni($records, $iznos)
            {
        foreach ($records as $rec) {
            
        $data = array(
            'JMBG' => $rec->JMBG,
            'iznos' => $iznos,
            'id_klijenta' => $rec->id,
            'komentar' => $this->input->post('komentar'));
 
    }
    
    $query = $this->db->insert('uplata_licni', $data);
    if ($query)
    {
        return TRUE;
    }
    else        return FALSE;

    }




    function oduzmi_stanje($novo_stanje, $trenutno_stanje, $obj)
    {
        $data = array('prethodno_stanje' => $trenutno_stanje,
            'trenutno_stanje' => $novo_stanje);
        
        $this->db->where('id', $obj['id']);
        $update = $this->db->update('racun', $data);
        return $update;
    }
   
}
?>

Controllers/Home.php.php izgleda ovako:
<?php
class Home extends CI_Controller
{
    function __construct() {
        parent::__construct();
        $this->load->model('BankModel');
    }
    
    function index()
    {
        if ($this->session->userdata('logged'))
        {
            $this->load->view('header');
            $this->load->view('menu');
            $this->load->view('content');
            $this->load->view('footer');
        }
        
 else {
            $this->load->view('restricted');
 }
    }
    
    function logout()
    {
        $this->session->unset_userdata('logged');
        redirect(base_url());
    }   
    
    function clients_payment()
    {
        
       
            $this->load->view('header_client_payment');
            
            $this->load->view('footer');   
    }
    
    function clients_payout()
    {
            $this->load->view('header_client_payout');
            
            $this->load->view('footer'); 
    }
    
    function payment_personal()
    {
        $this->load->view('header_payment_personal');
            
            $this->load->view('footer');
    }


    function clients_history()
    {
            $this->load->view('header_client_history');
            
            $this->load->view('footer');
    }


    function clients_access()
    {
            $this->load->view('clients_access');
            
            $this->load->view('footer'); 
    }


    function validation_uplata()
    {
        $this->form_validation->set_rules('brracuna', 'Broj računa', 'trim|required|xss_clean');
        $this->form_validation->set_rules('brojlk', 'Broj lične karte', 'trim|required|xss_clean|callback_provera_korisnika');
        
        if ($this->form_validation->run())
        {
            redirect(site_url().'Client/uplata', 'refresh');
        }
        
 else {
     
            $this->load->view('header_client_payment');
            
            $this->load->view('footer');
 }
    }
    
     function validation_isplata()
    {
        $this->form_validation->set_rules('brracuna', 'Broj računa', 'trim|required|xss_clean');
        $this->form_validation->set_rules('brojlk', 'Broj lične karte', 'trim|required|xss_clean|callback_provera_korisnika');
        
        if ($this->form_validation->run())
        {
            redirect(site_url().'Client/isplata', 'refresh');
        }
        
 else {
     
            $this->load->view('header_client_payment');
            
            $this->load->view('footer');
 }
    }
    
    function validation_uplata_licni()
      {
        $this->form_validation->set_rules('brracuna', 'Broj računa', 'trim|required|xss_clean');
        $this->form_validation->set_rules('brojlk', 'Broj lične karte', 'trim|required|xss_clean|callback_provera_korisnika');
        
        if ($this->form_validation->run())
        {
            redirect(site_url().'Client/uplata_licni', 'refresh');
        }
        
 else {
     
            $this->load->view('header_payment_personal');
            
            $this->load->view('footer');
 }
    }


    function validation_access()
    {
        $this->form_validation->set_rules('brracuna', 'Broj računa', 'trim|required|xss_clean');
        $this->form_validation->set_rules('brojlk', 'Broj lične karte', 'trim|required|xss_clean|callback_provera_korisnika');
        
        if ($this->form_validation->run())
        {
            redirect(site_url().'Client', 'refresh');
        }
        
 else {
     
            $this->load->view('clients_access');
            
            $this->load->view('footer');
 }
    }
    
    function validation_istorija()
    {
        {
        $this->form_validation->set_rules('brracuna', 'Broj računa', 'trim|required|xss_clean');
        $this->form_validation->set_rules('brojlk', 'Broj lične karte', 'trim|required|xss_clean|callback_provera_korisnika');
        
        if ($this->form_validation->run())
        {
            redirect(site_url().'Client/uvid', 'refresh');
        }
        
 else {
     
            $this->load->view('header_client_history');
            
            $this->load->view('footer');
 }
    }
    }
    
    function kontakt()
    {
        if ($this->session->userdata('logged'))
        {
            $this->load->view('header');
            $this->load->view('menu');
            $this->load->view('contact');
            $this->load->view('footer');
        }
        
 else {
            $this->load->view('restricted');
 }
      
    }
    
    function o_meni()
    {
        if ($this->session->userdata('logged'))
        {
            $this->load->view('header');
            $this->load->view('menu');
            $this->load->view('about_me');
            $this->load->view('footer');
        }
 else {
            $this->load->view('restricted');
 }
    }
    
    function o_aplikaciji()
    {
        if ($this->session->userdata('logged'))
        {
            $this->load->view('header');
            $this->load->view('menu');
            $this->load->view('about_app');
            $this->load->view('footer');
        }
 else {
            $this->load->view('restricted');
 }
    }


    function validation_contact()
    {
        $this->form_validation->set_rules('ime', 'Ime', 'trim|required|xss_clean');
        $this->form_validation->set_rules('email', 'Email', 'trim|required|xss_clean|valid_email');
        $this->form_validation->set_rules('poruka', 'Poruka', 'trim|required|xss_clean');
         
        if ($this->form_validation->run())
        {
            $this->load->helper('email');
            $this->load->library('email');
             
            $this->email->from(set_value("email"), set_value("ime"));
            $this->email->to("vl.radovanovic@gmail.com");
            $this->email->subject('Pitanje u vezi aplikacije ebanking');
            $this->email->message(set_value("poruka"));
             
            $mail = $this->email->send();          
            if ($mail)
            {
                 $this->load->view('header');
                 $this->load->view('success');
                 $this->load->view('footer');
            }
                 
            else show_404();
        }
         
        else {
            
            $this->load->view('header');
            $this->load->view('menu');
            $this->load->view('contact');
            $this->load->view('footer');
        }
    }

    function provera_korisnika()
    {
        $br_racuna = $this->input->post('brracuna');
        $br_licne_karte = $this->input->post('brojlk');
        
        if ($redovi = $this->BankModel->proveri_korisnika($br_racuna, $br_licne_karte))
        {
            $sess_array = array();
            foreach ($redovi as $red) {
                $sess_array = array(
                    'ime' =>$red->ime,
                    'id' => $red->id
                        );
            }
            
            return $this->session->set_userdata('logged_client', $sess_array);
           
        }
 else {
     
            $this->form_validation->set_message('provera_korisnika','
            GREŠKA. Uneli ste pogrešan broj računa ili lične karte, Pokušajte ponovo');
            
            return FALSE;
 }
        
    }
}
?>

Views/header.php izgleda ovako:
<html xmlns="http://www.w3.org/1999/xhtml">


ebanking







    
        
        
Views/menu.php izgleda ovako:
<div id="wrapper" class="container">
    
    
Views/content.php izgleda ovako:
<div id="three-column" class="container">
        

uplata na račun

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
<?php } else { ?> <a href=<?php echo base_url()."Client/uplata"; ?> class="button">Izvrši uplatu

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')) { ?> <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
<?php } else { ?> <a href=Uplati na račun <?php } ?>

Uvid u stanje

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

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 } ?>
Views/footer.php izgleda ovako:
<div id="copyright">
    ©2013. By Vladimir Radovanović
    


</div>
</body>
</html>
Views/restricted.php izgleda ovako:
<div id="three-column" class="container">
    
      korak nazad  
      
 
 
      <?php echo validation_errors(); ?>
                 
<?php echo form_open('Client/validation_uplata'); ?> <?php foreach ($records as $rec): ?>

Uplata na račun:

<?php endforeach; ?>





<?php echo form_close(); ?> </div> </div> <div id="three-column" class="container"> <a href=<?php echo base_url().'Client'; ?> class="button_logout_client">korak nazad</a> </div> </div>
Views/header_client_payment.php izgleda ovako:
<html xmlns="http://www.w3.org/1999/xhtml">


ebanking







    
        
        
Views/header_client_payout.php izgleda ovako:
<html xmlns="http://www.w3.org/1999/xhtml">


ebanking







    
        
        
Views/header_payment_personal.php izgleda ovako:
<html xmlns="http://www.w3.org/1999/xhtml">


ebanking







    
        
        
Views/header_client_history.php izgleda ovako:
<html xmlns="http://www.w3.org/1999/xhtml">


ebanking







    
        
        
Views/clients_access.php izgleda ovako:
<html xmlns="http://www.w3.org/1999/xhtml">


ebanking







    
        
        
Views/contact.php izgleda ovako:
<div id="three-column" class="container">
    
      korak nazad  
      
 
 
      <?php echo validation_errors(); ?>
                 
<?php echo form_open('Home/validation_contact'); ?>


<?php echo form_close(); ?>
Views/about_me.php izgleda ovako:
<div id="three-column-column" class="container">
    
     
      
 
 
      
   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/vlradovanovic    codexist.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/vlradovanovic    codexist.blogspot.com
</div> </div>
Views/success.php izgleda ovako:
<html xmlns="http://www.w3.org/1999/xhtml">


ebanking







    
        
        
Controllers/Client.php izgleda ovako:
<?php
class Client extends CI_Controller
{
    function __construct() {
        parent::__construct();
        $this->load->model('BankModel');
    }
    
    function index()
    {
        if ($this->session->userdata('logged'))
        {
             if ($this->session->userdata('logged_client'))
        {
            $temp = $this->session->userdata('logged_client');
            $obj['id'] = $temp['id'];
            
            $records = $this->BankModel->getData($obj);
           
            $other_records = $this->BankModel->getAccount($obj);
              
                $this->load->view('header_logged_client', array ('records' => $records, 'other_records' => $other_records, 'obj' => $obj));
                $this->load->view('content_client');
                $this->load->view('footer');   
  
        }
        else {
            $this->load->view('restricted_client');
            $this->load->view('footer');
 }
        }
 else {
            $this->load->view('restricted');
            $this->load->view('footer');
 }
  
    
    }

    function logout()
    {
        $this->session->unset_userdata('logged_client');
        redirect('Home', 'refresh');
    }
    
    function uplata()
    {
        
        if ($this->session->userdata('logged'))
        {
             if ($this->session->userdata('logged_client'))
        {
        $temp = $this->session->userdata('logged_client');
            $obj['id'] = $temp['id'];
            
            $records = $this->BankModel->getData($obj);
           
            $other_records = $this->BankModel->getAccount($obj);
              
                $this->load->view('header_logged_client', array ('records' => $records, 'other_records' => $other_records, 'obj' => $obj));
                $this->load->view('payment', array('records' => $records, 'obj' => $obj));
                $this->load->view('footer'); 
  
        }
        else {
            $this->load->view('restricted_client');
            $this->load->view('footer');
 }
        }
 else {
            $this->load->view('restricted');
            $this->load->view('footer');
 }
        
        
    }
    
    function validation_uplata()
    {
        $this->form_validation->set_rules('primalac', 'Primalac', 'trim|required|xss_clean');
        $this->form_validation->set_rules('svrha_uplate', 'Svrha uplate', 'trim|required|xss_clean');
        $this->form_validation->set_rules('racun_primaoca', 'Račun primaoca', 'trim|required|xss_clean');
        $this->form_validation->set_rules('iznos', 'Iznos', 'trim|required|xss_clean|callback_check_uplata');
 
        if ($this->form_validation->run())
        {
                       
           redirect(site_url().'Client', 'refresh');
            
        }
 else {
      $temp = $this->session->userdata('logged_client');
            $obj['id'] = $temp['id'];
            
            $records = $this->BankModel->getData($obj);
           
            $other_records = $this->BankModel->getAccount($obj);
              
                $this->load->view('header_logged_client', array ('records' => $records, 'other_records' => $other_records, 'obj' => $obj));
                $this->load->view('payment', array('records' => $records, 'obj' => $obj));
                $this->load->view('footer'); 
 }
    }
    
    function check_uplata()
    {
            $temp = $this->session->userdata('logged_client');
            $obj['id'] = $temp['id'];
            $iznos = $this->input->post('iznos');
            $records = $this->BankModel->getData($obj);
            $trenutno_stanje = $this->BankModel->getTrenutnoStanje($obj);
            
           if ($trenutno_stanje <= '0')
           {
               $this->load->view('no_money');
                 $this->load->view('footer');
               return FALSE;
           }
            
           elseif ($this->BankModel->uplati($records,  $iznos))
         {
             
             $novo_stanje = $trenutno_stanje - $iznos;
             
             if ($novo_stanje < '0')
             {
                 $this->load->view('no_overdraft');
                 $this->load->view('footer');
                 return FALSE;
             }
             
                 elseif ($this->BankModel->oduzmi_stanje($novo_stanje, $trenutno_stanje, $obj))
             {
                   return TRUE;
             }
else    return FALSE;           
         }
             else                 return FALSE;
             
            }

    function isplata()
    {
         if ($this->session->userdata('logged'))
        {
             if ($this->session->userdata('logged_client'))
        {
        $temp = $this->session->userdata('logged_client');
            $obj['id'] = $temp['id'];
            
            $records = $this->BankModel->getData($obj);
           
            $other_records = $this->BankModel->getAccount($obj);
              
                $this->load->view('header_logged_client', array ('records' => $records, 'other_records' => $other_records, 'obj' => $obj));
                $this->load->view('payout', array('records' => $records, 'obj' => $obj));
                $this->load->view('footer'); 
  
        }
        else {
            $this->load->view('restricted_client');
            $this->load->view('footer');
 }
        }
 else {
            $this->load->view('restricted');
            $this->load->view('footer');
 }
    }
    
    function validation_isplata()
    {
        {
        $this->form_validation->set_rules('primalac', 'Primalac', 'trim|required|xss_clean');
        $this->form_validation->set_rules('svrha_isplate', 'Svrha isplate', 'trim|required|xss_clean');
        
        $this->form_validation->set_rules('iznos', 'Iznos', 'trim|required|xss_clean|callback_check_isplata');
 
        if ($this->form_validation->run())
        {
                       
           redirect(site_url().'Client', 'refresh');
            
        }
 else {
      $temp = $this->session->userdata('logged_client');
            $obj['id'] = $temp['id'];
            
            $records = $this->BankModel->getData($obj);
           
            $other_records = $this->BankModel->getAccount($obj);
              
                $this->load->view('header_logged_client', array ('records' => $records, 'other_records' => $other_records, 'obj' => $obj));
                $this->load->view('payout', array('records' => $records, 'obj' => $obj));
                $this->load->view('footer'); 
 }
    }
    }
    
    function check_isplata()
    {
            $temp = $this->session->userdata('logged_client');
            $obj['id'] = $temp['id'];
            $iznos = $this->input->post('iznos');
            $records = $this->BankModel->getData($obj);
            $trenutno_stanje = $this->BankModel->getTrenutnoStanje($obj);
            
         if ($trenutno_stanje <= '0')
           {
               $this->load->view('no_money');
                 $this->load->view('footer');
               return FALSE;
           }
            
           elseif ($this->BankModel->isplati($records,  $iznos))
         {
             
             $novo_stanje = $trenutno_stanje - $iznos;
             
             if ($novo_stanje < '0')
             {
                 $this->load->view('no_overdraft');
                 $this->load->view('footer');
                 return FALSE;
             }
             
                 elseif ($this->BankModel->oduzmi_stanje($novo_stanje, $trenutno_stanje, $obj))
             {
                   return TRUE;
             }
else    return FALSE;           
         }
             else                 return FALSE;
    }
    
    function uplata_licni()
    {
         if ($this->session->userdata('logged'))
        {
             if ($this->session->userdata('logged_client'))
        {
        $temp = $this->session->userdata('logged_client');
            $obj['id'] = $temp['id'];
            
            $records = $this->BankModel->getData($obj);
           
            $other_records = $this->BankModel->getAccount($obj);
              
                $this->load->view('header_logged_client', array ('records' => $records, 'other_records' => $other_records, 'obj' => $obj));
                $this->load->view('payment_personal', array('records' => $records, 'obj' => $obj));
                $this->load->view('footer'); 
  
        }
        else {
            $this->load->view('restricted_client');
            $this->load->view('footer');
 }
        }
 else {
            $this->load->view('restricted');
            $this->load->view('footer');
 }
    }
    
    function validation_uplata_licni()
   {
        {
        
        $this->form_validation->set_rules('iznos', 'Iznos', 'trim|required|xss_clean|callback_check_uplata_licni');
 
        if ($this->form_validation->run())
        {
                       
           redirect(site_url().'Client', 'refresh');
            
        }
 else {
      $temp = $this->session->userdata('logged_client');
            $obj['id'] = $temp['id'];
            
            $records = $this->BankModel->getData($obj);
           
            $other_records = $this->BankModel->getAccount($obj);
              
                $this->load->view('header_logged_client', array ('records' => $records, 'other_records' => $other_records, 'obj' => $obj));
                $this->load->view('payment_personal', array('records' => $records, 'obj' => $obj));
                $this->load->view('footer'); 
 }
    }
    }
    
    function check_uplata_licni()
    {
            $temp = $this->session->userdata('logged_client');
            $obj['id'] = $temp['id'];
            $iznos = $this->input->post('iznos');
            $records = $this->BankModel->getData($obj);
            $trenutno_stanje = $this->BankModel->getTrenutnoStanje($obj);
            
        if ($this->BankModel->uplati_licni($records,  $iznos))
         {
             
             $novo_stanje = $trenutno_stanje + $iznos;
             
             if ($this->BankModel->oduzmi_stanje($novo_stanje, $trenutno_stanje, $obj))
             {
                   return TRUE;
             }
else    return FALSE;           
         }
             else                 return FALSE;
    }


    function uvid()
    {
        if ($this->session->userdata('logged'))
        {
             if ($this->session->userdata('logged_client'))
        {
            $temp = $this->session->userdata('logged_client');
            $obj['id'] = $temp['id'];
            
            $records = $this->BankModel->getData($obj);
           
            $other_records = $this->BankModel->getAccount($obj);
            
            $payment = $this->BankModel->getPayment($obj);
            $payoff = $this->BankModel->getPayoff($obj);
            $payment_personal = $this->BankModel->getPaymentPersonal($obj);
              
                $this->load->view('header_logged_client', array ('records' => $records, 'other_records' => $other_records, 'obj' => $obj));
                $this->load->view('access', array('records' => $records, 'payment' => $payment, 'payoff' => $payoff,
                    'payment_personal' => $payment_personal,'obj' => $obj));
                $this->load->view('footer'); 
  
        }
        else {
            $this->load->view('restricted_client');
            $this->load->view('footer');
 }
        }
 else {
            $this->load->view('restricted');
            $this->load->view('footer');
 }
    }
    


    function edit_client()
    {
        
        if ($this->session->userdata('logged'))
            
        {
             if ($this->session->userdata('logged_client'))
        {
            $temp = $this->session->userdata('logged_client');
            $obj['id'] = $temp['id'];
            
            $records = $this->BankModel->getBodyData();

                $this->load->view('edit_client_data', array ('records' => $records,  'obj' => $obj));
                
                $this->load->view('footer'); 
        }
        
        else {
            $this->load->view('restricted_client');
            $this->load->view('footer');
 }
        }
 else {
            $this->load->view('restricted');
            $this->load->view('footer');
 }
    }
    
    function edit_account()
    {
        
        if ($this->session->userdata('logged'))
            
        {
             if ($this->session->userdata('logged_client'))
        {
            $temp = $this->session->userdata('logged_client');
            $obj['id'] = $temp['id'];
            
            $records = $this->BankModel->getAccountData();

                $this->load->view('edit_account_data', array ('records' => $records,  'obj' => $obj));
                
                $this->load->view('footer'); 
        }
        
        else {
            $this->load->view('restricted_client');
            $this->load->view('footer');
 }
        }
 else {
            $this->load->view('restricted');
            $this->load->view('footer');
 }
    }
    
    function verify_edit_client()
    {
        $this->form_validation->set_rules('ime', 'Ime', 'trim|required|xss_clean');
        $this->form_validation->set_rules('prezime', 'Prezime', 'trim|required|xss_clean');
        $this->form_validation->set_rules('ulica', 'Ulica', 'trim|required|xss_clean');
        $this->form_validation->set_rules('mesto', 'Mesto', 'trim|required|xss_clean');
        $this->form_validation->set_rules('telefon', 'Telefon', 'trim|required|xss_clean');
        
        if ($this->form_validation->run() == TRUE)
        {
            $id = $this->uri->segment(3);
            $this->BankModel->edit_client($id);
            
            redirect(site_url().'Client', 'refresh');
        }
 else     echo 'error';
    }
    
    function verify_edit_account()
    {
        $this->form_validation->set_rules('broj_racuna', 'Broj računa', 'trim|required|xss_clean');
        $this->form_validation->set_rules('vrsta', 'Vrsta', 'trim|required|xss_clean');
        $this->form_validation->set_rules('banka', 'Banka', 'trim|required|xss_clean');
       
        
        if ($this->form_validation->run() == TRUE)
        {
            $id = $this->uri->segment(3);
            $this->BankModel->edit_account($id);
            
            redirect(site_url().'Client', 'refresh');
        }
 else     echo 'error';
    }
    
}
?>
Views/header_logged_client.php izgleda ovako:
<html xmlns="http://www.w3.org/1999/xhtml">


ebanking








    
        
        
Views/content_client.php izgleda ovako:
<div id="three-column" class="container">
    
    
    

uplata na račun

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 } ?>
Views/restricted_client.php izgleda ovako:
<html xmlns="http://www.w3.org/1999/xhtml">


ebanking







    
        
        
Views/payment.php izgleda ovako:
<div id="three-column" class="container">
   
      korak nazad 
       
 
 
       <?php echo validation_errors();  ?>
                 
<?php echo form_open('Client/validation_isplata'); ?> <?php foreach ($records as $rec): ?>

Isplata gotovine:




<?php endforeach; ?>


<?php echo form_close(); ?> </div> </div> <div id="three-column" class="container"> <a href=<?php echo base_url().'Client'; ?> class="button_logout_client">korak nazad</a> </div> </div>
Views/no_money.php izgleda ovako:
<html xmlns="http://www.w3.org/1999/xhtml">


ebanking







    
        
        
Views/no_overdraft.php izgleda ovako:
<html xmlns="http://www.w3.org/1999/xhtml">


ebanking







    
        
        
Views/payout.php izgleda ovako:
<div id="three-column" class="container">
    

   
        
      korak nazad 
       
 
 
       <?php echo validation_errors();  ?>
                 
<?php echo form_open('Client/validation_isplata'); ?> <?php foreach ($records as $rec): ?>

Isplata gotovine:




<?php endforeach; ?>


<?php echo form_close(); ?>
<div id="three-column" class="container"> <a href=<?php echo base_url().'Client'; ?> class="button_logout_client">korak nazad</a>

Views/payment_personal.php izgleda ovako:
<div id="three-column" class="container">

      korak nazad 
       
 
 
       <?php echo validation_errors();  ?>
                 
<?php echo form_open('Client/validation_uplata_licni'); ?> <?php foreach ($records as $rec): ?>

Uplata na sopstven račun:


<?php endforeach; ?>

<?php echo form_close(); ?>


Views/access.php izgleda ovako:
<div id="three-column" class="container">

      korak nazad 
    
    
   
        
Broj računa: <?php foreach ($other_records as $row) { echo ' '.$row->broj_racuna. ''; } ?>
   Korisnik: <?php foreach ($records as $row) { echo ' '.$row->ime.' '.$row->prezime. ''; } &?gt;
UPLATE KORISNIKA:
<<php foreach ($payment as $pay): ?> <?php endforeach; ?>
Datum i vreme uplate Iznos Primalac Račun primaoca Svrha uplate
<?php echo date("d.m.Y - H:i:s", strtotime($pay->datum)); ?> <?php echo $pay->iznos; ?> <?php echo $pay->primalac; ?> <?php echo $pay->racun_primaoca; ?gt; <?php echo $pay->svrha; &?gt;
ISPLATE KORISNIKA:
<?php foreach ($payoff as $pad): ?> <?php endforeach; ?>
Datum i vreme isplate Iznos Isplatilac Primalac Svrha isplate
<?php echo date("d.m.Y H:i:s", strtotime($pad->datum)); ?> <?php echo $pad->iznos; ?> <?php echo $pad->isplatilac; ?> <?php echo $pad->primalac; ?> <?php echo $pad->svrha; ?>
UPLATE NA LIČNI RAČUN:
<?php foreach ($payment_personal as $psv): ?> <?php endforeach; ?>
Datum i vreme uplate Iznos
<?php echo date("d.m.Y H:i:s", strtotime($psv->datum)); ?> <?php echo $psv->iznos; ?>
korak nazad
Broj računa: <?php foreach ($other_records as $row) { echo ' '.$row->broj_racuna. ''; } ?>
   Korisnik: <?php foreach ($records as $row) { echo ' '.$row->ime.' '.$row->prezime. ''; } ?>

Views/no_overdraft.php izgleda ovako:

понедељак, 29. јул 2013.

Blog

Još jedna aplikacija koja ima za cilj da demonstrira moj skromni trud. 

Na prvi pogled deluje jednostavna ali poseduje funkcionalnosti koje je još više pojednostavljuju, a ujedno i komplikuju.Za razliku od telefonskog imenika, prilikom učitavanja strana poziva se tzv. multiple view u svakoj f-ji u controller-u. Veoma velika pogodnost. 


Drugo, koristi html helper. Napravio sam funkciju menu() pomoću koje se kreiraju stavke menija, a sve to kroz asocijativni niz. Da pojednostavim... Kroz menu_view.php pišem ime stavke u meniju, npr. о_meni, o_blogu, kontakt itd. a dobijam kao izlaz O MENI, O BLOGU, KONTAKT... Dakle vrši se konverzija iz malih u velika slova kao i zamena znaka "_" sa razmakom.Kroz routes.php je iskazana putanja svake stavke menija, odnosno putanja do odgovarajuće f-je u controller-u, čime je postignuta automatizacija u radu i manje opterećenje servera.


Jedino ulogovan korisnik može kreirati postove, dok ih ostali korisnici mogu samo čitati.
Parametri za login: Username: admin Password: admin --->>> dakle razrađene su sesije... 

Koristi i pagination.php library u kome su neka osnovna podešavanja u prikazu postova.

Pored toga, od biblioteka još koristi form_validation, email i session.

Instalacija

Da bi ste instalirali CodeIgniter, neophodno je preuzeti poslednju verziju sa zvaničnog sajta i raspakovati je (ukoliko koristite xampp onda je to folder htdocs).

Na početku naravno baza

Može se preuzeti ovde

Pristup bazi

Fajl application/config/database.php apdejtovati u sledeće: 
$db['default']['hostname'] = 'localhost';
$db['default']['username'] = 'root';
$db['default']['password'] = '';
$db['default']['database'] = 'myblog';

routes.php izgleda ovako:

$route['default_controller'] = "blog_controller";
$route['404_override'] = '';
$route['naslovna']= 'blog_controller/naslovna/';
$route['napravi_post']= 'blog_controller/napravi_post/';
$route['o_meni']= 'blog_controller/o_meni/';
$route['o_blogu'] = 'blog_controller/o_blogu';
$route['kontakt']= 'blog_controller/kontakt/';
$route['posts/(:any)'] = 'blog_controller/pregled_posta';

pagination.php izgleda ovako:

<?php
$this->CI = &get_instance(); // Public property preuzet po referenci

$config['base_url'] = base_url().'blog_controller/index';
$config['total_rows'] = $this->CI->db->get('posts')->num_rows(); // Public property komunicira sa bazom preko CI jezgra
$config['per_page'] = 8;
$config['num_links'] = 3;
$config['full_tag_open'] = '
'; $config['full_tag_close'] = '
'; $config['next_link'] = 'Sledeća>>'; $config['prev_link'] = 'Prethodna<<'; ?>

autoload.php izgleda ovako:

$autoload['libraries'] = array('database', 'session', 'form_validation', 'pagination');

$autoload['helper'] = array('html', 'url', 'text', 'form');

encriptyon key po kome se sesije kriptuju u config.php:

$config['encryption_key'] = 'date_of_birth';

html_helper.php i funkcija menu():

if ( ! function_exists('menu'))
{
    function menu($menu = '')
    {
        $id = $menu['id'];
        $item = $menu['menus'];
        
        $nav_menu = '
'; foreach ($item as $li_menu) { /* * Vrsi se zamena znaka "_" sa razmakom * Vrsi se konverzija iz malih u velika slova */ $li_a_nav[] = '<a href='.base_url().$li_menu.'>'.strtoupper(str_replace('_', ' ',$li_menu)).'</a>'; //promenljiva (niz) $li_a_nav[] predstavlja stavke u menijima } $nav_menu .= ul($li_a_nav).'</div> '; return $nav_menu; }

Code aplikacije "blog"
blog_model.php


<?php
class blog_model extends CI_Model
{
    function get_posts($per_page, $row)
    {
        $this->db->limit($per_page, $row);
        $this->db->order_by('date', 'desc');
        
        $query = $this->db->get('posts');
        if ($query)
        {
            return $result = $query->result_array();
            
            return TRUE;
        }
 else     return FALSE;
                
        
    }
    
    function save_post()
    {
        $data = array(
            
            'title' => $this->input->post('title'),
            'body' => $this->input->post('body')           
        );
        
        $query = $this->db->insert('posts', $data);
        if ($query)
        {
            return TRUE;
        }
        else            return FALSE;
    }
    function prikazi_post($id)
    {
        $this->db->where('id', $id);
        $query = $this->db->get('posts');
        if ($query->num_rows > 0)
        {
            return $query->result_array();
            return TRUE;
        }
 else     return FALSE;
    }
    
    function provera_lozinke($user, $pass)
    {
        $this->db->where('username', $user);
        $this->db->where('password', md5($pass));
        
        $query = $this->db->get('users');
        if ($query->num_rows() == 1)
        {
            return $query->result();
            return TRUE;
        }
        else            return FALSE;
    }

}

?>

Controllers/blog_controller.php izgleda ovako:

<?php

class blog_controller extends CI_Controller
{
    public function __construct() {
        parent::__construct();
        $this->config->load('pagination', TRUE);
        $this->load->model('blog_model');
    }
    
    function index()
    {
        $this->naslovna();
    }
    
    function naslovna()
    {
        $per_page = $this->config->item('per_page', 'pagination');
        $row = $this->uri->segment(3);
        
        $data['posts'] = $this->blog_model->get_posts($per_page, $row);
        
            $this->load->view('header_view');
            $this->load->view('menu_view');
            $this->load->view('headerbg_view');    
            $this->load->view('content_view', $data);
            $this->load->view('footer_view');
    }
    
    function napravi_post()
    {
        
        if ($this->session->userdata('logged_in')){
            
        $this->form_validation->set_rules('title', 'Ime posta', 'trim|required|xss_clean|is_unique[posts.title]');
        $this->form_validation->set_rules('body', 'Post', 'trim|required|xss_clean');
        
        if ($this->form_validation->run() == FALSE)
        {
            $this->load->view('header_view');
            $this->load->view('menu_view');
            $this->load->view('headerbg_view');  
            $this->load->view('create_post_view');
            $this->load->view('footer_view');
        }
        elseif ($this->blog_model->save_post() == TRUE) {
            redirect(base_url());    }
    
 else {
        echo 'error';    
    }
    }
 else {
        
      $this->load->view('header_view');
            $this->load->view('menu_view');
            $this->load->view('headerbg_view');    
            $this->load->view('restricted');
            $this->load->view('footer_view');
     
 }
    }
    
     function pregled_posta()
    {
        $post_num = $this->uri->segment(2); 
        $pos_string = strrpos($post_num, '_'); //Pronalazi poslednje _ u stringu
        $id = substr($post_num, $pos_string+1); // Poziciju poslednjeg _ u stringu uvecava za 1 i dobija id iz baze
        
        if ($data['posts'] = $this->blog_model->prikazi_post($id))
        {
            $this->load->view('header_view');
            $this->load->view('menu_view');
            $this->load->view('headerbg_view');  
            $this->load->view('post_view', $data);
            $this->load->view('footer_view');
        }
 else {
            redirect(base_url());
 }
    }
    function o_meni()
    {
            $this->load->view('header_view');
            $this->load->view('menu_view');
            $this->load->view('headerbg_view');  
            $this->load->view('about_me');
            $this->load->view('footer_view');
    }
    
    function o_blogu()
    {
            $this->load->view('header_view');
            $this->load->view('menu_view');
            $this->load->view('headerbg_view');  
            $this->load->view('about_blog');
            $this->load->view('footer_view');
    }
            
    function uloguj_se()
    {
            $this->load->view('header_view');
            $this->load->view('menu_view');
            $this->load->view('headerbg_view');  
            $this->load->view('login');
            $this->load->view('footer_view');
    }
    
    function verify()
    {
        $this->form_validation->set_rules('username', 'Korisničko ime', 'trim|required|xss_clean');
        $this->form_validation->set_rules('password', 'Šifra', 'trim|required|xss_clean|callback_proveri_lozinku');
        if ($this->form_validation->run())
        {
            redirect('logged_controller', 'refresh');
        }
 else {
            $this->load->view('header_view');
            $this->load->view('menu_view');
            $this->load->view('headerbg_view');  
            $this->load->view('login');
            $this->load->view('footer_view');
 }
    
    }
    
    function proveri_lozinku($user, $pass)
    {
        $user = $this->input->post('username');
        $pass = $this->input->post('password');
        
        if ($result = $this->blog_model->provera_lozinke($user, $pass))
        {
           $sess_array = array();  
           foreach ($result as $rec) {
               $sess_array = array(
                   'username' => $rec->username,
               );
           }
           $this->session->set_userdata('logged_in', $sess_array);
           return TRUE;
        }
        
        $this->form_validation->set_message('proveri_lozinku', 'GREŠKA. Uneto je pogrešno korisničko ime ili lozinka. Molimo pokušajte ponovo.');
        return FALSE;
    }
    
    function izloguj_se()
    {
        $this->session->unset_userdata('logged_in');
        redirect ('blog_controller', 'refresh');
    }
    
    function kontakt()
    {
            $this->load->view('header_view');
            $this->load->view('menu_view');
            $this->load->view('headerbg_view');  
            $this->load->view('contact');
            $this->load->view('footer_view');
    }
    
    function verify_email()
    {
        $this->form_validation->set_rules('ime', 'Ime', 'trim|required|xss_clean');
        $this->form_validation->set_rules('email', 'Email', 'trim|required|xss_clean|valid_email');
        $this->form_validation->set_rules('poruka', 'Poruka', 'trim|required|xss_clean');
        
        if ($this->form_validation->run())
        {
            $this->load->helper('email');
            $this->load->library('email');
            
            $this->email->from(set_value("email"), set_value("ime"));
            $this->email->to("vl.radovanovic@gmail.com");
            $this->email->subject('Pitanje u vezi aplikacije blog');
            $this->email->message(set_value("poruka"));
            
            $mail = $this->email->send();          
            if ($mail)
            {
                $this->load->view('header_view');
                $this->load->view('menu_view');
                $this->load->view('headerbg_view');    
                $this->load->view('success');
                $this->load->view('footer_view');
            }
            else show_404();
        }
        
        else {
            $this->load->view('header_view');
            $this->load->view('menu_view');
            $this->load->view('headerbg_view');  
            $this->load->view('contact');
            $this->load->view('footer_view');
        }
    }
  
}

?>



Views/header_view.php izgleda ovako:
<html>
    
        
        
        
            Vladimir Radovanović blog
             
        
        
            <?php
            
            $link = array(
                
                'href' => base_url().'css/style.css',
                'type' => 'text/css',
                'rel' => 'stylesheet'
               
            );
            
            echo link_tag($link);
            
            ?>

    
    
    
 
        

Views/menu_view.php izgleda ovako:
<?php

if ($this->session->userdata('logged_in'))
{
    $data = array(
    
    'id' => 'menu',
    'menus' => array(
        'menu1' => 'naslovna',
        'menu2' => 'napravi_post',
        'menu3' => 'o_meni',
        'menu4' => 'o_blogu',
        'menu5' => 'kontakt'
    )
);
echo menu($data);
}
 else {
     $data = array(
    
    'id' => 'menu',
    'menus' => array(
        'menu1' => 'naslovna',        
        'menu2' => 'o_meni',
        'menu3' => 'o_blogu',
        'menu4' => 'kontakt'
    )
);
echo menu($data);
}

?>?


Views/headerbg_view.php izgleda ovako:
</div>

    
<?php 

if (!$this->session->userdata('logged_in')) {
  
?>
  
  
Ovaj blog pokreće CodeIgniter framework...
</div> <?php } else { ?>
<?php $temp = $this->session->userdata('logged_in'); $users['username'] = $temp['username']; echo 'Ulogovani ste: '.$users['username'].''; ?>
Ovaj blog pokreće CodeIgniter framework...
<?php } ?>

Views/content_view.php izgleda ovako:
<div id="page">

   
        <?php 
        
           echo $this->pagination->create_links();
           foreach ($posts as $post){
               echo '

'.ucfirst($post['title']).'

Postavljen : '.$post['date'].''; echo ''.character_limiter($post['body'],255).'

Opširnije

'.br().' '; echo '
'; echo '
'; } echo $this->pagination->create_links(); ?> </div>

Controllers/logged_controller.php izgleda ovako:
<?php

class logged_controller extends CI_Controller
{
    public function __construct() {
        parent::__construct();
        $this->config->load('pagination', TRUE);
        $this->load->model('blog_model');
    }
    
    
    function index()
    {
            $per_page = $this->config->item('per_page', 'pagination');
            $row = $this->uri->segment(3);
        
            $data['posts'] = $this->blog_model->get_posts($per_page, $row);
            
       if ($this->session->userdata('logged_in'))
       {
 
            $this->load->view('header_view');
            $this->load->view('menu_view');
            $this->load->view('headerbg_view');    
            $this->load->view('content_view', $data);
            $this->load->view('footer_view');
       }
 else     {
            $this->load->view('header_view');
            $this->load->view('menu_view');
            $this->load->view('headerbg_view');    
            $this->load->view('restricted');
            $this->load->view('footer_view');
 }
    }                     
}
?>

Views/login.php izgleda ovako:
<div id="page">
    
        
       <?php echo validation_errors(); ?> 
      <?php 
      echo form_open('blog_controller/verify');
     
      ?>
        Korisničko ime: 
         
 

        Lozinka: 
                
 

      
        
        
        <?php      echo form_close();
        
        ?>

    </div>


Views/post_view.php izgleda ovako:
<div id="page">
    
<?php foreach ($posts as $post) { echo "

".ucfirst($post['title'])."

"; echo '
'.nl2br($post['body']).'
'; echo '

Objavljeno: '.$post['date'].'

' ; } ?> </div> </div>

Views/restricted.php izgleda ovako:
<div id="page">
    
        
    

Morate biti ulogovani da bi ste pristupili ovoj stranici.

ULOGUJ SE

</div>

Views/about_me.php izgleda ovako:
<div id="page">
    
    
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".


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, kao i mnostvo ne objavljenih projekata.

 
Podrazumevana znanja ----->>>> HTML, CSS, JavaScript, JQuery...   


----->>>> Active record, PHP Data Object (PDO) interfejs za pristup bazi podataka, kroz MySQL...

</div>

Views/about_blog.php izgleda ovako:
<div id="page">
    
  Još jedna aplikacija koja ima za cilj da demonstrira moj skromni trud. 
  Na prvi pogled deluje jednostavna ali poseduje funkcionalnosti koje je još više pojednostavljuju, a ujedno i komplikuju.
 
  Za razliku od telefonskog imenika, prilikom učitavanja strana poziva se tzv. multiple view u svakoj f-ji u controller-u. Veoma velika pogodnost.  
Drugo, koristi html helper. Napravio sam funkciju menu() pomoću koje se kreiraju stavke menija, a sve to kroz jednostavan niz.Da pojednostavim... Kroz menu_view.php 
  pišem ime stavke u meniju, npr. о_meni, o_blogu, kontakt itd. a dobijam kao izlaz O MENI, O BLOGU, KONTAKT... Dakle vrši se konverzija iz malih u velika slova kao i zamena znaka "_" sa razmakom.
  Kroz routes.php je iskazana putanja svake stavke menija, odnosno putanja do odgovarajuće f-je u controller-u, čime je postignuta automatizacija
  u radu i manje opterećenje servera. 
  
  Jedino ulogovan korisnik može kreirati postove, dok ih ostali korisnici mogu samo čitati.
  Parametri za login:  Username: admin   Password: admin  --->>> dakle razrađene su sesije... 
  Koristi i pagination.php library u kome su neka osnovna podešavanja u prikazu postova.
  BTW, pagination.php koristi tzv. public property CI koji koristi sve biblioteke koje su mu dostupne, a sve to bez extendovanja. Zašto? 
  
  Zato što je napravljen objekat koji instancira sve klase iz CI jezgra, a pozvan je po referenci.
  
  Pored toga, od biblioteka još koristi form_validation, email, session...

</div>


Views/contact.php izgleda ovako:
<div id="page">
    
         
       <?php echo validation_errors(); ?> 
      <?php 
      echo form_open('blog_controller/verify_email');
    
      ?>
   
    Vaše ime: 
        
 

       Vaš email: 
        
 


       Poruka:  
       
       Za: vl.radovanovic [et] gmail.com
       

        

        

       
        
        
        <?php      echo form_close();
        
        ?>

    </div>

Views/success.php izgleda ovako:
<div id="page">
    
        
    

Uspešno ste poslali pitanje. Odgovoriću Vam u najkraćem mogućem roku

NASLOVNA

</div>

Views/creat_post_view.php izgleda ovako:
<div id="page">
    
        
       <?php echo validation_errors(); ?> 
      <?php 
      echo form_open();
     
      ?>
        Ime posta: 

         
 

        Post: 

        
        
 

        
        
        <?php      echo form_close();
        
        ?>
        
     
    

Ceo projekat možete preuzeti ovde.

Srdačan pozdrav.
Vladimir

github.com/vlradovanovic
codexist.blogspot.com