[eluser]Michael;[/eluser]
I have run into a problem that I cannot exactly find a solution to by searching the forums...
First off, the code:
The Controller:
Code: <?php
class Members extends Controller {
function __construct() {
parent::Controller();
$this->load->helper('url');
}
function index() {
$ranks = array("CB-C","CB-L","CB-E","CB-K","CB-J","CB-I","CB-R");
$members['list'] = array();
foreach ($ranks as $rank) {
If($rank == 'CB-C' || $rank =='CB-L' || $rank =='CB-E' || $rank =='CB-K' || $rank =='CB-J' || $rank =='CB-I' || $rank =='CB-R' ) {
//$data['rows'][] = "<tr><td colspan=\"15\"> </td></tr>";
}
$sql = "SELECT * FROM cb_members WHERE rank = '$rank' AND status = 'A' ORDER BY membername";
$query = $this->db->query($sql);
foreach ($query->result_array() as $row) {
$members = array($row['name'],$row['rank'],$row['main']);
}
}
$data['navigation'] = $this->load->view('navigation', '', TRUE);
$data['content'] = $this->load->view('members_list', $members, TRUE);
$this->load->view('template', $data);
}
}
?>
The View:
Code: <br/><br/>
<table border="1">
<tr>
<td> </td>
<td width="10"></td>
<td width="125"></td>
<td width="100"></td>
<td width="150"></td>
<td colspan="5" width="250" align="center">Merit Points</td>
<td colspan="5" width="250" align="center">Activity Points</td>
</tr>
<tr>
<td> </td>
<td width="10"> </td>
<td width="125" align="center">Member</td>
<td width="100" align="center">Rank</td>
<td width="150" align="center">Main</td>
<td width="50" align="center">S</td>
<td width="50" align="center">R</td>
<td width="50" align="center">F</td>
<td width="50" align="center">D</td>
<td width="50" align="center"><b><u>Total</u></b></td>
<td width="50" align="center">T</td>
<td width="50" align="center">Q</td>
<td width="50" align="center">C</td>
<td width="50" align="center">G</td>
<td width="50" align="center"><b><u>Total</u></b></td>
</tr>
<?php foreach($members as $member) {?>
<tr>
<td> </td>
<td width="10"> </td>
<td><?=$member['name']?></td>
<td align="center"><?=$member['rank']?></td>
<td align="center"><?=$member['main']?></td>
<td align="center"><?=$member['sen']?></td>
<td align="center"><?=$member['rec']?></td>
<td align="center"><?=$member['fel']?></td>
<td align="center"><?=$member['dev']?></td>
<td align="center"><b><u><?=$member['merit']?></u></b></td>
<td align="center"><?=$member['tou']?></td>
<td align="center"><?=$member['que']?></td>
<td align="center"><?=$member['cam']?></td>
<td align="center"><?=$member['gam']?></td>
<td align="center"><b><u><?=$member['activity']?></u></b></td>
</tr>
<?php } ?>
</table>
So, I have figured out that results are being generated, but I'm getting the following errors:
Quote:A PHP Error was encountered
Severity: Notice
Message: Undefined variable: members
Filename: views/members_list.php
Line Number: 29
A PHP Error was encountered
Severity: Warning
Message: Invalid argument supplied for foreach()
Filename: views/members_list.php
Line Number: 29
And:
Quote:A PHP Error was encountered
Severity: Notice
Message: Undefined index: name
Filename: controllers/members.php
Line Number: 20
A PHP Error was encountered
Severity: Notice
Message: Undefined index: main
Filename: controllers/members.php
Line Number: 20
Unfortunately for me, at this point I am completely out of ideas... The entire point is to pass a multidimensional array to the view to be listed out in rows as individual members.
Please note: I have not gotten around to figuring out how models are used, so my sql is still being done in my controller.
Thanks...
[eluser]tonanbarbarian[/eluser]
you have not added the members element to the data array
Code: $data['navigation'] = $this->load->view('navigation', '', TRUE);
$data['content'] = $this->load->view('members_list', $members, TRUE);
$data['members'] = $members;
[eluser]Michael;[/eluser]
Adding $member to the $data array did not fix it. Since I'm passing $member directly into view, wouldn't passing $data in cause an endless loop (since the embedded view is part of the $data array)?
[eluser]Michael;[/eluser]
Okay, working on things a little bit, added a model to the mix... here's what we have now:
Controller:
Code: <?php
class Members extends Controller {
function __construct() {
parent::Controller();
$this->load->helper('url');
$this->load->model('Members_model');
}
function index() {
$ranks = array("CB-C","CB-L","CB-E","CB-K","CB-J","CB-I","CB-R");
$members = array();
foreach ($ranks as $rank) {
If($rank == 'CB-C' || $rank =='CB-L' || $rank =='CB-E' || $rank =='CB-K' || $rank =='CB-J' || $rank =='CB-I' || $rank =='CB-R' ) {
//$data['rows'][] = "<tr><td colspan=\"15\"> </td></tr>";
}
$members = $this->Members_model->get_member_list($rank);
// $sql = "SELECT * FROM cb_members WHERE rank = '$rank' AND status = 'A' ORDER BY membername";
// $members['list'] = $this->db->query($sql);
// foreach ($query->result_array() as $row) {
// $members = array($row['name'],$row['rank'],$row['main']);
// }
}
$data = array();
$data['navigation'] = $this->load->view('navigation', '', TRUE);
$data['content'] = $this->load->view('members_list', $members, TRUE);
$this->load->view('template', $data);
}
}
?>
Model:
Code: <?php
class Members_model extends Model {
var $name = '';
var $rank = '';
var $main = '';
var $sen = '';
var $rec = '';
var $fel = '';
var $dev = '';
var $merit = '';
var $tou = '';
var $que = '';
var $cam = '';
var $gam = '';
var $activity = '';
function __construct() {
parent::Model();
}
function get_member_list($rank) {
$sql = "SELECT * FROM cb_members WHERE rank = '$rank' AND status = 'A' ORDER BY membername";
$query = $this->db->query($sql);
return $query->result_array();
}
}
?>
View:
Code: <br/><br/>
<table border="1">
<tr>
<td> </td>
<td width="10"></td>
<td width="125"></td>
<td width="100"></td>
<td width="150"></td>
<td colspan="5" width="250" align="center">Merit Points</td>
<td colspan="5" width="250" align="center">Activity Points</td>
</tr>
<tr>
<td> </td>
<td width="10"> </td>
<td width="125" align="center">Member</td>
<td width="100" align="center">Rank</td>
<td width="150" align="center">Main</td>
<td width="50" align="center">S</td>
<td width="50" align="center">R</td>
<td width="50" align="center">F</td>
<td width="50" align="center">D</td>
<td width="50" align="center"><b><u>Total</u></b></td>
<td width="50" align="center">T</td>
<td width="50" align="center">Q</td>
<td width="50" align="center">C</td>
<td width="50" align="center">G</td>
<td width="50" align="center"><b><u>Total</u></b></td>
</tr>
<?php foreach($members as $member) {?>
<tr>
<td> </td>
<td width="10"> </td>
<td><?=$member['name']?></td>
<td align="center"><?=$member['rank']?></td>
<td align="center"><?=$member['main']?></td>
<td align="center"><?=$member['sen']?></td>
<td align="center"><?=$member['rec']?></td>
<td align="center"><?=$member['fel']?></td>
<td align="center"><?=$member['dev']?></td>
<td align="center"><b><u><?=$member['merit']?></u></b></td>
<td align="center"><?=$member['tou']?></td>
<td align="center"><?=$member['que']?></td>
<td align="center"><?=$member['cam']?></td>
<td align="center"><?=$member['gam']?></td>
<td align="center"><b><u><?=$member['activity']?></u></b></td>
</tr>
<?php } ?>
</table>
Getting these errors:
Quote:A PHP Error was encountered
Severity: Notice
Message: Undefined variable: members
Filename: views/members_list.php
Line Number: 29
A PHP Error was encountered
Severity: Warning
Message: Invalid argument supplied for foreach()
Filename: views/members_list.php
Line Number: 29
*sighs* This cannot be that difficult, yet I am missing something...
[eluser]Pascal Kriete[/eluser]
And yet you still have the same bug in there, that tonan pointed out. When you pass an array to a view, the array keys are turned into variables. So if you have $member['name'] and you pass $member to your view you will get a variable $name.
Fix:
Code: $something['members'] = $members;
$this->load->view('member_list', $something, TRUE);
[eluser]Michael;[/eluser]
Ah... okay, I see. So I changed the controller, like so:
Controller:
Code: <?php
class Members extends Controller {
function __construct() {
parent::Controller();
$this->load->helper('url');
$this->load->model('Members_model');
}
function index() {
$ranks = array("CB-C","CB-L","CB-E","CB-K","CB-J","CB-I","CB-R");
foreach ($ranks as $rank) {
If($rank == 'CB-C' || $rank =='CB-L' || $rank =='CB-E' || $rank =='CB-K' || $rank =='CB-J' || $rank =='CB-I' || $rank =='CB-R' ) {
//$data['rows'][] = "<tr><td colspan=\"15\"> </td></tr>";
}
$rank_results = $this->Members_model->get_member_list($rank);
$list['members'] = $rank_results;
}
$data = array();
$data['navigation'] = $this->load->view('navigation', '', TRUE);
$data['content'] = $this->load->view('members_list', $list, TRUE);
$this->load->view('template', $data);
}
}
?>
However, now I'm only getting the results for the last rank in the $ranks array()...
Thanks again guys for your help.
[eluser]Pascal Kriete[/eluser]
Yes, that problem comes from this line:
Code: $rank_results = $this->Members_model->get_member_list($rank);
$list['members'] = $rank_results;
You're overwriting $list['members'] with every iteration, so that only the last one sticks.
I assume you want to add each new rank to the bottom of your array, try doing this:
Code: $rank_results = array();
foreach ($ranks as $rank) {
$rank_results[] = $this->Members_model->get_member_list($rank);
}
$list['members'] = $rank_results;
[eluser]Michael;[/eluser]
Problem with that is that if I put any kind of [] on $rank_results I lose the data I am getting. Well, not exactly losing... When I put the [] on the end of $rank_results I get the same number of errors as I should have rows... so all of the rows are making it into the array, just not the view.
[eluser]Michael;[/eluser]
[quote author="inparo" date="1202125125"]
I assume you want to add each new rank to the bottom of your array, try doing this:
Code: $rank_results = array();
foreach ($ranks as $rank) {
$rank_results[] = $this->Members_model->get_member_list($rank);
}
$list['members'] = $rank_results;
[/quote]
Thank you, inparo ... as it turns out you were dead on as to what the problem was... but I had to go slightly different to get it to work.
Code: $ranks = array("CB-C","CB-L","CB-E","CB-K","CB-J","CB-I","CB-R");
$rank_results = array();
foreach ($ranks as $rank) {
$rank_results = $this->Cb_model->get_member_list($rank);
foreach ($rank_results as $row) {
$list['members'][] = $row;
}
}
Thank you again for your help... hopefully this will help someone else in the future.
|