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 :

Lecture d'une table dans une table


Sujet :

MkFramework

  1. #41
    Membre régulier
    Le menu deroulant liste les ateliers et non les machines, non?
    Oui c'est normal: J'ai créer trois ateliers et dans ces atelier j'enregistre les machines.
    Donc au moment de la création de machine je dois choisir dans quel atelier le placer.

    Voici le fichier machines/view/edit
    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
    <?php $oPluginHtml=new plugin_html?>
    <form action="" method="POST" >
    <input type="hidden" name="formmodule" value="machines" />
    <?php foreach($this->tId as $sColumn)<img src="images/smilies/icon_confused.gif" border="0" alt="" title=":?" class="inlineimg" />>
    	<input type="hidden" name="<?php echo $sColumn ?>" value="<?php echo $this->oMachines->$sColumn ?>" />
    	<?php if($this->tMessage and isset($this->tMessage[$sColumn])): echo implode(',',$this->tMessage[$sColumn]); endif;?>
    <?php endforeach;?>	
    <table class="tb_edit">
     
    	<tr>
    		<th>nom</th>
    		<td><input name="nom" value="<?php echo $this->oMachines->nom ?>" /><?php if($this->tMessage and isset($this->tMessage['nom'])): echo implode(',',$this->tMessage['nom']); endif;?></td>
    	</tr>
     
    	<tr>
    		<th>atelier_id</th>
    		<td><?php echo $oPluginHtml->getSelect('atelier_id',$this->tJoinmodel_ateliers,$this->oMachines->atelier_id)?><?php if($this->tMessage and isset($this->tMessage['atelier_id'])): echo implode(',',$this->tMessage['atelier_id']); endif;?></td>
    	</tr>
     
    </table>
     
    <input type="hidden" name="token" value="<?php echo $this->token?>" />
    <?php if($this->tMessage and isset($this->tMessage['token'])): echo $this->tMessage['token']; endif;?>
     
    <input type="submit" value="Modifier" /> <a href="<?php echo module_machines::getLink('list')?>">Annuler</a>
    </form>

  2. #42
    Rédacteur

    Le code est bon, je vois pas ou est le soucis.
    Il faudrait debuguer l'enregistrement d'une machine pour cimoprendre

    Dans le fichier module/machines/main.php methode save()
    Juste avant $oMachines->save();
    Ajoutez
    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
     
    print_r($oMachines);

    Pour voir ce qui est enregistre
    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. #43
    Membre régulier
    c'est fait. J'ai la même erreurs. Je vois pas le debug.

    l'erreur donnée
    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
    Erreur
     
    Trying to get property of non-object
    #0 /var/www/mk/data/genere/secu02/module/ateliers/view/show.php(1): exception_error_handler(8, 'Trying to get p...', '/var/www/vhosts...', 1, Array)
    #1 /var/www/mk/lib/framework/class_view.php(83): include('/var/www/vhosts...')
    #2 /var/www/mk/lib/framework/class_layout.php(121): _view->show()
    #3 /var/www/mk/data/genere/secu02/layout/template1.php(14): _layout->load('main')
    #4 /var/www/mk/lib/framework/class_layout.php(108): include('/var/www/vhosts...')
    #5 /var/www/mk/data/genere/secu02/module/ateliers/main.php(168): _layout->show()
    #6 /var/www/mk/lib/framework/class_root.php(237): module_ateliers->after()
    #7 /var/www/mk/data/genere/secu02/public/index.php(54): _root->run()
    #8 {main}
     
    Detail:
    #0 /var/www/mk/data/genere/secu02/module/ateliers/view/show.php (1) 
    exception_error_handler( , 'Trying to get property of non-object' , '/var/www/mk/data/genere/secu02/module/ateliers/view/show.php' , , Array ( [sClass] => plugin_tpl ) ) 
    #1 /var/www/mk/lib/framework/class_view.php (83) 
    include( '/var/www/mk/data/genere/secu02/module/ateliers/view/show.php' ) 
    #2 /var/www/mk/lib/framework/class_layout.php (121) 
    _view -> show( ) 
    #3 /var/www/mk/data/genere/secu02/layout/template1.php (14) 
    _layout -> load( 'main' ) 
    #4 /var/www/mk/lib/framework/class_layout.php (108) 
    include( '/var/www/mk/data/genere/secu02/layout/template1.php' ) 
    #5 /var/www/mk/data/genere/secu02/module/ateliers/main.php (168) 
    _layout -> show( ) 
    #6 /var/www/mk/lib/framework/class_root.php (237) 
    module_ateliers -> after( ) 
    #7 /var/www/mk/data/genere/secu02/public/index.php (54) 
    _root -> run( ) 
    #8 {main}

    dans machines/main.php methode save
    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
    public function save(){
    		if(!_root::getRequest()->isPost() or _root::getParam('formmodule')!=self::$sModuleName ){ //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() );
    		}
     
    		$iId=module_machines::getParam('id',null);
    		if($iId==null){
    			$oMachines=new row_machines;	
    		}else{
    			$oMachines=model_machines::getInstance()->findById( module_machines::getParam('id',null) );
    		}
     
    		$tId=model_machines::getInstance()->getIdTab();
    		$tColumn=model_machines::getInstance()->getListColumn();
    		foreach($tColumn as $sColumn){
    			 if(isset($_FILES[$sColumn]) and $_FILES[$sColumn]['size'] > 0){
    				$sNewFileName='data/upload/'.$sColumn.'_'.date('Ymdhis');
     
    				$oPluginUpload=new plugin_upload($_FILES[$sColumn]);
    				$oPluginUpload->saveAs($sNewFileName);
    				$oMachines->$sColumn=$oPluginUpload->getPath();
    				continue;	
    			}else  if( _root::getParam($sColumn,null) ==null ){ 
    				continue;
    			}else if( in_array($sColumn,$tId)){
    				 continue;
    			}
     
    			$oMachines->$sColumn=_root::getParam($sColumn,null) ;
    		}
     
    		if($oMachines->isValid()){
    			//on force la classe de machines à enregistrer l'id de l'atelier dans la collonne machine_id 
                //si l'atelier n'est pas renseigne
                If(module_machines::getParam('atelier_id')==null){
                    $oMachines->atelier_id=_root::getParam('id');
                }
                print_r($oMachines);
    			$oMachines->save();
    			//une fois enregistre on redirige (vers la page liste)
    			$this->redirect('list');
    		}else{
    			return $oMachines->getListError();
    		    }
     
    	}


    J'ai ajouté à la ligne43 print_r($oMachines); C'est bien là qu'il faut le placer?

  4. #44
    Rédacteur

    Oui tres bien, ajoutez un
    exit;
    Derrière le print_r, sinon vous etes redirige
    Framework php sécurisé et simple à prendre en main avec générateur web http://mkframework.com/ (hebergé sur developpez.com)
    Mes cours/tutoriaux

  5. #45
    Membre régulier
    Quand je créer une machine ça donne
    row_machines Object ( [sClassModel:protected] => model_machines [bChooseUpdate:abstract_row:private] => [tProperty:protected] => Array ( [nom] => fdghfgh [atelier_id] => 1 ) [tPropertyToUpdate:protected] => Array ( [0] => nom [1] => atelier_id [2] => atelier_id ) )
    Quand je veux modifier une machine
    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    row_machines Object ( [sClassModel:protected] => model_machines [bChooseUpdate:abstract_row:private] => 1 [tProperty:protected] => Array ( [id] => 49 [nom] => machine test [atelier_id] => 49 ) [tPropertyToUpdate:protected] => Array ( [0] => nom [1] => atelier_id [2] => atelier_id ) )

    atelier_id a perdu son n° par un autre

  6. #46
    Rédacteur

    Oui c'bizarre, j'ai l'impression que c'est le menu deroulant qui n'est pas bon

    1.Pouvez vous ajouter un print_r($_POST) après le print_r($oMachines);
    2.Pouvez vous affichez le code source du menu deroulant ? (Dans le navigateur,Code source de la page de modif d'une machine)
    Framework php sécurisé et simple à prendre en main avec générateur web http://mkframework.com/ (hebergé sur developpez.com)
    Mes cours/tutoriaux

  7. #47
    Rédacteur

    Je crois savoir d'ou vient le soucis: du tableau retourne pour faire le menu deroulant

    Pouvez vous donner le code de la methode getSelect du fichier model/model_atelier.php

    La cle doit etre l'id et la valeur le n'de l'atelier
    Framework php sécurisé et simple à prendre en main avec générateur web http://mkframework.com/ (hebergé sur developpez.com)
    Mes cours/tutoriaux

  8. #48
    Membre régulier
    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
    class model_ateliers extends abstract_model{
     
    	protected $sClassRow='row_ateliers';
     
    	protected $sTable='ateliers';
    	protected $sConfig='mysq';
     
    	protected $tId=array('id');
     
    	public static function getInstance(){
    		return self::_getInstance(__CLASS__);
    	}
     
    	public function findById($uId){
    		return $this->findOne('SELECT * FROM '.$this->sTable.' WHERE id=?',$uId );
    	}
    	public function findAll(){
    		return $this->findMany('SELECT * FROM '.$this->sTable);
    	}
     
    	public function getSelect(){
    		$tab=$this->findAll();
    		$tSelect=array();
    		if($tab){
    		foreach($tab as $oRow){
    			$tSelect[ $oRow->id ]=$oRow->nom;
    		}
    		}
    		return $tSelect;
    	}
    }

  9. #49
    Rédacteur

    La calsse modèle est bonne,pouvez vous faire la partie indiquee dans mon precedent 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

  10. #50
    Membre régulier
    oui desolé
    code source du formulaire edition d'une machine
    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
    <form action="" method="POST" >
    <input type="hidden" name="formmodule" value="machines" />
    	<input type="hidden" name="id" value="50" />
     
    <table class="tb_edit">
     
    	<tr>
    		<th>nom</th>
    		<td><input name="nom" value="zeraezr" /></td>
    	</tr>
     
    	<tr>
    		<th>atelier_id</th>
    		<td><select name="atelier_id" class="select"><option selected="selected" value="1">FIMM</option><option  value="2">Ebenisterie</option><option  value="3">Menuiserie</option></select></td>
    	</tr>
     
    </table>
     
    <input type="hidden" name="token" value="1366391037####a605cc4a224471d9546a1ded8b38a77f4432315d" />
     
    <input type="submit" value="Modifier" /> <a href="index.php?:nav=ateliers::show&amp;id=1&amp;machinesAction=list">Annuler</a>
    </form>

    resultat du print_r($oMachines); et print_r($_POST);
    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    row_machines Object ( [sClassModel:protected] => model_machines [bChooseUpdate:abstract_row:private] => 1 [tProperty:protected] => Array ( [id] => 50 [nom] => zeraezr [atelier_id] => 50 ) [tPropertyToUpdate:protected] => Array ( [0] => nom [1] => atelier_id [2] => atelier_id ) )
     
    Array ( [formmodule] => machines [id] => 50 [nom] => zeraezr [atelier_id] => 1 [token] => 1366391037####a605cc4a224471d9546a1ded8b38a77f4432315d )

  11. #51
    Rédacteur

    Ok, je vois mieux, il y a collision entre le champ id de la machine et celui de l'atelier, essayer de supprimer la ligne du formulaire dans le fichier module/machine/view/edit.php
    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
     
    <input type="hidden" name="id" value="50" />
    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. #52
    Membre régulier
    Bonsoir,
    J'ai commenté la ligne 5 du fichier module/machines/view/edit.php et ça marche.
    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
    <?php $oPluginHtml=new plugin_html?>
    <form action="" method="POST" >
    <input type="hidden" name="formmodule" value="machines" />
    <?php foreach($this->tId as $sColumn)<img src="images/smilies/icon_confused.gif" border="0" alt="" title=":?" class="inlineimg" />>
    	<!-- input type="hidden" name="<?php echo $sColumn ?>" value="<?php echo $this->oMachines->$sColumn ?>" /-->
    	<?php if($this->tMessage and isset($this->tMessage[$sColumn])): echo implode(',',$this->tMessage[$sColumn]); endif;?>
    <?php endforeach;?>	
    <table class="tb_edit">
     
    	<tr>
    		<th>nom</th>
    		<td><input name="nom" value="<?php echo $this->oMachines->nom ?>" /><?php if($this->tMessage and isset($this->tMessage['nom'])): echo implode(',',$this->tMessage['nom']); endif;?></td>
    	</tr>
     
    	<tr>
    		<th>atelier_id</th>
    		<td><?php echo $oPluginHtml->getSelect('atelier_id',$this->tJoinmodel_ateliers,$this->oMachines->atelier_id)?><?php if($this->tMessage and isset($this->tMessage['atelier_id'])): echo implode(',',$this->tMessage['atelier_id']); endif;?></td>
    	</tr>
     
    </table>
     
    <input type="hidden" name="token" value="<?php echo $this->token?>" />
    <?php if($this->tMessage and isset($this->tMessage['token'])): echo $this->tMessage['token']; endif;?>
     
    <input type="submit" value="Modifier" /> <a href="<?php echo module_machines::getLink('list')?>">Annuler</a>
    </form>


    Donc dans le cas d'une lecture d'une table dans une table il va falloir faire un petit récapitulatif car je sait plus maintenant. Peut être sur le tuto?

  13. #53
    Rédacteur

    Je vais faire deux choses:
    1. Modifier la generation du module CRUD integrable pour ne pas avoir ce champ cache
    2. Ajouter un tuto d'integration d'un module integrable dans un module lie

    En tout cas merci de votre aide, ca m as permis de voir 2-3 trucs a corriger/ameliorer
    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. #54
    Membre régulier
    Notre travail n'est pas terminé

    Je vais m'attaquer à la fiche d’évaluations. je vais faire tous seul et je revient vers vous si j'y arrive pas.
    A bientôt

  15. #55
    Rédacteur

    Pas de soucis, bon courage pour la suite, suis toujours dispo si besoin
    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. #56
    Rédacteur

    Pour information, j'ai modifié la génération de module intégrable afin que ceux-ci n'intègrent plus l'id dans le formulaire (celui-ci étant déjà dans l'url)

    J'ai également ajouté un tutorial pour intégrer un module CRUD intégrable dans un autre module:
    http://mkdevs.com/tutoriaux.html#usecrudembedded
    Framework php sécurisé et simple à prendre en main avec générateur web http://mkframework.com/ (hebergé sur developpez.com)
    Mes cours/tutoriaux