我不太确定我的标题问题是否正确,但是尽管数组中只有一项,但我面临着foreach中多个循环的严重错误。我在这里粘贴代码;
显示(控制器)
$table_data = array(
'table_data' => $this->display_model->get_table_data($table_name),
'edit_table_data'=>$this->display_model->get_table_data($table_name,$row_id)
);
$form_name='edit_'.$table_name;
$this->load->view('header');
$this->load->view($form_name,$table_data);
$this->load->view('footer');
您会看到 tabe_data 和 edit_table_data 正在调用具有不同参数的相同函数。 在这里,我怀疑这两个函数调用之间的时间安排(老实说我错了,因为Codeigniter管理函数调用)
Display_model (模型)
public function get_table_data($table_name,$row_id=null)
{
$return = "";
if ($row_id != null)
{
switch ($table_name) {
case 'user':
//$return = $this->db->where($table_name."_id",$row_id)->get($table_name)->result();
$return = $this->db->select($table_name.'.*,country.country_name')
->join('country','country.country_id=user.user_country_id','left')
->where($table_name.'_id',$row_id)
->get($table_name)->result();
break;
case 'user_document':
//$return = $this->db->where($table_name."_id",$row_id)->get($table_name)->result();
$return = $this->db->select($table_name.'.*,document.document_name')
->join('document','document.document_id=use_document.document_id','left')
->where($table_name.'_id',$row_id)
->get($table_name)->result();
break;
default:
$return = $this->db->where($table_name."_id",$row_id)->get($table_name)->result();
break;
}
if($return != null)
{
return $return;
}
else
{
return "no_data";
}
}
这是我遇到错误的观点
<?php foreach ($edit_table_data as $etd_row) {?>
<form method="post" class="form-horizontal" action="<?php echo site_url('admin/edit_row/user_type/'.$etd_row->user_type_id)?>">
<div class="form-group">
<label class="col-sm-4 control-label">User Type Name</label>
<div class="col-sm-8"><input type="text" class="form-control" name="user_type_name" value="<?php echo $etd_row->user_type_name?>"></div>
</div>
<div class="hr-line-dashed"></div>
<div class="form-group">
<div class="col-sm-2 col-sm-offset-2">
<button class="btn btn-primary" type="submit">Edit changes</button>
</div>
</div>
</form>
<?php } ?>
在foreach循环行上,出现错误
提前感谢您的评论
错误
A PHP Error was encountered
Severity: Warning
Message: Invalid argument supplied for foreach()
Filename: views/edit_user_type.php
Line Number: 18
Backtrace:
File: C:\wamp\www\gmf\application\views\edit_user_type.php
Line: 18
Function: _error_handler
File: C:\wamp\www\gmf\application\controllers\Display.php
Line: 170
Function: view
File: C:\wamp\www\gmf\index.php
Line: 315
Function: require_once
答案 0 :(得分:0)
如果$edit_table_data
不是数组-在这种情况下可能是字符串,则会出现此错误。
我的CI知识有些生疏,但我想这些方面的东西可能会帮助您:
$query = $this->db->select($table_name.'.*,country.country_name')
->join('country','country.country_id=user.user_country_id','left')
->where($table_name.'_id',$row_id)
->get($table_name);
if ($query->num_rows() === 0){
return []; // Make sure we're always returning an array.
// I'd rather handle this stuff in the view...
// Probably some kind of message that shows:
// that there are not results when $edit_table_data is not an array, otherwise loop.
}
return $query->result();
或者您可以按照以下方式做一些事情:
<?php
if (!is_array($edit_table_data)) {
echo 'No results here.';
} else {
foreach ($edit_table_data as $etd_row) { ?>
<form method="post" class="form-horizontal"
action="<?php echo site_url('admin/edit_row/user_type/' . $etd_row->user_type_id) ?>">
<div class="form-group">
<label class="col-sm-4 control-label">User Type Name</label>
<div class="col-sm-8"><input type="text" class="form-control" name="user_type_name"
value="<?php echo $etd_row->user_type_name ?>"></div>
</div>
<div class="hr-line-dashed"></div>
<div class="form-group">
<div class="col-sm-2 col-sm-offset-2">
<button class="btn btn-primary" type="submit">Edit changes</button>
</div>
</div>
</form>
<?php
}
}
?>
答案 1 :(得分:0)
似乎没有理由两次调用get_table_data
,一次调用$row_id
,一次调用$table_data['$table_data']
,因为您从未在视图中使用$table_data['edit_table_data'] = $this->display_model->get_table_data($table_name,$row_id) ;
$form_name='edit_'.$table_name;
$this->load->view('header');
$this->load->view($form_name,$table_data);
$this->load->view('footer');
。为了获得某些有用的东西,应该取消首次调用。修改后的控制器如下所示。
}
问题中的模型代码缺少大括号if ($row_id != null)
{
以关闭此语句。
$row_id
因此,如果没有提供get_table_data
,则很难准确地确定您要发生什么。如果没有更多信息,我认为public function get_table_data($table_name, $row_id)
不应为第二个参数提供默认值。换句话说,该函数应在没有$ row_id默认值的情况下定义-这样。
get_table_data()
没有$ row_id的默认值,如果没有提供任何值,则会发生致命错误。因此,控制器将需要确保提供了一个值。 同样,控制器应始终检查模型的返回值是否合适,或者模型应始终返回视图可以使用的内容。
where($table_name.'_id', $row_id)
包含许多重复的代码-get($table_name)->result()
和public function get_table_data($table_name, $row_id)
{
if($table_name === 'user')
{
$this->db
->select($table_name.'.*, country.country_name')
->join('country', 'country.country_id = user.user_country_id', 'left');
}
elseif($table_name === 'user_document')
{
$this->db
->select($table_name.'.* ,document.document_name')
->join('document', 'document.document_id = use_document.document_id', 'left');
}
return $this->db
->where($table_name."_id", $row_id)
->get($table_name)
->row();
}
出现3次。通过重新排列逻辑,可以消除重复行,从而使功能更加简洁。考虑这个版本。
$table_name
以上内容从$table_name."_id" == $row_id
中的任何row()
返回数据。对于“ user”或“ user_document”表,将添加特定的“ select”和“ join”子句。
因为您似乎只对一行感兴趣,所以应该呼叫result()
而不是db->row()
。
很重要的一点是,如果找不到记录,foreach
将返回NULL。该事实可用于测试模型返回并做出适当反应。在这种情况下,我们在视图中进行检查。因为只有一排。不需要<?php if(isset($edit_table_data)) { ?>
<form method="post" class="form-horizontal" action="<?php echo site_url('admin/edit_row/user_type/'.$edit_table_data->user_type_id) ?>">
<div class="form-group">
<label class="col-sm-4 control-label">User Type Name</label>
<div class="col-sm-8"><input type="text" class="form-control" name="user_type_name" value="<?php echo $edit_table_data->user_type_name ?>"></div>
</div>
<div class="hr-line-dashed"></div>
<div class="form-group">
<div class="col-sm-2 col-sm-offset-2">
<button class="btn btn-primary" type="submit">Edit changes</button>
</div>
</div>
</form>
<?php
}
else { ?> <div>No Data Available</div> <?php } ?>
。
spring.batch.initialize-schema=always