Gebruik model in codeigniter

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Youri van Mill

Youri van Mill

14/01/2014 10:07:21
Quote Anchor link
Hallo allemaal,

Ik ben begonnen met het gebruik van Codeigniter. Ik heb nu een login gemaakt maar heb daar een vraagje over.

Mijn account-model:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
class Account_model extends CI_Model {
    function __construct() {
        parent::__construct();
    }

    function validateLogin() {
        $email = $this->input->post('email');
        $password = $this->input->post('password');

        $query = $this->db->query('SELECT `email`, `password` FROM `accounts` WHERE `email` = "' . $email . '"');

        if ($query->num_rows() == 0) {
            echo 'Bestaat niet';
        } else {
            $result = $query->row_array();

            echo $result['password'];

            if ($password != $result['password']) {
                echo 'Wachtwoord komt niet overeen';
            } else {
                return true;
            }
        }

        return false;
    }
}


Doormiddel van een model maak je verbinding met je database om dingen uit te voeren (corrigeer me als ik het fout heb) maar hoe krijg ik het resultaat (de errors) terug in de view?

Mijn account controller:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
class Account extends CI_Controller {
    public function login() {
        $this->load->model('account_model');

        $this->form_validation->set_rules('email', 'Email', 'trim|required');
        $this->form_validation->set_rules('password', 'Password', 'trim|required|min_length[6]');

        if(isset($_POST['submit'])) {
            if ($this->form_validation->run() == FALSE) {
                $message = 'Vergeten iets in te vullen.';
            } else {
                if ($this->account_model->validateLogin()) {
                    $this->session->set_userdata(array(
                        'email' => $this->input->post('email'),
                        'logged_in' => TRUE
                    ));

                    $message = 'Gelukt!';

                    redirect('news');
                } else {
                    $message = 'Mislukt';
                }
            }

            $this->load->view('login', array(
                'message' => $message
            ));
        } else {
            $this->load->view('login');
        }
    }
}


Kan iemand mij het uitleggen? Ik ben een beginner als het gaat om OO, dus als je opmerkingen hebt graag!
Gewijzigd op 14/01/2014 10:09:19 door Youri van Mill
 
PHP hulp

PHP hulp

23/11/2024 23:56:07
 
Albert de Wit

Albert de Wit

14/01/2014 10:18:14
Quote Anchor link
Volgens mij mag je niet iets echo'en in je Model.
 
Youri van Mill

Youri van Mill

14/01/2014 10:24:20
Quote Anchor link
Dat is ook niet de bedoeling inderdaad, ik zou graag willen weten hoe ik die kan opvangen en kan laten zien in mijn view.
 
Albert de Wit

Albert de Wit

14/01/2014 10:33:19
Quote Anchor link
Als je de functie validateLogin in een variabele opslaat en dan de variabele echo'ed?

Dus:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
<?php

                if ($validation_result = $this->account_model->validateLogin()) {
                    $this->session->set_userdata(array(
                        'email' => $this->input->post('email'),
                        'logged_in' => TRUE
                    ));

                    $message = $validation_result;

                    redirect('news');
                }

?>


Toevoeging op 14/01/2014 10:34:27:

En dan niks echo'en in je validate functie, maar returnen, zo word hij in de variabele opgeslagen.
Gewijzigd op 14/01/2014 10:33:57 door Albert de Wit
 
Youri van Mill

Youri van Mill

14/01/2014 10:39:24
Quote Anchor link
In de functie validateLogin retourneer ik een bool, kan ik daar dan ook nog een variable aankoppelen?
 
Albert de Wit

Albert de Wit

14/01/2014 11:08:52
Quote Anchor link
in een if-statement moet je alleen een true krijgen om door te gaan. Dus als je zegt

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
<?php
$var
= 1;
if ($var == 1){ //true duh...
}
?>


maar als je iets een waarde toekent geeft hij ook een true terug
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
<?php
if ($var = 1){ //true
}
?>


Dus als je gewoon de waarde die de functie returned in de variabele opslaat krijg je sowieso true terug. Vervolgens kun je kijken welke waarde er in de variabele zit.
Gewijzigd op 14/01/2014 11:09:15 door Albert de Wit
 
Ger van Steenderen
Tutorial mod

Ger van Steenderen

14/01/2014 11:26:02
Quote Anchor link
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
<?php
    //controller
    function login() {
        $login = $this->input->post();
        if ($login !== false) {
            if ($this->account_model->validateLogin($login['email'], $login['password'])) {
                // login oké
            }
            else {
                $message = $this->account_model->getLoginError();
            }
        }
    }

    
    //model
    private $_loginError;
    
    public function validateLogin($email, $pwd) {
        $this->db->select('email, password');
        $this->db->where('email', $email);
        $result = $this->db->get('accounts');
        if ($result->num_rows() == 0) {
            $this->_loginError = 'Account bestaat niet';
            return false;
        }

        else {
            $row = $result->row();
            if ($row->password != $pwd) {
                $this->_loginError = 'Wachtwoord klopt niet';
                return false;
            }
        }

        return true;
    }

    
    public function getLoginError() {
        return (isset($this->_loginError)) ? $this->_loginError : false;
    }

?>
 
Youri van Mill

Youri van Mill

14/01/2014 11:27:54
Quote Anchor link
Ger van Steenderen op 14/01/2014 11:26:02:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
<?php
    //controller
    function login() {
        $login = $this->input->post();
        if ($login !== false) {
            if ($this->account_model->validateLogin($login['email'], $login['password'])) {
                // login oké
            }
            else {
                $message = $this->account_model->getLoginError();
            }
        }
    }

    
    //model
    private $_loginError;
    
    public function validateLogin($email, $pwd) {
        $this->db->select('email, password');
        $this->db->where('email', $email);
        $result = $this->db->get('accounts');
        if ($result->num_rows() == 0) {
            $this->_loginError = 'Account bestaat niet';
            return false;
        }

        else {
            $row = $result->row();
            if ($row->password != $pwd) {
                $this->_loginError = 'Wachtwoord klopt niet';
                return false;
            }
        }

        return true;
    }

    
    public function getLoginError() {
        return (isset($this->_loginError)) ? $this->_loginError : false;
    }

?>


Hmm niet aan gedacht.. Bedankt :) Wat ik zie is dat je m'n query veranderd. Is het op de manier wat ik doe fout?
 
Ger van Steenderen
Tutorial mod

Ger van Steenderen

14/01/2014 11:42:50
Quote Anchor link
Nee hoor, ik stond er even niet bij stil dat het email adres al valideert, en als je gebruikt maakt van de Active Record wordt invoer automatisch ge-escaped. Vandaar.
 
Youri van Mill

Youri van Mill

14/01/2014 11:44:09
Quote Anchor link
Ger van Steenderen op 14/01/2014 11:42:50:
Nee hoor, ik stond er even niet bij stil dat het email adres al valideert, en als je gebruikt maakt van de Active Record wordt invoer automatisch ge-escaped. Vandaar.


Aha, nja erg bedankt. Het werkt zoals ik het wou, beetje raar dat ik er niet in opgekomen ben om een variable te maken en dan de functie op te roepen haha.

Topic mag dicht!
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.