Gebruik model in codeigniter
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)
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
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;
}
}
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)
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
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');
}
}
}
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
Volgens mij mag je niet iets echo'en in je Model.
Dat is ook niet de bedoeling inderdaad, ik zou graag willen weten hoe ik die kan opvangen en kan laten zien in mijn view.
Dus:
Code (php)
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
In de functie validateLogin retourneer ik een bool, kan ik daar dan ook nog een variable aankoppelen?
maar als je iets een waarde toekent geeft hij ook een true terug
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
Code (php)
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
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;
}
?>
//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;
}
?>
Ger van Steenderen op 14/01/2014 11:26:02:
Code (php)
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
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;
}
?>
//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?
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.
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!