борется с загрузкой ajax и PHP - PullRequest
0 голосов
/ 21 апреля 2011

Мне нужна помощь, пожалуйста,

Я загружаю загрузку изображения с помощью загрузчика jquery, чтобы пользователь мог получить предварительный просмотр изображения, а я могу jCrop на нем, моя проблема в том, чтоЗатем мне нужно сохранить имя файла, но я не могу добраться до переменной, которую я создаю в функции загрузки,

Процесс, который проходит пользователь, выглядит следующим образом:

  1. Пользователь заполняетв деталях
  2. Пользователь выбирает и изображение для загрузки и нажимает кнопку загрузки
  3. Функция загрузки запускается, и изображение возвращается к виду
  4. Пользователь выбирает областьизображения, которое будет обрезано и сохранено
  5. Пользователь продолжает заполнять форму
  6. Сохраните элементы, включая имя файла

Ниже приведен мой код PHP, который яверьте, где переменная пропадает и не может быть использована в функции добавления,

Add () - функция, которую отправляет форма тоже

public function add()
{
    $this->form_validation->set_rules('title','title', 'required|trim|min_length[2]');
    $this->form_validation->set_rules('firstname', 'firstname', 'required|trim|alpha');
    $this->form_validation->set_rules('surname', 'surname', 'required|trim|alpha');
    $this->form_validation->set_rules('email', 'email address', 'required|trim|valid_email');
    $this->form_validation->set_rules('postcode', 'postcode', 'required|trim|min_length[6]|max_length[9]');
    $this->form_validation->set_rules('company_name', 'company_name', 'required|trim');
    $this->form_validation->set_rules('company_summary', 'company_summary', 'required|trim|max_length[3000]');
    $this->form_validation->set_rules('alternative_ads', 'alternative ads', 'required|trim|prep_url');
    $this->form_validation->set_rules('facebook_url', 'Facebook URL', 'required|trim|prep_url');
    $this->form_validation->set_rules('twitter_url', 'Twitter URL', 'required|trim|prep_url');

    if($this->form_validation->run() == FALSE)
    {
        $this->template->build('admin/users/add');
    }
    else
    {
        //group the post data together soe that we can save the data easily.
        $user = array(
            'firstname' => $this->input->post('firstname'),
            'surname' => $this->input->post('surname'),
            'email' => $this->input->post('email'),
            'postcode' => $this->input->post('postcode'),
            'date_registered' => date("d-m-y h:i:s", time())
        );

        if(!$this->users_model->insert($this->input->xss_clean($user)))
        {
            $data['error'] = "We could not save you details, please try again";
            $this->template->build('/users/admin/add', $data);
        }

        $employer = array(
            'company_name' => $this->input->post('company_name'),
            'company_summary' => $this->input->post('company_summary'),
            'logo' => $this->file['file_name'],
            'alternative_ads' => $this->input->post('alternative_ads'),
            'facebook_url' => $this->input->post('facebook_url'),
            'twitter_url' => $this->input->post('twitter_url'),
            'user_id' => $this->db->insert_id()
        );

        if(!$this->employer_model->insert($this->input->xss_clean($employer)))
        {
            $data['error'] = "We could not save you details, please try again";
            $this->template->build('/users/admin/add', $data);              
        }
        else
        {
            die(print_r($this->file));
            $this->load->library('image_lib');

            $config['image_library'] = 'gd2';
            $config['source_image'] = '/media/uploads/users/' . $this->file['file_name'];
            $config['thumb_marker'] = TRUE;
            $config['x_axis'] = $this->input->post('x');
            $config['y_axis'] = $this->input->post('y');

            $this->image_lib->initialize($config);

            if ( ! $this->image_lib->crop())
            {
                $data['error'] = "We could not crop you image, please try again. If the problem persists please contact us";
                $this->template->build('/admin/users/add', $data);
            }

            $this->session->set_flashdata('success', 'You have successfully added an employer');
            redirect('/admin/users/manage');
        }
    }
}

И функция загрузки, которую JQuery Uploader вызывает

private function upload()
{
    $config['upload_path'] = "./media/uploads/users";
    $config['allowed_types'] = 'gif|jpg|png';
    $config['max_size']    = '1000';
    $config['max_width']  = '1024';
    $config['max_height']  = '768';
    $config['encrypt_name']  = TRUE;

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


    if ( ! $this->upload->do_upload('userfile'))
    {
        $error = array('error' => $this->upload->display_errors());
        die(print_r($error));
    }
    else
    {
        $this->file = $this->upload->data();
        $msg = $this->file;
        echo json_encode($msg);
    }
}

Напомним, я устанавливаю $this->file в upload () и пытаюсь использовать его в функции add ().

Ответы [ 2 ]

1 голос
/ 21 апреля 2011

Вам потребуется return что-то из функции upload(), чтобы использовать это в функции add(). В зависимости от вашего приложения и его настройки это может или не может сломать ваш AJAX.

Альтернативой может быть установка сеанса для нужных вам битов.

0 голосов
/ 22 апреля 2011

$ this-> файл будет только в объеме загрузки. Поэтому, как упомянул Росс, загрузите эхо-изображение в json, а затем сделайте что-нибудь с ним в форме. Как добавить его в скрытый вход, который затем отправляется с данными поста.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...