I'm writing a simple app. I need to block user from a page if their credit
is < 0
.
I have a table "User_profiles" with a "credit" column.
How can I set up a model in conjunction with the controller to send the user to another page if the value of credit
is 0
?
This should be straight forward, but I'm new at the select->where stuff.
It has to be the row of the current user too -- I don't know how to traverse arrays very well yet.
Well, the easiest solution would be to just load a different view...
As for the model, it would look like this:
class UserModel extends Model {
public function getUserCredit($id) {
$this->load->database();
//effectively generates: SELECT `credit` FROM `User_profiles` WHERE `id`=$id
$query = this->db->select('credit')->where('id',$id)->get('User_profiles');
//row() executes the query for a single result, returns the credit property
return $query->row()->credit;
}
}
Then in the controller:
class Users extends Controller {
//....
public function credit() {
$this->load->model('userModel','users');
// assuming the session library has been loaded
$user_id = $this->session->userdata('id');
$credit = $this->users->getUserCredit($user_id);
if ($credit == '0') $this->load->view('users/no_credit');
else $this->load->view('users/credit');
}
}
That's untested, but it should at least help you get the idea.
When you request the page /users/credit/1
, CI will call the Users::credit(1)
action.
It then loads UserModel
as $this->users
You call $this->users->getUserCredit(1)
, which translates to UserModel::getUserCredit(1)
, to store as $credit
The model loads the database.
You tell the db to select('credit')
(select the credit
column), where('id',1)
(where the id = 1
), then get('User_profiles')
(get matching rows from the User_profiles
table). That returns a query, which you store as $query
for readability.
getUserCredit
returns the credit property of the single-row result of the query
If $credit == 0
, you load the view views/users/no_credit.php
Otherwise, you load the view views/users/credit.php
(it's conventional to name the views after the actions they represent and put them in a folder corresponding to the controller)