Question

Publier:

Bonjour,

J'ai une page d'édition qui permet au client de mettre à jour les informations de vente, ce que je voudrais faire, c'est que si une nouvelle image n'est pas téléchargée, elle gardera l'original mais si une nouvelle image est téléchargée, elle supprimera l'ancienne image de l'ancienne database row et unlink le fichier du serveur,

Mais je ne sais pas comment travailler dans mon code ci-dessous. Comment faire également le champ de fichier non requis?

Mise à jour:

Ross,

J'ai fait ce qui suit, mais si l'image est erronée, je reçois toujours la vente à jour + le message, comment pourrais-je avoir l'erreur que lorsque c'est nécessaire?

<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');

class Editsale extends CI_Controller {

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

    }

    function index() {
    echo 'index';
    $id = $this->uri->segment(4);
    # Set Main Page Data
        $data['title'] = 'Edit Sale:';
        $data['sales_pages'] = $this->sales_model->getSalesPages();
        $data['cms_pages'] = $this->navigation_model->getCMSPages();
        $data['sale']= $this->sales_model->getSalesContent($id);

         #Set The Validation Rules
                $this->form_validation->set_rules('name', 'Name', 'trim|required|xss_clean');
                $this->form_validation->set_rules('location', 'Location', 'trim|required|xss_clean');
                $this->form_validation->set_rules('bedrooms', 'Bedrooms', 'trim|numeric|required|xss_clean');
                $this->form_validation->set_rules('bathrooms', 'Bathrooms', 'trim|numeric|required|xss_clean');
                $this->form_validation->set_rules('condition', 'Condition', 'trim|required|xss_clean');
                $this->form_validation->set_rules('description', 'Description', 'trim|required|xss_clean');
                $this->form_validation->set_rules('price', 'Price', 'trim|required|xss_clean');

                if($this->form_validation->run()) #If Valid Run
                {
                    $content = array(   
                        'name' => $this->input->post('name', TRUE), 
                        'location' => $this->input->post('location', TRUE), 
                        'bedrooms' => $this->input->post('bedrooms', TRUE), 
                        'bathrooms' => $this->input->post('bathrooms', TRUE), 
                        'condition' => $this->input->post('condition', TRUE), 
                        'description' => $this->input->post('description', TRUE), 
                        'price' => $this->input->post('price', TRUE)
                    );

                    if($_FILES['userfile']['error'] != 4) 
                    {  
                        //Set File Settings 
                        $config['upload_path'] = 'includes/uploads/sales/'; 
                        $config['allowed_types'] = 'jpg|png'; 
                        $config['remove_spaces'] = TRUE ;
                        $config['overwrite'] = TRUE;
                        $config['max_size'] = '1024';
                        $config['max_width'] = '1024'; 
                        $config['max_height'] = '768'; 

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

                        //Continue and resize the image
                        $data = array('upload_data' => $this->upload->data());

                        $config['image_library'] = 'GD2';
                        $config['source_image'] = $this->upload->upload_path.$this->upload->file_name;
                        $config['new_image'] = 'includes/uploads/sales/thumbs/';
                        $config['create_thumb'] = 'TRUE';
                        $config['thumb_marker'] ='_thumb';
                        $config['maintain_ratio'] = 'FALSE';
                        $config['width'] = '200';
                        $config['height'] = '150';

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

                        if(!$this->upload->do_upload()) //Process the upload function and uploads image
                        {
                            $data['message'] = array('imageError' => $this->upload->display_errors()); // Capture any $config errors and output them
                        }
                        else
                        {

                            $file_info = $this->upload->data(); //Returns an data array 

                            // Append image data to content array in preparation for db update
                            $content['imagename'] = $file_info['file_name'];
                            $content['thumbname'] = $file_info['raw_name'].'_thumb'.$file_info['file_ext'];
                        }   
                    }   

                    // After everything, update DB

                    if($this->sales_model->updateSale($id, $content))
                    {
                        $data['success'] = TRUE;
                    }
                    else
                    {
                        $data['success'] = FALSE;
                    }


             } # End Form Validation
        $data['cms_pages'] = $this->navigation_model->getCMSPages();
        $data['sales_pages'] = $this->sales_model->getSalesPages($id);
        $data['sale']= $this->sales_model->getSalesContent($id);
        $data['content'] = $this->load->view('admin/editsale', $data, TRUE); #Loads the "content"
        $this->load->view('admintemplate', $data); #Loads the given template and passes the $data['content'] into it   

    } # End Index Function
} # End Controller

Voir:

<?php
//Setting form attributes
$formEditSale = array('id' => 'editSale', 'name' => 'editSale');
$formEditSaleName = array('id' => 'name', 'name' => 'name');
$formEditSaleLocation = array('id' => 'location', 'name' => 'location');
$formEditSaleBedrooms = array('id' => 'bedrooms','name' => 'bedrooms');
$formEditSaleBathrooms = array('id' => 'bathrooms','name' => 'bathrooms');
$formEditSaleCondition = array('id' => 'condition','name' => 'condition');
$formEditSaleImage = array('id' => 'userfile', 'name'=> 'userfile');
$formEditSalePrice = array('id' => 'price','name' => 'price');
$formEditSaleDescription = array('id' => 'description','name' => 'description');
$formEditSaleSubmit = array('id' => 'submit', 'name'=> 'submit');
?>

<div id ="formLayout" class="form">
    <?php
    if($success == TRUE) {
    echo '<section id = "validation">Sale Updated</section>';   
    }

    echo '<section id = "validation">'.$message['imageError'].'</section>';
    ?>
    <h4>You are editing sale: <?= $sale[0]['name']; ?></h4>
<?php echo form_open_multipart('admin/editsale/index/'.$sale[0]['id'].'/'.url_title($sale[0]['name'],'dash', TRUE),$formEditSale); ?>
<?php echo form_fieldset(); ?>

<label><?php echo form_label('Name:','name'); ?> <span class="small">Required Field - Text</span></label>
<?php echo form_input($formEditSaleName, $sale[0]['name']); ?>
<div id="error"><?php echo form_error('name'); ?></div>

<label><?php echo form_label('Location:','location');?> <span class="small">Required Field - Text</span></label>
<?php echo form_input($formEditSaleLocation, $sale[0]['location']);?>
<div id="error"><?php echo form_error('location'); ?></div>

<label><?php echo form_label('Bedrooms: ','bedrooms');?> <span class="small">Required Field - Number</span></label>
<?php echo form_input($formEditSaleBedrooms, $sale[0]['bedrooms']);?>
<div id="error"><?php echo form_error('bedrooms'); ?></div>

<label><?php echo form_label('Bathrooms: ','bathrooms');?> <span class="small">Required Field - Number</span></label>
<?php echo form_input($formEditSaleBathrooms, $sale[0]['bathrooms']);?>
<div id="error"><?php echo form_error('bathrooms'); ?></div>

<label><?php echo form_label('Condition: ','condition');?> <span class="small">Required Field - Text</span></label>
<?php echo form_input($formEditSaleCondition, $sale[0]['condition']);?>
<div id="error"><?php echo form_error('condition'); ?></div>

<label><?php echo form_label('Price: ','price');?> <span class="small">Required Field - Number</span></label>
<?php echo form_input($formEditSalePrice, $sale[0]['price']);?>
<div id="error"><?php echo form_error('price'); ?></div>

<label><?php echo form_label('Image: ','userfile');?> <span class="small">1MB Max JPG/PNG</span></label>
<?php echo form_upload($formEditSaleImage);?>
<div id="error"><?php echo form_error('userfile'); ?></div>

<label><?php echo form_label('Description: ','description');?> <span class="small">Required Field - Text</span></label>
<div id="error"><?php echo form_error('description'); ?></div>
<?php echo form_textarea($formEditSaleDescription, $sale[0]['description']);?>
<script type="text/javascript">CKEDITOR.replace('description');</script>

<?php echo form_submit($formEditSaleSubmit,'Submit Edit');?>
<?php echo form_fieldset_close(); ?>
<?php echo form_close(); ?>
</div>

Manette:

<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');

class Editsale extends CI_Controller {

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

    }

    function index() {
    $id = $this->uri->segment(4);
    # Set Main Page Data
        $data['title'] = 'Edit Sale:';
        $data['sales_pages'] = $this->sales_model->getSalesPages();
        $data['cms_pages'] = $this->navigation_model->getCMSPages();
        $data['sale']= $this->sales_model->getSalesContent($id);

         #Set The Validation Rules
                $this->form_validation->set_rules('name', 'Name', 'trim|required|xss_clean');
                $this->form_validation->set_rules('location', 'Location', 'trim|required|xss_clean');
                $this->form_validation->set_rules('bedrooms', 'Bedrooms', 'trim|numeric|required|xss_clean');
                $this->form_validation->set_rules('bathrooms', 'Bathrooms', 'trim|numeric|required|xss_clean');
                $this->form_validation->set_rules('condition', 'Condition', 'trim|required|xss_clean');
                $this->form_validation->set_rules('description', 'Description', 'trim|required|xss_clean');
                $this->form_validation->set_rules('price', 'Price', 'trim|required|xss_clean');

                if($this->form_validation->run())
                {
                //Set File Settings 
                $config['upload_path'] = 'includes/uploads/sales/'; 
                $config['allowed_types'] = 'jpg|png'; 
                $config['remove_spaces'] = TRUE;
                $config['overwrite'] = TRUE;
                $config['max_size'] = '1024';
                $config['max_width'] = '1024'; 
                $config['max_height'] = '768'; 

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

                if(!$this->upload->do_upload())
                {
                    $data['message'] = array('imageError' => $this->upload->display_errors());
                }
                else{
                        $data = array('upload_data' => $this->upload->data());
                        $data['success'] = TRUE;
                        $config['image_library'] = 'GD2';
                        $config['source_image'] = $this->upload->upload_path.$this->upload->file_name;
                        $config['new_image'] = 'includes/uploads/sales/thumbs/';
                        $config['create_thumb'] = 'TRUE';
                        $config['thumb_marker'] ='_thumb';
                        $config['maintain_ratio'] = 'FALSE';
                        $config['width'] = '200';
                        $config['height'] = '150';

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

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

                    #Lets Set What We Are Sending To The DB
                $this->db->escape($content);

                $content = array(   
                    'name' => $this->input->post('name', TRUE), 
                    'location' => $this->input->post('location', TRUE), 
                    'bedrooms' => $this->input->post('bedrooms', TRUE), 
                    'bathrooms' => $this->input->post('bathrooms', TRUE), 
                    'condition' => $this->input->post('condition', TRUE), 
                    'description' => $this->input->post('description', TRUE), 
                    'price' => $this->input->post('price', TRUE), 
                    'imagename' => $file_info['file_name'],
                    'thumbname' => $file_info['raw_name'].'_thumb'.$file_info['file_ext']
                );          

                   $this->sales_model->updateSale($id, $content);

                   }# else end

             } # End Form Validation
        $data['cms_pages'] = $this->navigation_model->getCMSPages();
        $data['sales_pages'] = $this->sales_model->getSalesPages($id);
        $data['sale']= $this->sales_model->getSalesContent($id);
        $data['content'] = $this->load->view('admin/editsale', $data, TRUE); #Loads the "content"
        $this->load->view('admintemplate', $data); #Loads the given template and passes the $data['content'] into it   
    } # End Index Function
} # End Controller

Modèle:

function updateSale($id, $content) {
            $this ->db->where('id', $id);  
            $update = $this->db->get('sales');
            $row = $update->row_array();
            if($update->num_rows() > 0) {
                #lets delete the image
                unlink("/includes/uploads/gallery/".$row['imagename']);
                #lets delete the thumb.
                unlink("/includes/uploads/gallery/thumbs/".$row['thumbname']);

                $this->db->update('sales', $content);
            } # End IF
        } # End Update

Pas de solution correcte

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top