IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
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

MkFramework Discussion :

Importer dans deux tables de ma base mysql depuis csv


Sujet :

MkFramework

  1. #21
    Membre régulier
    Homme Profil pro
    Enseignant
    Inscrit en
    Mars 2013
    Messages
    201
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Mars 2013
    Messages : 201
    Points : 75
    Points
    75
    Par défaut
    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
    Avatar de imikado
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2006
    Messages
    5 239
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Finance

    Informations forums :
    Inscription : Décembre 2006
    Messages : 5 239
    Points : 19 100
    Points
    19 100
    Billets dans le blog
    17
    Par défaut
    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
    Homme Profil pro
    Enseignant
    Inscrit en
    Mars 2013
    Messages
    201
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Mars 2013
    Messages : 201
    Points : 75
    Points
    75
    Par défaut
    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
    Homme Profil pro
    Enseignant
    Inscrit en
    Mars 2013
    Messages
    201
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Mars 2013
    Messages : 201
    Points : 75
    Points
    75
    Par défaut
    message supprimé

  5. #25
    Rédacteur
    Avatar de imikado
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2006
    Messages
    5 239
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Finance

    Informations forums :
    Inscription : Décembre 2006
    Messages : 5 239
    Points : 19 100
    Points
    19 100
    Billets dans le blog
    17
    Par défaut
    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 !=''):?>
    <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
    Homme Profil pro
    Enseignant
    Inscrit en
    Mars 2013
    Messages
    201
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Mars 2013
    Messages : 201
    Points : 75
    Points
    75
    Par défaut
    SUPER!
    Tout marche bien.
    Encore merci et passez de bonne fête de fin d'année.

+ Répondre à la discussion
Cette discussion est résolue.
Page 2 sur 2 PremièrePremière 12

Discussions similaires

  1. Réponses: 8
    Dernier message: 15/02/2014, 01h30
  2. Réponses: 0
    Dernier message: 28/06/2013, 19h10
  3. Réponses: 9
    Dernier message: 07/06/2011, 23h24
  4. Insertion croisée dans deux tables mysql
    Par tiger33 dans le forum Requêtes
    Réponses: 6
    Dernier message: 19/09/2006, 08h55
  5. Jointure de tables sur 2 base MySQL, si poussible??
    Par nerik38 dans le forum Requêtes
    Réponses: 2
    Dernier message: 21/11/2005, 20h12

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo