8797 sujets

Développement web côté serveur, CMS

Pages :
Bonjour à tous !

Je suis en train de créer un backoffice pour une personne, dans lequel il peut rajouter des news avec un fichier joint.

L'import de pdf marche parfaitement seulement les fichiers Zip ne s'importe pas... Dans mon controller j'ai :

$config['upload_path'] = './statics/contenus/';
$config['allowed_types'] = 'pdf|zip';
$config['max_size']	= '2000';
$config['encrypt_name'] = 'TRUE';


Mais même quand je laisse juste 'zip' au lieu de 'pdf|zip' ça ne marche pas...
(les fichiers zip que j'importe sont plus petit que la taille maximum autorisé, donc ça ne vient pas de là)

Quelqu'un pourrait m'aider s'il vous plais... Smiley decu

Merci d'avance !
Modifié par walid01300 (04 Apr 2011 - 13:29)
ajoute ceci dans ton controlleur, ça pourra te mettre sur la piste :

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

			var_dump($error); exit;
		}
Ca ne m'affiche rien.. Je pense que je n'y ai pas mis au bon endroit.
En fait lors de l'ajout il me l'ajoute le fichier zip.

Par contre quand je clique sur le lien qui est censé me rediriger vers ce fichier dans l'url j'ai :
http://blablablabla.com/statics/contenus/0

Alors que quand j'ajoute un pdf l'url est :
http://blablablabla.com/statics/contenus/2108300212.pdf


Voilà mon controllers :



class News extends Controller {

	function __construct()
	{
		parent::Controller();
		$this->load->library('eggcetera');	
	}
	
	function index()
	{
		$data = array();
		$data['title'] = 'Les news';
		$data['template'] = 'back/news/list';
		
		$this->load->model('Mnew');
		$data['news'] = $this->Mnew->get_news();
		
		$this->load->view('template_back', $data);
	}
	
	function ajouter()
	{
		$data = array();
		
		/* Informations de la page */
		$data['title'] = "Ajouter une new";
		
		/* Template à afficher */
		$data['template'] = "back/news/add";
		
		/* Vérification du post */
		$title = trim($this->input->post('title'));
		$content = trim($this->input->post('content'));
		
		$this->form_validation->set_rules('title', '"Titre"', 'trim|required');
		$this->form_validation->set_rules('content', '"Contenu"', 'trim|required');
		
		/* Insertion dans la base de données  */
		if($this->form_validation->run())
		{
			$this->load->model('Mnew');
			
			$path_to_file = false;
			
			$config['upload_path'] = './statics/contenus/';
			$config['allowed_types'] = 'zip';
			$config['max_size']	= '2000';
			$config['encrypt_name'] = 'TRUE';
			
			$this->load->library('upload', $config);
			
			if ($this->upload->do_upload()) {
				$data = array('upload_data' => $this->upload->data());
				
				/* envoi fichier */
				$result = $this->upload->data();
				
				/* inscription dans la BDD */
				$path_to_file = $result['file_name'];
			}
			
			$this->Mnew->insert_new($title, $content, $path_to_file);
			redirect('administration');
		}
		
		/* Chargement de la page */
		else
		{
			$this->load->view('template_back', $data);
		}
	}
	
	function modifier($id)
	{
		$data = array();
		
		/* Informations de la page */
		$data['title'] = "Modifier une new";
		
		/* Template à afficher */
		$data['template'] = "back/news/modify";
		
		/* Vérification pré-modification */
		$this->load->model('Mnew');
		$new = $this->Mnew->get_new_by_id($id);
		
		if($new !== false)
		{
		
			/* Contenu à transférer */
			$data['new'] = $new;
		
			/* Vérification du post */
			$title = trim($this->input->post('title'));
			$content = trim($this->input->post('content'));
			
			$this->form_validation->set_rules('title', '"Titre"', 'trim|required');
			$this->form_validation->set_rules('content', '"Contenu"', 'trim|required');
			
			/* Chargement de la page */
			if($this->form_validation->run())
			{
				
				$path_to_file = $new->file;
			
				$config['upload_path'] = './statics/contenus/';
				$config['allowed_types'] = 'zip';
				$config['max_size']	= '2000';
				$config['encrypt_name'] = 'TRUE';
				
				$this->load->library('upload', $config);
				
				if ($this->upload->do_upload()) {
					$data = array('upload_data' => $this->upload->data());
					
					/* envoi fichier */
					$result = $this->upload->data();
					
					/* inscription dans la BDD */
					$path_to_file = $result['file_name'];
				}
			
				$new->update($title, $content, $path_to_file);
				redirect('administration');
			}
			
			
			else
			{
				$this->load->view('template_back', $data);
			}
		
		}
	}
	
	function supprimer($id)
	{
		$data = array();
		
		/* Vérification pré-suppression */
		$this->load->model('Mnew');
		$new = $this->Mnew->get_new_by_id($id);
		
		if($new !== false)
		{
			$new->delete();
		}
		
		redirect('administration');
	}
}





Help please.... Smiley decu
3 choses que j'essayerai :

1 - verifier que le nom de l'input dans le formulaire est bien "userfile" (c'est le nom par défaut attendu par CI). à défaut utiliser $this->upload->do_upload("nom_du_champ"); à la place de $this->upload->do_upload();

2 - supprimer $config['encrypt_name'] = 'TRUE'; dans la config et retester

3 - ajouter un else après l'upload comme suit :

if ($this->upload->do_upload()) { 
	$data = array('upload_data' => $this->upload->data()); 

	/* envoi fichier */ 
	$result = $this->upload->data(); 

	/* inscription dans la BDD */ 
	$path_to_file = $result['file_name']; 
} else {
	$error = array('error' => $this->upload->display_errors());
	var_dump($error);
	exit;
}


Tiens nous au courant Smiley smile
J'ai fait tout ce que tu m'a dis... mais toujours rien lol et ça m'affiche aucune erreur...
Quand je crée la news sa l'ajoute sans aucun soucis mais dans la base de donné sa n'ajoute rien sa met "0" c'est tout.. Smiley decu Smiley decu
Ah si sa y est j'ai une erreur !


array(1) { ["error"]=> string(64) "
The filetype you are attempting to upload is not allowed.

" }


Pourtant j'ai regardé dans le fichier mimes, et "zip" il y est..
Ca pourrait venir de l'encodage de ton fichier zip...

vire le "zip" dans les accepted file types pour voir.
fait aussi un var_dump($_FILES) pour voir le contenu... doit y avoir un truc
Modifié par Nukleo (01 Apr 2011 - 15:28)
tu peux aussi essayer d'utiliser une config minimale... c'est à dire

$config['upload_path'] = './statics/contenus/';

et rien d'autre... test pour voir si ca passe.

J'ai eu pas mal de soucis avec cette classe dans le passé (notamment avec $config['file_name'])
C'est vrai que c'est un peu la m....

En mettant juste ce que tu m'a dis j'ai :

array(1) { ["error"]=> string(117) "
You have not specified any allowed file types.

The filetype you are attempting to upload is not allowed.

" }


... Je comprend pas pourquoi, parce que si à la place de zip dans allowed types je met pdf ça marche. Et les deux sont dans le fichier mimes.. c'est pas normal ça..
Après un peu de googlage sur les forums de CI je tenterais ceci :

- ouvre le fichier config/mimes.php
change la ligne 54 de
'zip'	=>  array('application/x-zip', 'application/zip', 'application/x-zip-compressed'),

à
'zip'	=>  array('application/x-zip', 'application/zip', 'application/x-zip-compressed', '"application/x-zip"'),


et retest
et en changeant ta config de

$config['upload_path'] = './statics/contenus/'; 
$config['allowed_types'] = 'zip'; 
$config['max_size']    = '2000'; 
$config['encrypt_name'] = 'TRUE';

à

$config['upload_path'] = './statics/contenus/';

ca donne quoi ?
Bon en repartant de ta config de base on va essayer autre chose :

if ($this->upload->do_upload()) {  
    $data = array('upload_data' => $this->upload->data());  
 
    /* envoi fichier */  
    $result = $this->upload->data();  
 
    /* inscription dans la BDD */  
    $path_to_file = $result['file_name'];  
} else {  
    var_dump($this->upload->data()); 
    exit; 
} 

qu'est ce qu'il te dis la ?
autre piste à suivre... au début de ton controlleur :
var_dump($_FILES); exit; 

tu peux me montrer le resultat ?
Modifié par Nukleo (01 Apr 2011 - 16:51)
Je suis vraiment désolé je viens de finir le travail, et je n'ai pas accès au ftp de l'agence... On continu Lundi si ça ne te dérange pas.. ? Smiley confus

En tout cas c'est vraiment sympa de ta part...
La première chose que tu m'a dis d'essayer voilà ce que ça m'a mis :

array(13) { ["file_name"]=> string(6) "js.zip" ["file_type"]=> string(24) "application/octet-stream" ["file_path"]=> string(45) "/nfs/www/pimentsauvage/test/statics/contenus/" ["full_path"]=> string(51) "/nfs/www/pimentsauvage/test/statics/contenus/js.zip" ["raw_name"]=> string(2) "js" ["orig_name"]=> string(0) "" ["file_ext"]=> string(4) ".zip" ["file_size"]=> float(26.1) ["is_image"]=> bool(false) ["image_width"]=> string(0) "" ["image_height"]=> string(0) "" ["image_type"]=> string(0) "" ["image_size_str"]=> string(0) "" }


Et le dernier post que tu as mis, je dois le mettre au début du controller ou au début de la fonction ajouter ?

Ca me met ca : array(0) { } ..
Salut Walid,
j'ai fait un peu de recherches ce weekend et j'ai découvert que le problème (à priori) vient du fait que différents navigateurs envoyent différents types mimes pour un fichier zip et que CI ne tiens pas compte de tous.
En l'occurence en regardant la sortie du 1er var_dump() il t'indique ["file_type"]=> string(24) "application/octet-stream", hors ca ne fait pas partie des mime types de CI par défaut Smiley smile

Bref, modifie à nouveau le fichier config/mimes.php -> ligne 54 (pour les fichiers ZIP) en prenant soin que l'array de valeurs possibles contienne les valeurs suivantes :

application/zip
application/x-zip
application/x-zip-compressed
application/octet-stream
application/x-compress
application/x-compressed
multipart/x-zip

Normalement ca devrait fonctionner Smiley smile
Pages :