2011-10-12 1 views
0

Je veux utiliser à partir de l'image de téléchargement multiple dans codeigniter mais le problème est ici que si je ne sélectionne pas l'image pour le téléversement le retour est faux si je ne veux pas d'image pour le télécharger url (juste ignorer d'erreur requis sélectionner le fichier). comment peut-il réparer dans la fonction go_upload?Ignorer l'erreur requise sélectionner le fichier

Ma fonction:

<?php 
function go_upload($field = 'userfile') 
{ 
    $CI =& get_instance(); 
    // Is $_FILES[$field] set? If not, no reason to continue. 
    if (!isset($_FILES[$field]['name'][0])) { 
     $CI->upload->set_error('upload_no_file_selected'); 
     return FALSE; 
    } else { 
     $num_files = count($_FILES[$field]['name']) - 1; 
     $file_list = array(); 
     $error_hold = array(); 
     $error_upload = FALSE; 
    } 

    // Is the upload path valid? 
    if (!$CI->upload->validate_upload_path()) { 
     // errors will already be set by validate_upload_path() so just return FALSE 
     return FALSE; 
    } 

    for ($i = 0; $i < $num_files; $i++) { 
     //   $fname = $_FILES[$field]['name'][$i]; 
     //   echo "$fname\n\n<br><br>\n\n"; 

     $error_hold[$i] = FALSE; 

     // Was the file able to be uploaded? If not, determine the reason why. 
     if (!is_uploaded_file($_FILES[$field]['tmp_name'][$i])) { 
      $error = (!isset($_FILES[$field]['error'][$i])) ? 4 : $_FILES[$field]['error'][$i]; 

      switch ($error) { 
       case 1: // UPLOAD_ERR_INI_SIZE 
        $error_hold[$i] = 'upload_file_exceeds_limit'; 
        break; 
       case 2: // UPLOAD_ERR_FORM_SIZE 
        $error_hold[$i] = 'upload_file_exceeds_form_limit'; 
        break; 
       case 3: // UPLOAD_ERR_PARTIAL 
        $error_hold[$i] = 'upload_file_partial'; 
        break; 
       case 4: // UPLOAD_ERR_NO_FILE 
        $error_hold[$i] = 'upload_no_file_selected'; 
        break; 
       case 6: // UPLOAD_ERR_NO_TMP_DIR 
        $error_hold[$i] = 'upload_no_temp_directory'; 
        break; 
       case 7: // UPLOAD_ERR_CANT_WRITE 
        $error_hold[$i] = 'upload_unable_to_write_file'; 
        break; 
       case 8: // UPLOAD_ERR_EXTENSION 
        $error_hold[$i] = 'upload_stopped_by_extension'; 
        break; 
       default: 
        $error_hold[$i] = 'upload_no_file_selected'; 
        break; 
      } 

      return FALSE; 
     } 

     // Set the uploaded data as class variables 
     $CI->upload->file_temp = $_FILES[$field]['tmp_name'][$i]; 
     $CI->upload->file_name = $CI->upload->file_name = $_FILES[$field]['name'][$i]; 
     $CI->upload->file_size = $_FILES[$field]['size'][$i]; 
     $CI->upload->file_type = preg_replace("/^(.+?);.*$/", "\\1", $_FILES[$field]['type'][$i]); 
     $CI->upload->file_type = strtolower($CI->upload->file_type); 
     $CI->upload->file_ext = $CI->upload->get_extension($_FILES[$field]['name'][$i]); 

     // Convert the file size to kilobytes 
     if ($CI->upload->file_size > 0) { 
      $CI->upload->file_size = round($CI->upload->file_size/1024, 2); 
     } 

     // Is the file type allowed to be uploaded? 
     if (!$CI->upload->is_allowed_filetype()) { 
      $error_hold[$i] = 'upload_invalid_filetype'; 
     } 

     // Is the file size within the allowed maximum? 
     if (!$CI->upload->is_allowed_filesize()) { 
      $error_hold[$i] = 'upload_invalid_filesize'; 
     } 

     // Are the image dimensions within the allowed size? 
     // Note: This can fail if the server has an open_basdir restriction. 
     if (!$CI->upload->is_allowed_dimensions()) { 
      $error_hold[$i] = 'upload_invalid_dimensions'; 
     } 

     // Sanitize the file name for security 
     $CI->upload->file_name = $CI->upload->clean_file_name($CI->upload->file_name); 

     // Remove white spaces in the name 
     if ($CI->upload->remove_spaces == TRUE) { 
      $CI->upload->file_name = preg_replace("/\s+/", "_", $CI->upload->file_name); 
     } 

     /* 
     * Validate the file name 
     * This function appends an number onto the end of 
     * the file if one with the same name already exists. 
     * If it returns false there was a problem. 
     */ 
     $CI->upload->orig_name = $CI->upload->file_name; 

     if ($CI->upload->overwrite == FALSE) { 
      $CI->upload->file_name = $CI->upload->set_filename($CI->upload->upload_path, $CI->upload->file_name); 

      if ($CI->upload->file_name === FALSE) { 
       $error_hold[$i] = TRUE; 
      } 
     } 

     /* 
     * Move the file to the final destination 
     * To deal with different server configurations 
     * we'll attempt to use copy() first. If that fails 
     * we'll use move_uploaded_file(). One of the two should 
     * reliably work in most environments 
     */ 
     if ([email protected]($CI->upload->file_temp, $CI->upload->upload_path . $CI->upload->file_name)) { 
      if ([email protected]_uploaded_file($CI->upload->file_temp, $CI->upload->upload_path . $CI->upload->file_name)) { 
       $error_hold[$i] = 'upload_destination_error'; 
      } 
     } 

     /* 
     * Run the file through the XSS hacking filter 
     * This helps prevent malicious code from being 
     * embedded within a file. Scripts can easily 
     * be disguised as images or other file types. 
     */ 
     if ($CI->upload->xss_clean == TRUE) { 
      $CI->upload->do_xss_clean(); 
     } 

     if ($error_hold[$i]) { 
      $error_upload = TRUE; 

      //    echo $error_hold[$i]; 
     } else { 
      if ($imageVar = $this->multiple_image_properties($CI->upload->upload_path . $CI->upload->file_name)) { 
       $file_list[] = array(
        'name' => $CI->upload->file_name, 
        'file' => $CI->upload->upload_path . $CI->upload->file_name, 
        'size' => $CI->upload->file_size, 
        'ext' => $CI->upload->file_ext, 
        'image_type' => $imageVar->image_type, 
        'height' => $imageVar->height, 
        'width' => $imageVar->width 
       ); 
      } else { 
       $file_list[] = array(
        'name' => $CI->upload->file_name, 
        'file' => $CI->upload->upload_path . $CI->upload->file_name, 
        'size' => $CI->upload->file_size, 
        'type' => $CI->upload->file_type, 
        'ext' => $CI->upload->file_ext 
       ); 
      } 
     } 

     // For debugging 

     /*    
     if (strlen($error_hold[$i]) > 1) { 
     print_r($error_hold); 
     } 
     */ 
    } // end for loop 

    // Add error display for individual files   
    if ($error_upload) { 
     $this->set_error($error_hold); 
     return FALSE; 
    } else { 
     return $file_list; 
    } 
} 
?> 

Mon CI_Controller:

$config['upload_path'] = './uploads/'; // server directory 
$config['allowed_types'] = 'gif|jpg|png'; // by extension, will check for whether it is an image 
$config['max_size'] = '1000'; // in kb 
$config['max_width'] = '1024'; 
$config['max_height'] = '768'; 

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

$files = $this->multi_upload->go_upload();  
if (! $files) 
{ 
    $error = array('error' => $this->upload->display_errors());       
    print_r($error); 
    return false; 
} 
else 
{ 
$data3 = array(); 
foreach ($files as $idx => $name) { 
    //var_dump($name['name']); 
    $data3[] = array(
     'relation' => $query_hi->id, 
     'images' => $name['name'], 
    ); 
}; 
} 
$this->db->insert_batch('hotel_image', $data3); 
redirect('admin/residence/insert'); 

Répondre

0

Je voudrais essayer de jeter un oeil à ce que à l'intérieur de la.

$_FILES 

Array, c'est-à-dire le tableau que php démarre lorsqu'un forum de post a également une image. Si votre contrôleur vérifie là pour s'assurer qu'il y a une image ou pas devrait être un bon moyen d'éviter cette erreur.

+0

Eh bien, je n'ai pas toujours sélectionner le fichier, je sélectionne parfois le fichier qui a 'return true;' et parfois ne sélectionne pas le fichier qui a 'return false;', maintenant que dois-je faire dans chaque deux 'return vrai, mais il y a erreur? –

Questions connexes