我正在尝试将2个变量传递给表单页面。
一个是表单字段的查询,第二个是错误变量。
加载页面时,我收到以下错误:
严重程度:通知
消息:未定义的变量:错误
文件名:views / upload_form.php
行号:7
这是我的控制器:
<?php
class Upload extends CI_Controller {
function __construct()
{
parent::__construct();
$this->load->helper(array('form', 'url'));
$this->load->database();
}
function index()
{
$this->load->helper('url');
$this->load->model('Image_model');
$data['query'] = $this->Image_model->image_biz();
$this->load->view('upload_form', $data, array('error' => ' ' ));
}
function do_upload()
{
$config['upload_path'] = dirname($_SERVER["SCRIPT_FILENAME"]).'/uploads/';
$config['allowed_types'] = 'gif|jpg|png';
$config['max_size'] = '200';
$config['max_width'] = '1024';
$config['max_height'] = '768';
$this->load->library('upload', $config);
if ( ! $this->upload->do_upload())
{
$error = array('error' => $this->upload->display_errors());
$this->load->view('upload_form', $error);
} else {
$image_data = array('upload_data' => $this->upload->data());
// can be add extra feature here.
$insert_data = array(
'image_file' => $image_data['upload_data']['file_name'],
'image_path' => $image_data['upload_data']['full_path'],
'image_ext' => $image_data['upload_data']['file_ext'],
'image_width'=> $image_data['upload_data']['image_width'],
'image_height' => $image_data['upload_data']['image_height'],
);
$this->db->insert('image', $insert_data);//load array to database
$this->load->view('upload_success', $image_data);
}
}
}
?>
这是我的视图页面“upload.php”:
<html>
<head>
<title>Upload Form</title>
</head>
<body>
<?php echo $error;?>
<?php echo form_open_multipart('upload/do_upload');?>
Image: <input type="file" name="userfile" size="20" /><br>
<label for="select">Business ID:</label>
<select name="image_bizID">
<?php foreach ($query->result() as $row) { ?>
<option value=""><?=$row->biz_id;?></option>
<?php } ?>
</select>
<br /><br />
<input type="submit" value="upload" />
</form>
</body>
</html>
非常感谢任何有助于解决此错误的帮助。
谢谢。
答案 0 :(得分:3)
Undefined variable: error
表示有一个名为error
的变量未定义。
在您看来,您有这一行:
<?php echo $error;?>
这需要在控制器中设置$image_data['error']
,因为控制器中的$image_data['error']
在视图中变为$error
。
要以最简单的方式修复它,只需将其分配给控制器中的空字符串:
$image_data['error'] = '';
或只是检查它是否在视图中首先设置:
<?php
if (isset($error))
echo $error;
?>
通过适当地设置error_reporting
,或者只是在视图中压制该行上的错误,也有办法忽略通知:
<?php @echo $error; // notice @ before echo ?>
但解决问题总是比忽略它更好。
更新
刚才注意到,你以错误的方式传递变数。所以这个:
function index()
{
$this->load->helper('url');
$this->load->model('Image_model');
$data['query'] = $this->Image_model->image_biz();
$this->load->view('upload_form', $data, array('error' => ' ' ));
}
应该是:
function index()
{
$this->load->helper('url');
$this->load->model('Image_model');
$data['query'] = $this->Image_model->image_biz();
$data['error'] = '';
$this->load->view('upload_form', $data);
}
您传递的所有内容都应位于单个数组或对象中,因此$data['query']
和$data['error']
是正确的方式,因为我们只发送了$data
阵列。加载视图函数中的第三个参数用于将视图作为字符串返回而不是呈现它,因此在这种情况下您不想使用它。
在此处详细了解观看次数:http://ellislab.com/codeigniter/user-guide/general/views.html
答案 1 :(得分:0)
只需在索引函数中更改这些行
$data['error']='';
$this->load->view('upload_form', $data);
您可以选择传递第三个参数,即布尔数据。
或者您可以使用isset函数来检查错误变量是否已设置