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

Bibliothèques et frameworks PHP Discussion :

save plusieurs enregistrements


Sujet :

Bibliothèques et frameworks PHP

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    208
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 208
    Points : 67
    Points
    67
    Par défaut save plusieurs enregistrements
    Bonjour,

    j'ai une table 'Formation'. Pour chaque formation d'un enseignant on a une date début et une date fin.
    Dans ma vue j'ai :
    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
    <script type="text/javascript">
           $(function() {
    			$.datepicker.setDefaults( $.datepicker.regional[ "" ] );
    			$("#datepicker").datepicker({
    			dateFormat: 'dd-mm-yy',
    			altFormat: "d-m-y"
    			}); 
    			$('#datepicker').datepicker({altField: '#altDate', altFormat: 'yy-mm-dd'}).
                datepicker('setDate', new Date(y, m-1, d));
    		   });
       </script>
     
    <?php
     
     
    	 echo $this->Form->create('Formation');
    	echo '<table width=100%>';
        echo '<th width=5%>id</th><th width=5%>Code Etape</th><th width = "15%">Libellé formation</th><th width = "25%">	date ouverture</th><th width = "25%">date fermeture</th><th width = "1%">Hors délai</th><tr>';
    	$i=0;
     
    	foreach ($formation as $formation)
    	{ 	
    		echo '<tr><td>'.$formation['Formation']['id'].'</td>';
     
    		echo $this->Form->input('Formation.id',array('type'=>'hidden','value'=>$formation['Formation']['id']));
    		echo '<td >'.$formation['Formation']['code_etape'].'</td><td>'.$formation['Formation']['libelle'].'</td>';
    		echo '<td>'.$this->Form->input('Formation.date_ouverture',array('type'=>'text','label'=>false,'id'=>$formation['Formation']['id'].$i,'class'=>'datepicker', 'value' => $this->Time->format('d/m/Y',$formation['Formation']['date_ouverture']))).'</td>';
    		echo '<td>'.$this->Form->input('Formation.date_fin',array('type'=>'text','label'=>false,'id'=>$formation['Formation']['id'].$i+1,'class'=>'datepicker','value'=> $this->Time->format('d/m/Y',$formation['Formation']['date_fin']))).'</td>';
     
    		$horsDelai = array ('1'=>'Oui','0'=>'Non');
    		echo '<td>'.$this->Form->input('Formation.hors_delai',array('options'=>$horsDelai, 'value'=>$formation['Formation']['hors_delai'],'label'=>false)).'</td></tr>';	
    		$i++;
    	}
     
    	echo '</table>';
    	echo $this->Form->end(__('Valider'));
    ?>
    Les formations de l'enseignant s'affichent sans problème.

    Dans le controller, j'ai :
    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
    <?php
    App::uses('AppController', 'Controller');
    class FormationsController extends AppController
    {
    	public $components = array('DebugKit.Toolbar'=>array('autoRun' => true),'RequestHandler','Session');
    	public $helpers = array('Js' => array('Jquery'),'Text','Time','Form','Session');
    	public $uses = array('Formation');
     
    	public function edit($enseig_id,$id = null)
    	{
     
    		$formation = $this->Formation->find('all', array( 'conditions'=>array ('enseignant_id'=>$enseig_id)));
     
    		$this->set(compact('formation',$formation));
     
     
    		if ($this->request->is('post') || $this->request->is('put'))
    		{
    			foreach ($this->request->data['Formation'] as $formation)
    			{ 
    				$this->request->data['Formation']['date_ouverture'] = implode('-', array_reverse(explode('/', $this->request->data['Formation']['date_ouverture'])));
    				$this->request->data['Formation']['date_fin'] = implode('-', array_reverse(explode('/', $this->request->data['Formation']['date_fin'])));
     
    				if ($this->Formation->saveAll($this->request->data))
    				{		
    					$this->Session->setFlash('Les formations ont été enregistrées');
    					$this->redirect(array('controller'=>'memoires','action' => 'index'));
    				} 
    				else 
    				{
    					$this->Session->setFlash("Les formations n'ont pas été enregistrée", 'default', array('class' => 'message failure'));
    				}
    			} 
    		}
     
    	}
     
     
    }
     
    ?>
    Mon problème, il ne sauvegarde que le dernier enregistrement. Dans $this->request->data, je n'ai que la dernière formation du tableau . Pourquoi ? Comment faire si on a 3 formations et si on modifie les dates de la 1ere et de la 3ème pour tout sauvegarder.

    J'ai essayé de mettre dans ma vue ce type de ligne pour chaque input
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
        echo '<td>'.$this->Form->input(
            'Formation.' . $i . 'date_ouverture',
            array(
                'type'=>'text',
                'label'=>false,
                'id'=>$formation['Formation']['id'].$i,
                'class'=>'datepicker',
                'value' => $this->Time->format('d/m/Y',$formation['Formation']['date_ouverture'])
            )
        ).'</td>';
    Mais ça ne fonctionne pas .... POURQUOI .?
    Merci pour vos réponses
    Pascale

  2. #2
    Membre éprouvé Avatar de tdutrion
    Homme Profil pro
    Architecte technique
    Inscrit en
    Février 2009
    Messages
    561
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Architecte technique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2009
    Messages : 561
    Points : 1 105
    Points
    1 105
    Par défaut
    Bonjour,

    Pourrais-tu poster le html généré ?

    Je partirais pour un mauvais html généré mais j'avoue avoir la flemme de lire ton code ce soir, je verrais ça beaucoup plus vite avec le html final.

    Que donne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    var_dump($this->request->data['Formation']); exit;
    avant le foreach ?

Discussions similaires

  1. plusieurs enregistrements dans une seul ligne
    Par Celelibi dans le forum Requêtes
    Réponses: 3
    Dernier message: 03/01/2005, 15h55
  2. Réponses: 12
    Dernier message: 27/08/2004, 15h42
  3. SQL et Access : ajouter plusieurs enregistrements
    Par Bernard M dans le forum Bases de données
    Réponses: 3
    Dernier message: 23/04/2004, 21h39
  4. Insérer plusieurs enregistrements en une seule requête
    Par pyd001 dans le forum MS SQL Server
    Réponses: 4
    Dernier message: 26/02/2004, 10h38

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