Php 将具有多个字段的数组传递到codeigniter中的视图
我正在使用CodeIgniter,我正在与数组作斗争,我需要在控制器中执行mysql db查找,然后将数组传递给视图,这样我就可以在视图中循环通过数组来显示结果列表。我需要数组每行包含两个字段以及ID和Name,所以 行1 ID=1,Name=Hello 行2 ID=2,Name=World 我一直在网络上搜索al,我可以通过传递ID或名称来实现这一点,但我不知道如何在数组中同时传递它们Php 将具有多个字段的数组传递到codeigniter中的视图,php,mysql,arrays,codeigniter,Php,Mysql,Arrays,Codeigniter,我正在使用CodeIgniter,我正在与数组作斗争,我需要在控制器中执行mysql db查找,然后将数组传递给视图,这样我就可以在视图中循环通过数组来显示结果列表。我需要数组每行包含两个字段以及ID和Name,所以 行1 ID=1,Name=Hello 行2 ID=2,Name=World 我一直在网络上搜索al,我可以通过传递ID或名称来实现这一点,但我不知道如何在数组中同时传递它们 //get open cases $this->db->where('UserI
//get open cases
$this->db->where('UserID',$this->session->userdata('ID'));
$query = $this->db->get('cases');
if ($query->num_rows() > 0)
{
$cases = array();
foreach ($query->result() as $row)
{
// ive tried this
$cases[]=$row->ID,$row->CaseName;
// and this
$cases[]=($row->ID,$row->CaseName);
//but they both dont work :(
}
我可以理解基本数组,但以前从未真正使用过它们,现在我正在使用CI,我不能简单地将sql查找放在视图中并在那里循环。我知道sql查找应该在模型中,但我现在对此并不担心,只想填充数组并传递给视图,任何帮助都将不胜感激
//下面的编辑功能可以很好地工作,但这是您使用CI的方式吗
function viewCase()
{
$caseID = $this->uri->segment(3);
$this->db->where('ID',$caseID);
$this->db->where('UserID', $this->session->userdata('ID'));
$query = $this->db->get('cases');
if ($query->num_rows() == 1)
{
foreach ($query->result() as $row)
{
$data['caseID']= $row->ID;
$data['caseName'] = $row->CaseName;
$data['fileName'] = $row->FileName;
$data['statusID'] = $row->Status;
$data['statusName']= "not set yet";
//we need the status friendly name
$this->db->where('ID', $data['statusID']);
$query2 = $this->db->get('case_status');
if ($query->num_rows() == 1)
{
foreach ($query2->result() as $row2)
{
$data['statusName']=$row2->Name;
}
}
}
$data['fName']= $this->session->userdata('fName');
$data['lName']= $this->session->userdata('lName');
$data['email']= $this->session->userdata('email');
$data['fullName']= $this->session->userdata('fName')." ".$this->session->userdata('lName');
$this->load->view('head',$data);
$this->load->view('header_logged_in',$data);
$this->load->view('nav');
$this->load->view('view_case_view',$data);
$this->load->view('footer');
}
else
{
$data['fName']= $this->session->userdata('fName');
$data['lName']= $this->session->userdata('lName');
$data['email']= $this->session->userdata('email');
$data['fullName']= $this->session->userdata('fName')." ".$this->session->userdata('lName');
$this->load->view('head',$data);
$this->load->view('header_logged_in',$data);
$this->load->view('nav');
$this->load->view('view_case_error_view');
$this->load->view('footer');
}
}
如果您不需要对控制器中的数据执行任何操作,您可以将
$query
变量传递到视图,然后在视图中传递foreach($query->result()as$row)
//编辑:
我会这样写你的控制器。在这里,我假设您必须使用ID输入此控制器,如果您不输入,它将引发错误。您的URI段代码将返回false,我认为这将在查询中解释为零,并返回零结果集。如果愿意,可以将0设置为默认值,如下所示viewCase($caseID=0)
function viewCase($caseID)
{
$this->db->select('cases.ID AS CaseID', FALSE); /* you will access this as $row->CaseID */
$this->db->select('cases.CaseName');
$this->db->select('cases.FileNameName');
$this->db->select('cases.Status AS StatusID', FALSE); /* if you don't need status id, you can remove this, access as $row->StatusID */
$this->db->select('case_status.Name AS StatusName', FALSE); /* access as $row->StatusName */
$this->db->join('case_status', 'case_statis.ID=cases.Status');
$this->db->where('cases.ID', $caseID);
$this->db->where('cases.UserID', $this->session->userdata('ID'));
$query = $this->db->get('cases');
$data['query'] = $query;
$data['fName']= $this->session->userdata('fName');
$data['lName']= $this->session->userdata('lName');
$data['email']= $this->session->userdata('email');
$data['fullName']= $this->session->userdata('fName')." ".$this->session->userdata('lName');
$this->load->view('head',$data);
$this->load->view('header_logged_in',$data);
$this->load->view('nav');
$this->load->view('view_case_view',$data);
$this->load->view('footer');
}
然后在你看来,做这样的事情
// view
<table>
<tr>
<th>CaseID</th>
<th>CaseName</th>
<th>FileName</th>
<th>StatusID</th>
<th>StatusName</th>
</tr>
<? foreach ($query->result() as $row): ?>
<tr>
<td><p><?=$row->CaseID?></p></td>
<td><p><?=$row->CaseName?></p></td>
<td><p><?=$row->FileName?></p></td>
<td><p><?=$row->StatusID?></p></td>
<td><p><?=$row->StatusName?></p></td>
</tr>
<? endforeach; ?>
</table>
//查看
酪蛋白
案例名称
文件名
状态ID
状态名
请注意,如果没有行,foreach将不会输入,因此您不需要真正检查行数,除非您想在没有返回任何行数时执行一些特殊操作(例如打印“无结果”)。让我来做一个简单的布局,说明如果您使用的是MVC模式,那么您的应用程序应该如何运行,codeigniter就是基于这个模式的 型号:
class YourModel extends Model{
function get_data(){
$query = $this->db->get('cases');
return $query->result();
}
}
控制器:
class YourController exteds Controller{
function yourFunction(){
$this->load->model('Model_name', 'fubar');
$data['yourinfo'] = $this->fubar->get_data();
$this->load->view('yourview', $data);
}
}
视图:
foreach($yournfo作为$row){
echo$row->yourcoulmn.“
”;
}
这或多或少是你需要做的事情的简短版本
希望有帮助cool我不知道你可以向他们传递$data以外的任何东西,你能帮我一个忙吗?我会编辑我的帖子,在我的一个控制器上显示我的功能。它工作正常,但我想知道我做的事情是否像CI“道德”中那样正确,一点也不使用模型。嘿,这是一个很棒的例子,非常感谢你的时间
class YourController exteds Controller{
function yourFunction(){
$this->load->model('Model_name', 'fubar');
$data['yourinfo'] = $this->fubar->get_data();
$this->load->view('yourview', $data);
}
}
foreach($yourinfo as $row){
echo $row->yourcoulmn . "<br>";
}