Novo

Forum kao aplikacija na telefonu

Dodajte forum na početni ekran i koristite ga kao aplikaciju, sa menijem na dnu ekrana.

Codeigniter problem-varijabla treba da pamti polje "id" iz reda tabele

  • 13 odgovora
  • 4.427 pregleda

Najnovija ↓

Codeigniter problem-varijabla treba da pamti polje "id" iz reda tabele 04.02.2013. u 09:46 · pre 167 meseci
izmenjeno 1 put, poslednji put malamalla 04.02.2013. u 12:53
  1. malamalla04.02.2013. u 12:53zapis iz teksta poruke
#1
Code:

$upit = "SELECT * FROM TABLENAME WHERE USERNAME=(uneti username sa forme za prijavu) AND PASSWORD=(uneti password sa forme za prijavu)";
$temp = $upit->fetch(PDO::FETCH_ASSOC); //Pravi niz
        $_SESSION['id'] = $temp['id']; //Pravi sesijsku varijablu gde je id=id-ju dobijenog reda iz tabele


Sada mi treba
Code:
 $upit = ("Select username from TABLENAME where id=" . $_SESSION['id']);
$izraz = $dbh->query($upit);
                $obj = $izraz->fetch(PDO::FETCH_ASSOC);
                $ime = $obj['username'];
                echo "<p id='bbb'><b >$ime</b>:dobrodosli


Dakle, meni treba username gde je id=$_SESSION['id'];
U CodeIgniter-u
Re: Codeigniter problem-kreiranje sesijske varijable 04.02.2013. u 11:19 · pre 167 meseci
izmenjeno 1 put, poslednji put malamalla 04.02.2013. u 12:53
  1. malamalla04.02.2013. u 12:53zapis iz teksta poruke
#2
Imam tabelu sa 3 kolone (id, username i password). Hocu da uzmem username sa odredjenim id-jem.

Code:
$this->db->where('id', '3');
//here we select every clolumn of the table
$q = $this->db->get('my_users_table');
$data = $q->result_array();

echo($data[0]['age']);


E sad kako uzeti username gde je id jednak id-ju jedne vrste u tabeli a ne broju 3 kao u ovom slucaju (kada se ukuca pravilan username i password na stranici za prijavu, dobija se jedan red u tabeli, e iz tog reda hocu da uzmem username).
Re: Codeigniter problem-varijabla treba da pamti polje "id" iz reda tabele 05.02.2013. u 12:22 · pre 167 meseci #5
Dakle hocu da napravim login formu da kada se korisnik uloguje, na drugoj strani da kaze "Dobrodosli (username)".

Imam tabelu sa npr. 3 kolone (id, username i pasword). Kada se korisnik uloguje, ako su ispravni username i password - if ($query->num_rows() == 1) - "aktivan" je taj red u tabeli.
Mislila sam da napravim jedan niz koji ce pamtiti taj jedan red u tabeli koji ce se pamtiti npr. u varijabli $niz

Dakle nesto ovako: $niz = $query->result_array();
Sve u cilju da bih kasnije mogla da zadam upit tipa "SELECT * FROM KORISNICI WHERE ID=".$niz['id']; (da bih obelezila taj red).

Probala sam nesto ovako ali ne ide...

Model:

Code:
<?php

class LoginModel extends CI_Model
{
    public function login($user, $pass)
    {
        $this->db->where('username', $user);
        $this->db->where('password', md5($pass));
        
        $query = $this->db->get('korisnici');
        
        
        if ($query->num_rows() == 1)
        {
            $obj = array();
            foreach ($query->result() as $row) {
                $obj[] = $row;
                return $obj;
                $this->getData($obj);
            }
            return TRUE;
        }
        else            return FALSE;
    }
    
    public function getData($obj)
    {
      
        $this->db->where('id', $obj['id']);  
    $upit = $this->db->get('korisnici');
       return $upit->result();
    }
}

?>


View:

Code:
<div id="pocetak">
                <?php
                foreach ($records as $rec){
                     echo "<p id='bbb'><b >" .$rec->username. "</b>:dobrodosli</p>";
                }
               
                ?>


Controller:

Code:
public function checkAdmin()
    {
        $this->load->model('LoginModel');
        $data['records'] = $this->LoginModel->getData($obj);
        
        $this->load->view('pocetna_admin', $data);
    }


prikazuje mi gresku:
Code:
A PHP Error was encountered
Severity: Notice
Message: Undefined variable: obj
Filename: controllers/LoginController.php
Line Number: 50


U prvom postu sam objasnila kako bi to trebalo da izgleda, nesto proceduralnog tipa i to tako radi.
Sada mi treba isto to, samo kroz CodeIgniter.

Nadam se da je sada malo jasnije.
Hvala na odgovoru.
Re: Codeigniter problem-varijabla treba da pamti polje "id" iz reda tabele 05.02.2013. u 17:05 · pre 167 meseci #6
Nisam siguran da te i dalje razumem, ali ako je ono sto mislim da jeste onda iskoristi CI-jeve session varijable:

http://ellislab.com/codeignite...-guide/libraries/sessions.html

Code:

    $newdata = array(
                   'username'  => 'johndoe',
                   'email'     => '[email protected]',
                   'logged_in' => TRUE
               );
    $this->session->set_userdata($array);

    $session_id = $this->session->userdata('session_id');
Potpis
...
Re: Codeigniter problem-varijabla treba da pamti polje "id" iz reda tabele 05.02.2013. u 19:31 · pre 167 meseci #7
Pa pise ti gde je greska. Da bi ti ovo radilo moras prvo da napravis formular za login recimo:

Code:

<form action="controller/checkAdmin" method="post" >
    <input type="text" name="username" />
    <input type="text" name="password" />
</form>


A onda kontroller mora da prihvati unos iz tog formulara:

Code:

public function checkAdmin()
{
    $obj['username'] = $this->input->post('username');
    $obj['password'] = md5($this->input->post('password'));

    $this->load->model('LoginModel');
    $data['records'] = $this->LoginModel->getData($obj);
         
    $this->load->view('pocetna_admin', $data);
}


Model:

Code:

public function getData($obj)
{
    return $this->db
             ->where('username', $obj['username'])
             ->where('password', $obj['password'])
             ->get('korisnici')->result();
}


Ovo je, naravno, uzasan nacin da se postigne to sto ti pokusavas :)
Re: Codeigniter problem-varijabla treba da pamti polje "id" iz reda tabele 05.02.2013. u 21:14 · pre 167 meseci #9
Najbolji nacin je da se koristi neka oprobana auth biblioteka poput Ion Auth-a.
Ako devojka ovo pise cisto u edukativne svrhe, onda mogu da kazem da bi login trebalo da ide preko CI biblioteke za validaciju, zajedno sa onim sto je Nemke napisao. Znaci, sve dok unos nije validan korisniku prikazati login formular. Kad prodje validaciju onda obrada unosa i stavljanje u sesije itd.

Sto se tice sitnijih detalja, pored sanitacije ne valja to sto login() metod pretrazuje bazu korisnika prema username i password polju. Onda, ako nadje unos, koristi ga da bi pronasao taj isti unos uz pomoc id polja. Sve to zapravo ne radi jer je return $obj pozvan direktno pre getData($obj). MD5 nikako nije adekvatan za sifre, itd. Nije to bitno, doduse. Za pocetak bi bilo bolje opisati sta treba na srpskom, jer ako ne neko ne zna CI tesko da ce dobro da ilustruje problem putem CI koda. :)
Re: Codeigniter problem-varijabla treba da pamti polje "id" iz reda tabele 05.02.2013. u 21:39 · pre 167 meseci #10
Citat:
Memla: Najbolji nacin je da se koristi neka oprobana auth biblioteka poput Ion Auth-a.
Ako devojka ovo pise cisto u edukativne svrhe, onda mogu da kazem da bi login trebalo da ide preko CI biblioteke za validaciju, zajedno sa onim sto je Nemke napisao. Znaci, sve dok unos nije validan korisniku prikazati login formular. Kad prodje validaciju onda obrada unosa i stavljanje u sesije itd.

Sto se tice sitnijih detalja, pored sanitacije ne valja to sto login() metod pretrazuje bazu korisnika prema username i password polju. Onda, ako nadje unos, koristi ga da bi pronasao taj isti unos uz pomoc id polja. Sve to zapravo ne radi jer je return $obj pozvan direktno pre getData($obj). MD5 nikako nije adekvatan za sifre, itd. Nije to bitno, doduse. Za pocetak bi bilo bolje opisati sta treba na srpskom, jer ako ne neko ne zna CI tesko da ce dobro da ilustruje problem putem CI koda. :)


Pre svega ja sam CI pocetnik, takodje mozda ovo nije najbolji nacin organizacije koda...

Napravila sam ja login formu ali nisam htela ovde da prikazujem ceo view. Takodje, login ide preko biblioteke za validaciju (form_validation), takodje nisam prikazivala ceo controller.
dakle...

Controller:

Code:
<?php

class LoginController extends CI_Controller
{
    public function index()
    {
        $this->load->view('login');
    }
    
    public function validate_form()
    {
        $this->form_validation->set_rules('korisnik', 'Username', 'trim|required|xss_clean');
        $this->form_validation->set_rules('lozinka', 'Password', 'trim|required|md5|callback_verifyUser');
        
        $data = array ('admin' => 1, 'user' =>2);
        
        $this->session->set_userdata($data);
        
    
        if ($this->form_validation->run())
        {
            redirect('LoginController/checkSession');
                   
            }
        else
        {
            $this->load->view('login');
        }
    }
    
    public function checkSession() // Ovo sa sesijama mozda nije najbolje odradjeno
    {
        if ($this->session->userdata('admin') == 1)
        {
            redirect('LoginController/checkAdmin');
        }
        elseif ($this->session->userdata('user') == 2) {
        
            redirect('LoginController/checkUser');
    }
    else
    {
        $this->load->view('restricted');
    }
    }
    
    public function checkAdmin()
    {
        $this->load->model('LoginModel');
        $data['records'] = $this->LoginModel->getData();
        
        $this->load->view('pocetna_admin', $data);
    }

    public function verifyUser($user, $pass)
    {
        $user = $this->input->post('korisnik');
        $pass = $this->input->post('lozinka');
        
        $this->load->model('LoginModel');
        
        if ($this->LoginModel->login($user, $pass))
        {
           return TRUE;
        }
        
 else {
            $this->form_validation->set_message('verifyUser', 'Incorrect username/password. Please try again.');
            return FALSE;
     
 }
                
    }
        
}

?>


Ceo view login:

Code:
<html>
    
 <head>
        <meta http-equiv='Content-Type' content='text/html; charset=UTF-8' />
        <title>Telefonski imenik</title>

        <link href=<?php echo base_url()."css/login-box.css"; ?> rel='stylesheet' type='text/css' />
    </head>

    <body>
        <div style='padding: 100px 0 0 250px;'>
            <div id='login-box'>
                <h2>Telefonski imenik</h2>
                <br />
                <br />
                
                <?php echo validation_errors(); ?>
               <?php echo form_open('LoginController/validate_form'); ?>
                    <div id='login-box-name' style='margin-top:20px;'>Username:</div><div id='login-box-field' style='margin-top:20px;'><input name='korisnik' class='form-login' title='korisnik' size='30' maxlength='2048' /></div>
<div id='login-box-name'>Šifra:</div><div id='login-box-field'><input name='lozinka' type='password' class='form-login' title='lozinka' size='30' maxlength='2048' /></div>
<br />

<br />
<br />
<input background:url('images/login-btn.png') no-repeat; border: none; width='103' height='42' style='margin-left:90px;'  type='submit' value='Pošalji'>
<?php echo form_close(); ?>

</div>
</div>
</body>
</html>


Ceo view Pocetna_admin:

Code:
    <html>
        <head>
            <title>Telefonski imenik</title>
            <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
            <link href = <?php echo base_url(). 'css/style.css';  ?>  rel="stylesheet" type="text/css"  media="screen" />
        </head>
        <body>

            <div id="okvir">
                <div id="vrh"> </div>
                <div id="pocetak">
                <?php
                foreach ($records as $rec){
                     echo "<p id='bbb'><b >" .$rec->username. "</b>:dobrodosli</p>";
                }
               
                ?>
                <a id="log" href="logout.php">LOGOUT</a>
                </div>

            <div id="meni" id="nav">
                <ul>
                   <li><a href="pocetna.php">Početna</a></li>
                    <li><a href="imenik.php">Imenik</a
                    <li><a href="administracija.php">Administracija</a></li>
                    <li><a href="kontakt.php">Kontakt</a></li>
                </ul>
            </div>

            <div id="sadrzaj" >

                <h1>Početna strana - Dobrodošli</h1>
                <hr><br/><br/><br/>
                
            </div>

            <div id="kraj">
                Dragana Marusic
            </div>

            <div id="ppp"> </div>

        </div>

    </body>
</html>



Gledala sam teke CI tutorijale na YouTube-u (phpacademy) i pokusala da napravim jedan telefonski imenik.
@memla Da li postoji neki bolji nacin posto bi mi pomoc na pocetku ucenja svakako trebala?

U svakom slucaju hvala vam svima na pomoci.

Re: Codeigniter problem-varijabla treba da pamti polje "id" iz reda tabele 13.02.2013. u 08:37 · pre 166 meseci #13
Resila sam problem, ali nisam uspela da ga resim onako kako sam ja zamislila.
Code:
function index()
    {
        $this->form_validation->set_rules('korisnik', 'Username', 'trim|required|xss_clean');
        $this->form_validation->set_rules('lozinka', 'Password', 'trim|md5|required|xss_clean|callback_verify_password');
        
        if ($this->form_validation->run())
        {
            redirect('Home');
        }
 else {
            $this->load->view('login_view');
 }
    }
            
    function verify_password($user, $pass)
        {
            $user = $this->input->post('korisnik');
            $pass = $this->input->post('lozinka');
            
            $result = $this->LoginModel->login($user, $pass);
            
            if ($result)
            {
                $sess_array = array();
                foreach ($result as $row)
                {
                    $sess_array = array(
                        'ime' => $row->ime, 'username' => $row->username
                    );
                }
                
                $this->session->set_userdata('logged_in', $sess_array);
                return TRUE;
                }
 else {
     
                    $this->form_validation->set_message('verify_password', 'GREŠKA. Uneto je pogrešno 
                        korisničko ime ili lozinka. Molimo pokušajte ponovo.');
                    return FALSE;
 }
        }


Zatim controller "Home" proverava da li je kreirana sesija i ako jeste prosledjuje vrednosti u view:

Code:
<?php
session_start();
class Home extends CI_Controller
{
    function __construct() {
        parent::__construct();
    }
    
    function index()
    {
        if ($this->session->userdata('logged_in'))
        {
            $temp = $this->session->userdata('logged_in');
            $obj['username'] = $temp['username'];      
            $obj['ime'] = $temp['ime'];
            $this->load->view('welcome', $obj);
        }
 else {
            $this->load->view('restricted');
 }
    }


Hvala na pomoci.
Prijavite se da biste odgovorili u ovoj temi.PrijavaRegistracija

Premeštanje teme