所以我正在编写一个函数,允许我从一个数据库表添加一个ID到另一个数据库表来关联这两个,但是我遇到了一些小问题,似乎无法想象该怎么做。任何帮助都会被贬低。
请原谅我的一些杂乱的代码,我一直在尝试很多看似不起作用的不同解决方案。class photo_modle extends CI_Model {
var $gallery_path;
var $image_name;
var $row;
var $gid; // gallary ID
var $iid; // image ID
function photo_modle() {
ob_start();
$this->gallery_path = realpath(APPPATH . '../images');
}
function uploadPhoto() {
$config = array(
'allowed_types' => 'jpg|jpeg',
'upload_path' => $this->gallery_path,
);
$this->load->library('upload', $config);
$this->upload->do_upload();
$image_data = $this->upload->data();
$this->image_name = $image_data['file_name'];
$config = array(
'source_image' => $image_data['full_path'],
'new_image' => realpath($this->gallery_path . '/thumb/normal/'),
'width' => 248,
'height' => 198,
'maintain_ratio' => false
);
$this->load->library('image_lib', $config);
$this->image_lib->resize();
$data = array(
'image_name' => $this->image_name,
'description' => $this->input->post('description'),
'name' => $this->input->post('name')
);
$str = $this->db->insert_string('images', $data);
$this->db->query($str);
$this->iid = $this->db->insert_id();
$grayscale_path = '/Applications/XAMPP/xamppfiles/htdocs/images/thumb/normal/' . $this->image_name;
header('Content-type: image/jpeg');
$img = imagecreatefromjpeg($grayscale_path);
imagefilter($img, IMG_FILTER_GRAYSCALE);
imagejpeg($img, '/Applications/XAMPP/xamppfiles/htdocs/images/thumb/rollover/' . $this->image_name, 100);
imagedestroy($img);
$ndata = array (
'image_name' => $this->image_name,
'description' => $this->input->post('description'),
'name' => $this->input->post('name'),
'id' => $this->iid
);
$this->session->set_userdata($ndata);
}
function add_new_gallery() {
$ndata = array(
'gallery_name' => $this->input->post('gallery_name'),
'description' => $this->input->post('gallery_description'),
);
$n_str = $this->db->insert('gallery', $ndata);
// this is the only place where i can put the redirect without it returning errors
// but if i do it here it does not pass back the gid variable which i need.
// I also should mention that I have a header('Content-type: image/jpeg'); above all of
// this, and that is why I have to do a redirect, so that I don't get an error. and that
// header code is nessasary, for I am doing some photo manipulation that requires it.
redirect('site/uploaded');
$this->db->query($n_str);
$this->gid = $this->db->insert_id();
// I was trying to send that info in the session, but even that did not work because of the
// redirect
$sdata = array(
'gallery_id' => $this->gid
);
$this->session->set_userdata($sdata);
}
// this function needs the info that is not getting passed.
function addId() {
$sdata = array('gallery_id' => $this->session->userdata('gallery_id'));
$where = "id = ".$this->session->userdata('image_id');
$str = $this->db->update_string('images', $sdata, $where);
$this->db->query($str);
}
对任何一个可以帮助你感谢太多时间的人。任何建议都会很棒!
答案 0 :(得分:2)
如果您只是操纵图像,并将结果保存到文件,则无需发送Content-type: image/jpeg
标题。
将图像发送到浏览器时,仅是必需的。
你可能会对imagejpeg的工作方式感到困惑,因为它有双重行为。 imagejpg可以:
如果您没有将图片传递给$filename
,请将图片直接输出到您的浏览器。当然,您需要警告浏览器预期图像数据,即当您向其发送内容类型标题时。
如果您将图片设为$filename
,请将图片保存到文件中。
在您的情况下,您确实将$filename
传递给它,以便将图像保存到磁盘。但是你也发送了Content-type: image/jpeg
所以你的浏览器希望接收从未发生的图像数据,然后它“因为它包含错误而无法显示”。