why is redirect() not allowing me to finish my function call?
So i'm writing a function that will allow me to add an ID from one data base table to another to associate the two, but i've run into some trubble and can't seem to figgure out what to do. any help would be much appreaceated.
pleas excuse my some what messy code, i've been trying alot of diffrent solutions that don't seem to be working.
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);
}
to any one that can help thank you sooooooo much for your time. any sug开发者_如何学编程gestions would be great!
You don't need to send a Content-type: image/jpeg
header if you are just manipulating an image, and saving results to a file.
It's only necessary when you are sending an image to the browser.
You may got confused on how imagejpeg works, as it has a dual behaviour. imagejpg can:
Output an image directly to your browser, if you dont pass it a
$filename
. Of course you need to warn the browser to expect image data, that's when you send it a content type header.Save the image to a file, if you do give it a
$filename
.
In your case, you do pass it a $filename
so the image is saved to disk. But you're also sending a Content-type: image/jpeg
so your browser is expecting to receive image data, which never happens, then it "cannot be displayed because it contains errors".
精彩评论