Welcome Guest, Not a member yet? Register   Sign In
[RESOLVED] Pasing array results to views
#1

[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\">&nbsp;</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);
    }
}
?&gt;

The View:

Code:
<br/><br/>
<table border="1">
<tr>
<td>&nbsp;</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>&nbsp;</td>
<td width="10">&nbsp;</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>
&lt;?php foreach($members as $member) {?&gt;
<tr>
<td>&nbsp;</td>
<td width="10">&nbsp;</td>
<td>&lt;?=$member['name']?&gt;</td>
<td align="center">&lt;?=$member['rank']?&gt;</td>
<td align="center">&lt;?=$member['main']?&gt;</td>
<td align="center">&lt;?=$member['sen']?&gt;</td>
<td align="center">&lt;?=$member['rec']?&gt;</td>
<td align="center">&lt;?=$member['fel']?&gt;</td>
<td align="center">&lt;?=$member['dev']?&gt;</td>
<td align="center"><b><u>&lt;?=$member['merit']?&gt;</u></b></td>
<td align="center">&lt;?=$member['tou']?&gt;</td>
<td align="center">&lt;?=$member['que']?&gt;</td>
<td align="center">&lt;?=$member['cam']?&gt;</td>
<td align="center">&lt;?=$member['gam']?&gt;</td>
<td align="center"><b><u>&lt;?=$member['activity']?&gt;</u></b></td>
</tr>
&lt;?php } ?&gt;
</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...
#2

[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;
#3

[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)?
#4

[eluser]Michael;[/eluser]
Okay, working on things a little bit, added a model to the mix... here's what we have now:

Controller:
Code:
&lt;?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\">&nbsp;</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);
    }
}
?&gt;

Model:
Code:
&lt;?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();
    }
}
?&gt;

View:
Code:
<br/><br/>
<table border="1">
<tr>
<td>&nbsp;</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>&nbsp;</td>
<td width="10">&nbsp;</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>
&lt;?php foreach($members as $member) {?&gt;
<tr>
<td>&nbsp;</td>
<td width="10">&nbsp;</td>
<td>&lt;?=$member['name']?&gt;</td>
<td align="center">&lt;?=$member['rank']?&gt;</td>
<td align="center">&lt;?=$member['main']?&gt;</td>
<td align="center">&lt;?=$member['sen']?&gt;</td>
<td align="center">&lt;?=$member['rec']?&gt;</td>
<td align="center">&lt;?=$member['fel']?&gt;</td>
<td align="center">&lt;?=$member['dev']?&gt;</td>
<td align="center"><b><u>&lt;?=$member['merit']?&gt;</u></b></td>
<td align="center">&lt;?=$member['tou']?&gt;</td>
<td align="center">&lt;?=$member['que']?&gt;</td>
<td align="center">&lt;?=$member['cam']?&gt;</td>
<td align="center">&lt;?=$member['gam']?&gt;</td>
<td align="center"><b><u>&lt;?=$member['activity']?&gt;</u></b></td>
</tr>
&lt;?php } ?&gt;
</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...
#5

[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);
#6

[eluser]Michael;[/eluser]
Ah... okay, I see. So I changed the controller, like so:

Controller:
Code:
&lt;?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\">&nbsp;</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);
    }
}
?&gt;

However, now I'm only getting the results for the last rank in the $ranks array()...

Thanks again guys for your help.
#7

[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;
#8

[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.
#9

[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. Smile




Theme © iAndrew 2016 - Forum software by © MyBB