Why is my gallery view page throwing up an error?

2019-09-21 15:39发布

问题:

Im currently developing using codeigniter a gallery in an interactive profile where each user can upload their own section of images. Currently my view page is throwing up a Message: Undefined variable: images. This is despite I already have a get_images function in my model there also being an if statement in my view so it will understand not to try to display images if none have been uploaded yet. How can i fix this issue? Im also trying to store any image uploaded in a gallery database so that beside each user's name it shows any image they have uploaded. Here is my code so far:

Controller:

class Gallery extends CI_Controller {



function __construct()
{
    // Call the parent construct
    parent::__construct();

    $this->load->model("profiles");
    $this->load->model("gal_model");
    $this->load->helper(array('form', 'url'));

    $this->gallery_path = 'web-project-jb/assets/gallery';
    $this->gallery_path_url = base_url().'web-project-jb/assets/gallery/';

}

function upload()
{

    $config = array(

            'allowed_types' =>'gif|jpg|jpeg|png',
            'upload_path' => $this->gallery_path,
            'max_size' => 10000,
            'max_width' => 1024,
            'max_height' => 768);

    $this->load->library('upload', $config);

    $image_data = $this->upload->data();

    $config = array(
            'source_image'  => $image_data["full_path"],
            'new_image'     => $this->gallery_path. '/thumbs',
            'maintain_ration'   => true,
            'width' => 150,
            'height' => 100


    );


    $this->load->library("image_lib", $config);
    $this->image_lib->resize();

    $username = $this->session->userdata('username');

    if ( ! $this->upload->do_upload())
    {
        $error = array('error' => $this->upload->display_errors());

        $username = $this->session->userdata('username');


        $viewData['username'] = $username;

        $this->load->view('shared/header');
        $this->load->view('gallery/galtitle', $viewData);
        $this->load->view('shared/nav');
        $this->load->view('gallery/galview', $error, $viewData, array('error' => ' ' ));
        $this->load->view('shared/footer');



    }
    else
    {
        $file_data  = $this->upload->data();

        $image = $this->gallery_path.$file_data['file_name'];

        $data['image'] = $this->gallery_path.$file_data['file_name'];

        $this->username = $this->session->userdata('username');

        $this->gal_model->putGalleryImage($username, $image);

        $this->session->set_userdata($image);

        $viewData['username'] = $username;
        $data['gal_model'] = $this->gal_model->get_images($username);



        $username = $this->session->userdata('username');

        $this->load->view('shared/header');
        $this->load->view('gallery/galtitle', $viewData);
        $this->load->view('shared/nav');
        $this->load->view('gallery/galview', $data, $viewData);
        $this->load->view('shared/footer');


    }
}

function index()
{

    $username = $this->session->userdata('username');

    $this->load->library('upload');

    $data['profileimages'] = $this->gal_model->get_images($username);

    $file_data = $this->upload->data();

    $file_data['file_name'] = $this->gal_model->get_images($username);

    $image = $this->gallery_path.$file_data['file_name'];

    $data['image'] = $file_data['file_name'];


    $viewData['username'] = $username;


    $this->load->view('shared/header');
    $this->load->view('gallery/galtitle', $viewData);
    $this->load->view('shared/nav');
    $this->load->view('gallery/galview', $viewData, $data, array('error' => ' ' ));
    $this->load->view('shared/footer');

}

 }

Model:

 class Gal_model extends CI_Model
{
var $gallery_path;
var $gallery_path_url;

function Gal_model()
{
    parent::__construct();

    $this->gallery_path = 'web-project-jb/assets/gallery';
    $this->gallery_path_url = base_url().'web-project-jb/assets/gallery/';
}   


function exists($username)
{
    $this->db->select('*')->from("gallery")->where('user', $username);
    $query = $this->db->get();

    if ($query->num_rows() > 0)
    {

        return true;
        /*
         echo "user $user exists!";
        $row = $query->row();
        echo " and his profileimage is $row->profileimage";
        */
    }

    else

    {

        return false;
        //echo "no such user as $user!";
    }

}



function putGalleryImage($username, $image)
{


    $record = array('user' => $username, 'galleryimage' => $image);
    $this->session->set_userdata($image);
    if ($this->exists($username))
    {
        $this->db->where('user', $username)->update('gallery', $record);


    }
    else
    {
        $this->db->where('user', $username)->insert('gallery', $record);

    }


}


function get_images($username)
{

    $this->db->select('*')->from('gal_model')->where('user', $username);

    $files = scandir($this->gallery_path);
    $files = array_diff($files, array('.', '..', 'thumbs'));

    $images = array();

    foreach ($files as $file){
        $images[] = array(
            'url'   => $this->gallery_path_url.$file,
            'thumb_url' => $this->gallery_path_url.'thumbs/'.$file


                );

    }

    return $images;
}

  }

View:

 <?php if ( is_array($images) && (count($images)>0) ):
   foreach($images as $image): ?>
   <div class="thumb">
       <a href="<?php echo $image['url']; ?>">
          <img src ="<?php echo $image['thumb_url']; ?>"/>
       </a>  
       <br>
   </div>
<?php endforeach; else:  ?>
    <div id = "blank_gallery">Please upload an Image</div>
<?php endif; ?>

Thanks again for all the help guys

回答1:

You should Change your if in your view to

if(isset($images) && is_array($images)) 

that way if $images in undefined it will nto throw an error it will just skip that all together



回答2:

Correct me if I'm wrong here but it seems you never assing $images to the view. You assign $image and $profileimages to index() but nay do I see $images.