Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

  1. #21
    Membre régulier
    j'ai pu avancé un peu, ça a débloqué certaines choses.

    j'ai une erreur qui me dit que la variable $id_classe n'est pas défini ligne 89
    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    <?php 
    class module_importcsv extends abstract_module{
    	public function before(){
    		$this->oLayout=new _layout('templateAdmin');
     
    		$this->oLayout->addModule('menu','menu::left');
    	}
    	public function after(){
    		$this->oLayout->show();
    	}
     
    	public function _index(){
    	    $this->_import();
    	}
     
     
    	public function _import(){ 
     
    		$this->processImport();
     
    		$oView=new _view('importcsv::upload');
     
    		$this->oLayout->add('main',$oView);
    	}
     
    	public function processImport(){
     
    		if(!_root::getRequest()->isPost() ){ //si ce n'est pas une requete POST on ne soumet pas
    			return null;
    		}
     
    		$sColumn='importFile';
    		$oPluginUpload=new plugin_upload($sColumn);
     
    		if($oPluginUpload->isValid()){
    		$sFilename='../data/upload/'.$sColumn.'_'.date('Ymdhis');
     
    		$oPluginUpload->saveAs($sFilename);
     
     		$tLine=file($oPluginUpload->getPath() );
    			//boucle sur le fichier csv
    			foreach($tLine as $i => $sLine){
     
    				if($i==0){
    					//on ignore la premiere ligne si c'est l'entete 
    					continue;
    				}
    				//pour chaque ligne on découpe avec le caractère ";" pour recuperer nos 6 colonnes dans des variables:
    				list($sLastname,$sName,$sLogin,$sClassname,$sSession,$sAtelier_id)=explode(';',trim($sLine));
     
    				//ensuite on passe au traitement
     
    				//on verifie si l'eleve existe deja
    				$oEleveInDatabase=model_users::getInstance()->findByNameAndLastName($sName,$sLastname );
    				if($oEleveInDatabase){
    					$id_eleve=$oEleveInDatabase->id;
    				}else{
    					//l'eleve existe pas : on le cree
    					$oEleve=new row_users();
    					$oEleve->prenom=$sName;
    					$oEleve->nom=$sLastname;
    					$oEleve->login=$sLogin;
    					$oEleve->statut_id=1;// "1" étant le status élève de l'User
    					$oEleve->save();
     
    					//sous mysql et sql server, le champ de l'id va etre mis a jour dans l'objet
    					$id_eleve=$oEleve->id;
    				}
     
    				//on verifie si la classe existe
    				$oClassesInDatabase=model_classes::getInstance()->findByName($sClassname);
    				if($oClassesInDatabase){
    					$id_classe=$oClassesInDatabase->id;
    				}
    				else
    				{
    					//la classe n'existe pas on la cree
    					$oClasses=new row_classes;
    					$oClasses->nom=$sClassname;
    					$oClasses->session=$sSession;
    					$oClasses->atelier_id=$sAtelier_id;
    					$oClasses->save();
    				}
     
     
    				//on ajoute le lien entre l'eleve et la classe
    				$oClassesUsers=new row_classesUsers;
    				$oClassesUsers->user_id=$id_eleve;
    				$oClassesUsers->classe_id=$id_classe;
    				$oClassesUsers->save();	 
    			} 
    		}	
    	}
    }


    Puis j'ai un bug m'empêchent de charger le fichier:
    • au formulaire je sélectionné mon fichier depuis l'ordi
    • je clic sur charger
    • et là une alerte me dit aucun fichier sélectionné
    • je contrôle et il est bien dans /data/upload

    il m'a fait ce coup il y a une heure (j'avais pensé à un bug du moment puis qu’après ça a passé)

  2. #22
    Rédacteur

    Pour l'id_classe, il manque sa recuperation dans le cas d'une création
    Code php :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
     
    				//on verifie si la classe existe
    				$oClassesInDatabase=model_classes::getInstance()->findByName($sClassname);
    				if($oClassesInDatabase){
    					$id_classe=$oClassesInDatabase->id;
    				}
    				else
    				{
    					//la classe n'existe pas on la cree
    					$oClasses=new row_classes;
    					$oClasses->nom=$sClassname;
    					$oClasses->session=$sSession;
    					$oClasses->atelier_id=$sAtelier_id;
    					$oClasses->save();
     
    					//recuperation id classe si ajoutee
    					$id_classe=$oClasses->id;
    				}



    Pour le second point, je pense que cela vient du fait qu'on reste sur la page, il faudrait simplement ajouter une redirection en cas de fin d'upload
    ajouter à la fin de la méthode processImport un
    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    die('Fichier bien importe');


    pour confirmer

    si c'est bien le cas, que souhaitez vous faire une fois le fichier importé ? afficher un message sur la meme page pour indiquer que le fichier a bien été importé ou rediriger sur une autre page pour ne plus avoir le bouton d'upload ?
    Framework php sécurisé et simple à prendre en main avec générateur web http://mkframework.com/ (hebergé sur developpez.com)
    Mes cours/tutoriaux

  3. #23
    Membre régulier
    Pour répondre à la question de une fois le fichier importé, je préfèrerai rester sur la même page avec une info qui signale que tout s'est bien passé. j'ai misà la fin de la méthode processImport
    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    die('Le fichier a bien était importé <a href="../public">RETOUR ACCUEIL</a>');

    Mais c'est pas très propre car je passe par une page blanche avec cette unique phrase"Le fichier a bien était importé RETOUR ACCUEIL" ça donne l'impression qu'on est sortie de l'application.

  4. #24
    Membre régulier
    message supprimé

  5. #25
    Rédacteur

    Le die était juste pour confirmer

    Vous pouvez soit rediriger sur une autre page en
    remplaçant le die par un
    Code php :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
     
    _root::redirect('importcsv::uploadSucceed');

    Et ajouter une action _uploadSucceed à votre module pour afficher un message de confirmation
    Code php :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    	public function _uploadSucceed(){
    		$oView=new _view('importcsv::uploadSucceed');
     
    		$this->oLayout->add('main',$oView);
    	}

    Et une vue importcsv/view/uploadSucceed.php
    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
     
    <p>Import trait&eacute; avec succ&egrave;s</p>
    <p><a href="../public">RETOUR ACCUEIL</a></p>



    OU

    2 ème solution: vous pouvez rester sur la même page avec un message en vert confirmant l'import, pour cela il faudrait que la méthode processImport retourne un message sur l'import

    Modifiez ainsi:
    Code php :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
     
    	public function _import(){ 
     
    		//on recupere le retour de l'import
    		$sMessage=$this->processImport();
     
    		$oView=new _view('importcsv::upload');
    		//on communique le message a la vue
    		$oView->sMessage=$sMessage;
     
    		$this->oLayout->add('main',$oView);
    	}
     
    	public function processImport(){
     
    		if(!_root::getRequest()->isPost() ){ //si ce n'est pas une requete POST on ne soumet pas
    			return null;
    		}
     
    		$sColumn='importFile';
    		$oPluginUpload=new plugin_upload($sColumn);
     
    		if($oPluginUpload->isValid()){
    		$sFilename='../data/upload/'.$sColumn.'_'.date('Ymdhis');
     
    		$oPluginUpload->saveAs($sFilename);
     
     		$tLine=file($oPluginUpload->getPath() );
    			//boucle sur le fichier csv
    			foreach($tLine as $i => $sLine){
     
    				if($i==0){
    					//on ignore la premiere ligne si c'est l'entete 
    					continue;
    				}
    				//pour chaque ligne on découpe avec le caractère ";" pour recuperer nos 6 colonnes dans des variables:
    				list($sLastname,$sName,$sLogin,$sClassname,$sSession,$sAtelier_id)=explode(';',trim($sLine));
     
    				//ensuite on passe au traitement
     
    				//on verifie si l'eleve existe deja
    				$oEleveInDatabase=model_users::getInstance()->findByNameAndLastName($sName,$sLastname );
    				if($oEleveInDatabase){
    					$id_eleve=$oEleveInDatabase->id;
    				}else{
    					//l'eleve existe pas : on le cree
    					$oEleve=new row_users();
    					$oEleve->prenom=$sName;
    					$oEleve->nom=$sLastname;
    					$oEleve->login=$sLogin;
    					$oEleve->statut_id=1;// "1" étant le status élève de l'User
    					$oEleve->save();
     
    					//sous mysql et sql server, le champ de l'id va etre mis a jour dans l'objet
    					$id_eleve=$oEleve->id;
    				}
     
    				//on verifie si la classe existe
    				$oClassesInDatabase=model_classes::getInstance()->findByName($sClassname);
    				if($oClassesInDatabase){
    					$id_classe=$oClassesInDatabase->id;
    				}
    				else
    				{
    					//la classe n'existe pas on la cree
    					$oClasses=new row_classes;
    					$oClasses->nom=$sClassname;
    					$oClasses->session=$sSession;
    					$oClasses->atelier_id=$sAtelier_id;
    					$oClasses->save();
    				}
     
     
    				//on ajoute le lien entre l'eleve et la classe
    				$oClassesUsers=new row_classesUsers;
    				$oClassesUsers->user_id=$id_eleve;
    				$oClassesUsers->classe_id=$id_classe;
    				$oClassesUsers->save();	 
    			} 
    		}
    		return 'Import géré avec succès';
    	}


    et ajoutez dans votre vue view/upload.php le code suivant:
    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
     
    <?php if($this->sMessage !='')<img src="images/smilies/icon_confused.gif" border="0" alt="" title=":?" class="inlineimg" />>
    <p style="color:darkgreen"><?php echo $this->sMessage;?></p>
    <?php endif;?>
    Framework php sécurisé et simple à prendre en main avec générateur web http://mkframework.com/ (hebergé sur developpez.com)
    Mes cours/tutoriaux

  6. #26
    Membre régulier
    SUPER!
    Tout marche bien.
    Encore merci et passez de bonne fête de fin d'année.

###raw>template_hook.ano_emploi###