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 :

Création de plusieurs enregistrements sur une vue


Sujet :

MkFramework

  1. #21
    Membre régulier
    Femme Profil pro
    Étudiant
    Inscrit en
    Septembre 2015
    Messages
    304
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Gabon

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2015
    Messages : 304
    Points : 107
    Points
    107
    Par défaut
    J'ai pu reprendre tout ca sur la vue 'new' et j'ai ajouté le bouton enregistrer de type submit
    Nom : Sans titre.png
Affichages : 70
Taille : 8,3 Ko
    A la soumission du formulaire plutot que de faire un simple processSave() j'ai crée une nouvelle fonction 'processSaveMulti()' inspirée de 'processListSaveMulti()' Et voilà c'est ici que je ne sais plus quoi faire.
    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
     
     
    	private function processSaveMulti(){
    		if(!_root::getRequest()->isPost() ){ //si ce n'est pas une requete POST on ne soumet pas
    			return null;
    		}
     
    		$oPluginXsrf=new plugin_xsrf();
    		if(!$oPluginXsrf->checkToken( _root::getParam('token') ) ){ //on verifie que le token est valide
    			return array('token'=>$oPluginXsrf->getMessage() );
    		}
     
    		$tMessage=array();
    		$bSave=true;
     
    		$tPost=_root::getRequest()->getParams();
     
    		// A VERIFIER
                    //ici je crée un seul objet alors que je devrait en créer autant d'objet que de lignes présentes dans le formulaire. Comment faire?
    		$oCandidats_langues = new row_candidats_langues();
     
    		$tColumn=array('langue_id','niveau');
    		foreach($tColumn as $sColumn){
    			$oCandidats_langues->$sColumn=_root::getParam($sColumn,null) ;
    		}
     
    		if($oCandidats_langues->isvalid()){
    			//une fois objet valide on sauvegarde en session et on redirige
                             $_SESSION['oCandidats_langues'] = $oCandidats_langues;
    			_root::redirect('MultiLangues::list');
    		}else{
    			return $oCandidats_langues->getListError();
    		}
     
    	}

    Peux-tu me débloquer stp!?

  2. #22
    Membre régulier
    Femme Profil pro
    Étudiant
    Inscrit en
    Septembre 2015
    Messages
    304
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Gabon

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2015
    Messages : 304
    Points : 107
    Points
    107
    Par défaut
    personne n'a de solution pour ce cas?

  3. #23
    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
    Plutot:
    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
    private function processSaveMulti(){
    		$tMessage=array();
    		$bSave=true;
     
    		$tPost=_root::getRequest()->getParams();
     
    		$tId=_root::getParam('pkey',null);
    		foreach($tId as $key => $id){
     
    			// A VERIFIER
                //ici je crée un seul objet alors que je devrait en créer autant d'objet que de lignes présentes dans le formulaire. Comment faire?
    			$oCandidats_langues = new row_candidats_langues();
     
    			$tColumn=array('langue_id','niveau');
    			foreach($tColumn as $sColumn){
    				$oCandidats_langues->$sColumn=_root::getParam($sColumn,null) ;
    			}
     
     
    			if(!$oCandidats_langues->save()){
    				$tMessage[$key]=$oContact->getListError();
    				$bSave=false;
    			}else{
    				$_SESSION['oCandidats_langues'][] = $oCandidats_langues;
    			}
    		}
     
    		if($bSave){
    			//une fois enregistre on redirige (vers la page liste)
    			_root::redirect('MultiLangues::list');
    		}else{
    			return $tMessage;
    		}
    	}
    Framework php sécurisé et simple à prendre en main avec générateur web http://mkframework.com/ (hebergé sur developpez.com)
    Mes cours/tutoriaux

  4. #24
    Membre régulier
    Femme Profil pro
    Étudiant
    Inscrit en
    Septembre 2015
    Messages
    304
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Gabon

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2015
    Messages : 304
    Points : 107
    Points
    107
    Par défaut
    Bonjour,

    Qu'est ce que :
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    $tId=_root::getParam('pkey',null);
    'pkey' est un tableau propre à MKF? Que contient -il exactement car quand j'exécute j'ai l'erreur suivante:
    Invalid argument supplied for foreach()
    #0 C:\xampp\htdocs\MKF\data\genere\e-tmg\module\MultiLangues\main.php(214): exception_error_handler(2, 'Invalid argumen...', 'C:\\xampp\\htdocs...', 214, Array)
    #1 C:\xampp\htdocs\MKF\data\genere\e-tmg\module\MultiLangues\main.php(55): module_MultiLangues->processSaveMulti()
    #2 C:\xampp\htdocs\MKF\lib\framework\class_root.php(263): module_MultiLangues->_new()
    #3 C:\xampp\htdocs\MKF\data\genere\e-tmg\public\index.php(47): _root->run()
    #4 {main}

    Detail:
    #0 C:\xampp\htdocs\MKF\data\genere\e-tmg\module\MultiLangues\main.php (214)
    exception_error_handler( , 'Invalid argument supplied for foreach()' , 'C:\xampp\htdocs\MKF\data\genere\e-tmg\module\MultiLangues\main.php' , , Array ( [tMessage] => Array ( ) [bSave] => 1 [tPost] => Array ( [:nav] => multiLangues::new ) [tId] => ) )
    #1 C:\xampp\htdocs\MKF\data\genere\e-tmg\module\MultiLangues\main.php (55)
    module_MultiLangues -> processSaveMulti( )
    #2 C:\xampp\htdocs\MKF\lib\framework\class_root.php (263)
    module_MultiLangues -> _new( )
    #3 C:\xampp\htdocs\MKF\data\genere\e-tmg\public\index.php (47)
    _root -> run( )
    #4 {main}
    Fichier : C:\xampp\htdocs\MKF\data\genere\e-tmg\module\MultiLangues\main.php ligne 214

    Message : Invalid argument supplied for foreach()

  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
    "pkey" est à remplacer par votre champ id

    pour le CRUD multi ligne, il y un champ caché pour chaque ligne pour mettre de "regrouper" les lignes du meme enregistrement lors de la reception du post
    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
    Femme Profil pro
    Étudiant
    Inscrit en
    Septembre 2015
    Messages
    304
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Gabon

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2015
    Messages : 304
    Points : 107
    Points
    107
    Par défaut
    Ah merci vraiment, j'avais vu cette colonne contenant un champ caché et je ne l'avais pas mis dans mon formulaire. Maintenant je comprend à quoi elle servait.
    une chose, c'est normal?
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    $tMessage[$key]=$oContacts->getListError();
    ou c'est plutot
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    $tMessage[$key]=$oCandidats_langues->getListError();
    merci encore. Ce framework!! hmm c'est comme apprendre à connaitre quelqu'un jour après jour.

  7. #27
    Membre régulier
    Femme Profil pro
    Étudiant
    Inscrit en
    Septembre 2015
    Messages
    304
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Gabon

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2015
    Messages : 304
    Points : 107
    Points
    107
    Par défaut
    L'erreur est toujours présente.
    Dans la base l'id de la table est la concaténation de 'candidat_id' et 'langues_id'. Puisque nous sommes sur un formulaire de création, les identifiants des enregistrements ne sont pas encore connus. je prefere te monter l'ensemble, le formulaire 'new.php':
    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
     
    <form action="" method="POST" >
    <?php
     $oForm=new plugin_formMultiRow();
    $oForm->setMessage($this->tMessage)
     ?>
    <table class="tb_new">
     
    	<tr>
    		<th>langue_id</th>
    		<th>niveau</th>
     
    	</tr>
     
    	<?php if($this->oCandidats_langues):?>
    		<?php foreach($this->oCandidats_langues as $oCandidats_langues):?>
    		<tr <?php echo plugin_tpl::alternate(array('','class="alt"'))?>>
    			<?php $oForm->add($oCandidats_langues)?>
     
     
    			<td><?php echo $oForm->getSelect('langue_id',$this->tJoinmodel_langues);?></td>
    			<td><?php echo $oForm->getInputText('niveau')?></td>
    			<td><?php echo $oForm->getInputHidden('candidat_id')?></td>
    		</tr>
    		<?php endforeach;?>
    	<?php endif;?>
     
     
    	<tbody id="body">
    	<tr id="newline">
    		<?php $oForm->add(null)?>
     
    		<td><?php echo $oForm->getSelect('langue_id',$this->tJoinmodel_langues);?></td>
    		<td><?php echo $oForm->getInputText('niveau')?></td>
    		<td><?php echo $oForm->getInputHidden('candidat_id')?></td>
    	</tr>
     
    	</tbody>
     
    	<tr>
    		<td></td>
    		<td>
    			<p>
    				<input type="button" onclick="add()"  value="Autre langue" /> <a href="<?php echo $this->getLink('MultiLangues::list')?>">Annuler</a>
    			</p>
    		</td>
    	</tr>
     
    </table>
    <input type="submit"   value="Enregistrer" />
    <?php echo $oForm->getToken('token',$this->token)?>
     
    </form>
    la partie du foreach du processSaveMulti():
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    $tId=_root::getParam('candidat_id',null);
    		foreach($tId as $key => $id){
    et j'ai la même erreur:
    Invalid argument supplied for foreach()
    #0 C:\xampp\htdocs\MKF\data\genere\e-tmg\module\MultiLangues\main.php(214): exception_error_handler(2, 'Invalid argumen...', 'C:\\xampp\\htdocs...', 214, Array)
    #1 C:\xampp\htdocs\MKF\data\genere\e-tmg\module\MultiLangues\main.php(55): module_MultiLangues->processSaveMulti()
    #2 C:\xampp\htdocs\MKF\lib\framework\class_root.php(263): module_MultiLangues->_new()
    #3 C:\xampp\htdocs\MKF\data\genere\e-tmg\public\index.php(47): _root->run()
    #4 {main}

    Detail:
    #0 C:\xampp\htdocs\MKF\data\genere\e-tmg\module\MultiLangues\main.php (214)
    exception_error_handler( , 'Invalid argument supplied for foreach()' , 'C:\xampp\htdocs\MKF\data\genere\e-tmg\module\MultiLangues\main.php' , , Array ( [tMessage] => Array ( ) [bSave] => 1 [tPost] => Array ( [:nav] => MultiLangues::new ) [tId] => ) )
    #1 C:\xampp\htdocs\MKF\data\genere\e-tmg\module\MultiLangues\main.php (55)
    module_MultiLangues -> processSaveMulti( )
    #2 C:\xampp\htdocs\MKF\lib\framework\class_root.php (263)
    module_MultiLangues -> _new( )
    #3 C:\xampp\htdocs\MKF\data\genere\e-tmg\public\index.php (47)
    _root -> run( )
    #4 {main}
    Fichier : C:\xampp\htdocs\MKF\data\genere\e-tmg\module\MultiLangues\main.php ligne 214

    Message : Invalid argument supplied for foreach()

  8. #28
    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
    Citation Envoyé par Kristen Saphiroz Voir le message
    Ah merci vraiment, j'avais vu cette colonne contenant un champ caché et je ne l'avais pas mis dans mon formulaire. Maintenant je comprend à quoi elle servait.
    une chose, c'est normal?
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    $tMessage[$key]=$oContacts->getListError();
    ou c'est plutot
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    $tMessage[$key]=$oCandidats_langues->getListError();
    merci encore. Ce framework!! hmm c'est comme apprendre à connaitre quelqu'un jour après jour.
    OUi deuxième proposition en effet
    Framework php sécurisé et simple à prendre en main avec générateur web http://mkframework.com/ (hebergé sur developpez.com)
    Mes cours/tutoriaux

  9. #29
    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
    Citation Envoyé par Kristen Saphiroz Voir le message
    L'erreur est toujours présente.
    Dans la base l'id de la table est la concaténation de 'candidat_id' et 'langues_id'. Puisque nous sommes sur un formulaire de création, les identifiants des enregistrements ne sont pas encore connus. je prefere te monter l'ensemble, le formulaire 'new.php':
    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
     
    <form action="" method="POST" >
    <?php
     $oForm=new plugin_formMultiRow();
    $oForm->setMessage($this->tMessage)
     ?>
    <table class="tb_new">
     
    	<tr>
    		<th>langue_id</th>
    		<th>niveau</th>
     
    	</tr>
     
    	<?php if($this->oCandidats_langues):?>
    		<?php foreach($this->oCandidats_langues as $oCandidats_langues):?>
    		<tr <?php echo plugin_tpl::alternate(array('','class="alt"'))?>>
    			<?php $oForm->add($oCandidats_langues)?>
     
     
    			<td><?php echo $oForm->getSelect('langue_id',$this->tJoinmodel_langues);?></td>
    			<td><?php echo $oForm->getInputText('niveau')?></td>
    			<td><?php echo $oForm->getInputHidden('candidat_id')?></td>
    		</tr>
    		<?php endforeach;?>
    	<?php endif;?>
     
     
    	<tbody id="body">
    	<tr id="newline">
    		<?php $oForm->add(null)?>
     
    		<td><?php echo $oForm->getSelect('langue_id',$this->tJoinmodel_langues);?></td>
    		<td><?php echo $oForm->getInputText('niveau')?></td>
    		<td><?php echo $oForm->getInputHidden('candidat_id')?></td>
    	</tr>
     
    	</tbody>
     
    	<tr>
    		<td></td>
    		<td>
    			<p>
    				<input type="button" onclick="add()"  value="Autre langue" /> <a href="<?php echo $this->getLink('MultiLangues::list')?>">Annuler</a>
    			</p>
    		</td>
    	</tr>
     
    </table>
    <input type="submit"   value="Enregistrer" />
    <?php echo $oForm->getToken('token',$this->token)?>
     
    </form>
    la partie du foreach du processSaveMulti():
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    $tId=_root::getParam('candidat_id',null);
    		foreach($tId as $key => $id){
    et j'ai la même erreur:
    Pour ce problème il doit y avoir un soucis dans la reception, pouvez vous ajouter l'affichage du POST: print_r($_POST);

    dans le processSaveMulti

    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    print_r($_POST);exit;
    $tId=_root::getParam('candidat_id',null);
    Framework php sécurisé et simple à prendre en main avec générateur web http://mkframework.com/ (hebergé sur developpez.com)
    Mes cours/tutoriaux

  10. #30
    Membre régulier
    Femme Profil pro
    Étudiant
    Inscrit en
    Septembre 2015
    Messages
    304
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Gabon

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2015
    Messages : 304
    Points : 107
    Points
    107
    Par défaut
    Array ( )
    c'est ce qui s'affiche avec le print du POST. Je pense que c'est ainsi parce que processSaveMulti() s’exécute en premier au chargement de 'multiLangues::new' et logiquement il n'y a encore rien de posté.

  11. #31
    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
    Oui et non: il manque quelquechose : la vérification du post

    je rappelle le debut de cette méthode:
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    private function processListSaveMulti(){
    		if(!_root::getRequest()->isPost() ){ //si ce n'est pas une requete POST on ne soumet pas
    			return null;
    		}
    Framework php sécurisé et simple à prendre en main avec générateur web http://mkframework.com/ (hebergé sur developpez.com)
    Mes cours/tutoriaux

  12. #32
    Membre régulier
    Femme Profil pro
    Étudiant
    Inscrit en
    Septembre 2015
    Messages
    304
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Gabon

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2015
    Messages : 304
    Points : 107
    Points
    107
    Par défaut
    Voici ce qu'affiche le POST
    Array ( [langue_id] => Array ( [0] => 1 [1] => 6 ) [niveau] => Array ( [0] => ssd [1] => fff ) [candidat_id] => Array ( [0] => [1] => ) [token] => Array ( [0] => 1445590031####31c9f0f156e87e2c0dd5657c82e9eeaf8437c675 ) )
    il n'y a pas de valeur pour le tableau de 'candidat_id'.

  13. #33
    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
    Oui c'est normal: on parle ici de l'ajout de candidats donc on a pas d'id

    la ça devrait fonctionner: vous pouvez enlever le print_r($_POST);exit
    Framework php sécurisé et simple à prendre en main avec générateur web http://mkframework.com/ (hebergé sur developpez.com)
    Mes cours/tutoriaux

  14. #34
    Membre régulier
    Femme Profil pro
    Étudiant
    Inscrit en
    Septembre 2015
    Messages
    304
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Gabon

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2015
    Messages : 304
    Points : 107
    Points
    107
    Par défaut
    ok, voici a présent le processSaveMulti(), j'ai complété pour renseigner tous les attribut de l'objet '$oCandidats_langues'
    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
     
    private function processSaveMulti(){
    		if(!_root::getRequest()->isPost() ){ //si ce n'est pas une requete POST on ne soumet pas
    			return null;
    		}
     
    		$tMessage=array();
    		$bSave=true;
     
    		$tPost=_root::getRequest()->getParams();
     
    		//print_r($_POST);exit;
    		$oCandidats = $_SESSION['oCandidat'];
    		$tId=_root::getParam('candidat_id',null);
    		foreach($tId as $key => $id){
     
     
    			$oCandidats_langues = new row_candidats_langues();
     
    			$tColumn=array('langue_id','niveau');
    			foreach($tColumn as $sColumn){
    				$oCandidats_langues->$sColumn=_root::getParam($sColumn,null) ;
    			}
    				$oCandidats_langues->candidat_id = $oCandidats->id;
     
    			if(!$oCandidats_langues->save()){
    				$tMessage[$key]=$oCandidats_langues->getListError();
    				$bSave=false;
    				$_SESSION['oCandidats_langues'][] = $oCandidats_langues;
    			}else{
    				$_SESSION['oCandidats_langues'][] = $oCandidats_langues;
    			}
    		}
    Je remplit normalement le formulaire avec plusieurs langues et à l'enregistrement, jolie erreur:
    Array to string conversion
    #0 [internal function]: exception_error_handler(8, 'Array to string...', 'C:\\xampp\\htdocs...', 246, Array)
    #1 C:\xampp\htdocs\MKF\lib\framework\abstract\abstract_sgbd_pdo.php(246): implode(' | ', Array)
    #2 C:\xampp\htdocs\MKF\lib\framework\abstract\abstract_sgbd_pdo.php(210): abstract_sgbd_pdo->query('INSERT INTO can...', Array)
    #3 C:\xampp\htdocs\MKF\lib\framework\abstract\abstract_model.php(178): abstract_sgbd_pdo->insert('candidats_langu...', Array)
    #4 C:\xampp\htdocs\MKF\lib\framework\abstract\abstract_row.php(71): abstract_model->insert(Object(row_candidats_langues))
    #5 C:\xampp\htdocs\MKF\lib\framework\abstract\abstract_row.php(56): abstract_row->insert()
    #6 C:\xampp\htdocs\MKF\data\genere\e-tmg\model\model_candidats_langues.php(79): abstract_row->save()
    #7 C:\xampp\htdocs\MKF\data\genere\e-tmg\module\MultiLangues\main.php(230): row_candidats_langues->save()
    #8 C:\xampp\htdocs\MKF\data\genere\e-tmg\module\MultiLangues\main.php(55): module_MultiLangues->processSaveMulti()
    #9 C:\xampp\htdocs\MKF\lib\framework\class_root.php(263): module_MultiLangues->_new()
    #10 C:\xampp\htdocs\MKF\data\genere\e-tmg\public\index.php(47): _root->run()
    #11 {main}

    Detail:
    #0 exception_error_handler( , 'Array to string conversion' , 'C:\xampp\htdocs\MKF\lib\framework\abstract\abstract_sgbd_pdo.php' , , Array ( [sReq] => INSERT INTO candidats_langues (langue_id,niveau,candidat_id) VALUES (?,?,?) [tParam] => Array ( [0] => Array ( [0] => 1 [1] => 3 [2] => 5 ) [1] => Array ( [0] => oui [1] => bien [2] => non ) [2] => ) [tATTRERRMODE] => Array ( [SILENT] => 0 [WARNING] => 1 [EXCEPTION] => 2 ) [tATTRCASE] => Array ( [LOWER] => 2 [NATURAL] => 0 [UPPER] => 1 ) ) )
    #1 C:\xampp\htdocs\MKF\lib\framework\abstract\abstract_sgbd_pdo.php (246)
    implode( ' | ' , Array ( [0] => Array ( [0] => 1 [1] => 3 [2] => 5 ) [1] => Array ( [0] => oui [1] => bien [2] => non ) [2] => ) )
    #2 C:\xampp\htdocs\MKF\lib\framework\abstract\abstract_sgbd_pdo.php (210)
    abstract_sgbd_pdo -> query( 'INSERT INTO candidats_langues (langue_id,niveau,candidat_id) VALUES (?,?,?) ' , Array ( [0] => Array ( [0] => 1 [1] => 3 [2] => 5 ) [1] => Array ( [0] => oui [1] => bien [2] => non ) [2] => ) )
    #3 C:\xampp\htdocs\MKF\lib\framework\abstract\abstract_model.php (178)
    abstract_sgbd_pdo -> insert( 'candidats_langues' , Array ( [langue_id] => Array ( [0] => 1 [1] => 3 [2] => 5 ) [niveau] => Array ( [0] => oui [1] => bien [2] => non ) [candidat_id] => ) )
    #4 C:\xampp\htdocs\MKF\lib\framework\abstract\abstract_row.php (71)
    abstract_model -> insert( )
    #5 C:\xampp\htdocs\MKF\lib\framework\abstract\abstract_row.php (56)
    abstract_row -> insert( )
    #6 C:\xampp\htdocs\MKF\data\genere\e-tmg\model\model_candidats_langues.php (79)
    abstract_row -> save( )
    #7 C:\xampp\htdocs\MKF\data\genere\e-tmg\module\MultiLangues\main.php (230)
    row_candidats_langues -> save( )
    #8 C:\xampp\htdocs\MKF\data\genere\e-tmg\module\MultiLangues\main.php (55)
    module_MultiLangues -> processSaveMulti( )
    #9 C:\xampp\htdocs\MKF\lib\framework\class_root.php (263)
    module_MultiLangues -> _new( )
    #10 C:\xampp\htdocs\MKF\data\genere\e-tmg\public\index.php (47)
    _root -> run( )
    #11 {main}
    Fichier : C:\xampp\htdocs\MKF\lib\framework\abstract\abstract_sgbd_pdo.php ligne 246

    Message : Array to string conversion

  15. #35
    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
    Oui il faut enlever cette ligne:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    $oCandidats_langues->candidat_id = $oCandidats->id;
    On est dans un process d'ajout de candidat il ne faut pas renseigner ce champ

    Ensuite pour la boucle de remplissage, on est dans le cadre d'un CRUD multi ligne: on recupère donc des tableaux de champs, il faut remplacez votre méthode 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
     
    private function processSaveMulti(){
    		if(!_root::getRequest()->isPost() ){ //si ce n'est pas une requete POST on ne soumet pas
    			return null;
    		}
     
    		$tMessage=array();
    		$bSave=true;
     
    		$tPost=_root::getRequest()->getParams();
     
    		$oCandidats = $_SESSION['oCandidat'];
    		$tId=_root::getParam('candidat_id',null);
    		foreach($tId as $key => $id){
     
     
    			$oCandidats_langues = new row_candidats_langues();
     
    			$tColumn=array('langue_id','niveau');
    			foreach($tColumn as $sColumn){
    				if(isset($tPost[$sColumn]) and isset($tPost[$sColumn][$key])){
    					//on utilise ici le tableau $tPost et non _root::getParam
    					$oCandidats_langues->$sColumn=$tPost[$sColumn][$key];
    				}
    			}
     
    			if(!$oCandidats_langues->save()){
    				$tMessage[$key]=$oCandidats_langues->getListError();
    				$bSave=false;
    				$_SESSION['oCandidats_langues'][] = $oCandidats_langues;
    			}else{
    				$_SESSION['oCandidats_langues'][] = $oCandidats_langues;
    			}
    		}
    	}
    Framework php sécurisé et simple à prendre en main avec générateur web http://mkframework.com/ (hebergé sur developpez.com)
    Mes cours/tutoriaux

  16. #36
    Membre régulier
    Femme Profil pro
    Étudiant
    Inscrit en
    Septembre 2015
    Messages
    304
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Gabon

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2015
    Messages : 304
    Points : 107
    Points
    107
    Par défaut
    On est dans un process d'ajout de candidat il ne faut pas renseigner ce champ
    Apparemment il y a incompréhension.
    On ajoute les langues d'un candidat en fait.ayant une table candidat et une autre table langue, cette table 'candidats_langues' a pour intérêt de stocker le niveau du candidat dans chaque langue.
    pour ce test du crud multi-ligne je ne compte pas enregistrer en base directement mais sauvegarder en session d'ou :
    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
     
    private function processSaveMulti(){
    		if(!_root::getRequest()->isPost() ){ //si ce n'est pas une requete POST on ne soumet pas
    			return null;
    		}
     
    		$tMessage=array();
    		$bSave=true;
     
    		$tPost=_root::getRequest()->getParams();
     
    		$oCandidats = $_SESSION['oCandidat'];
    		$tId=_root::getParam('candidat_id',null);
    		foreach($tId as $key => $id){
     
     
    			$oCandidats_langues = new row_candidats_langues();
     
    			$tColumn=array('langue_id','niveau');
    			foreach($tColumn as $sColumn){
    				if(isset($tPost[$sColumn]) and isset($tPost[$sColumn][$key])){
    					//on utilise ici le tableau $tPost et non _root::getParam
    					$oCandidats_langues->$sColumn=$tPost[$sColumn][$key];
    				}
    			}
     
    			if($oCandidats_langues->isValid()){
    				$_SESSION['oCandidats_langues'][] = $oCandidats_langues;
    				//une fois enregistre on redirige (vers la page liste)
    				_root::redirect('MultiLangues::list');
    			}else{
    				$tMessage[$key]=$oCandidats_langues->getListError();
    				$bSave=false;
    				return $tMessage;
    			}
    		}
    	}
    Ma méthode est-elle correcte? Car j'ai l'erreur suivante :
    Fatal error: Cannot use object of type row_candidats_langues as array in C:\xampp\htdocs\MKF\data\genere\e-tmg\module\MultiLangues\main.php on line 286
    c'est l'enregistrement en session qui ne passe pas?

  17. #37
    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
    Ah oui, il faut donc ajouté le champ candidat_id (j'avais confondu vos clés

    Pour l'erreur:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    MultiLangues\main.php on line 286
    Je n'ai pas le code donc je peux pas savoir
    Mais le problème peut venir de là

    Vous pouvez essayer en désactivant
    Framework php sécurisé et simple à prendre en main avec générateur web http://mkframework.com/ (hebergé sur developpez.com)
    Mes cours/tutoriaux

  18. #38
    Membre régulier
    Femme Profil pro
    Étudiant
    Inscrit en
    Septembre 2015
    Messages
    304
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Gabon

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2015
    Messages : 304
    Points : 107
    Points
    107
    Par défaut
    en désactivant c'est bon, mais j'ai vraiment besoin d'envoyer les objets créés en session. Voici la partie de la methode qui posait problème
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
                          if($oCandidats_langues->isValid()){
    				$_SESSION['oCandidats_langues'][] = $oCandidats_langues;    //alias la ligne 286
    				//une fois enregistre on redirige (vers la page liste)
    				_root::redirect('MultiLangues::list');
    			}else{
    				$tMessage[$key]=$oCandidats_langues->getListError();
    				$bSave=false;
    				return $tMessage;
    			}

  19. #39
    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
    je pense que ceci peut fonctionner:

    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    //on recupere le tableau en session
    			$tCandidats=$_SESSION['oCandidats_langues'];
    			//si ce n'est pas un tableau, on en cree un
    			if(!is_array($tCandidats)){
    				$tCandidats=array($tCandidats);
    			}
    			//on ajoute a ce tableau le nouvel objet
    			$tCandidats[]=$oCandidats_langues;
    			//on enregistre en session ce tableau
    			$_SESSION['oCandidats_langues'][] = $tCandidats;
    Framework php sécurisé et simple à prendre en main avec générateur web http://mkframework.com/ (hebergé sur developpez.com)
    Mes cours/tutoriaux

  20. #40
    Membre régulier
    Femme Profil pro
    Étudiant
    Inscrit en
    Septembre 2015
    Messages
    304
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Gabon

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2015
    Messages : 304
    Points : 107
    Points
    107
    Par défaut
    C'est un truc de dingue, l'erreur est toujours présente mais cette fois çi sur cette ligne de code:
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    $_SESSION['oCandidats_langues'][] = $tCandidats;

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [AC-2007] Plusieurs enregistrements sur une même page d'un formulaire
    Par Triton972 dans le forum IHM
    Réponses: 3
    Dernier message: 16/10/2011, 16h00
  2. Réponses: 3
    Dernier message: 06/01/2011, 22h17
  3. [AC-2000] obtenir plusieurs enregistrements sur une même ligne
    Par woant dans le forum Requêtes et SQL.
    Réponses: 1
    Dernier message: 14/05/2009, 17h31
  4. concaténer plusieurs enregistrements sur une colonne
    Par pierre22 dans le forum Requêtes et SQL.
    Réponses: 12
    Dernier message: 10/09/2007, 19h26
  5. Réponses: 3
    Dernier message: 20/05/2007, 23h41

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