j'ai un formulaire qui m'affiche 3 input (des menus select lié) une fois les données sélectionnées, un tableau est généré avec une liste de données provenant d'un find de mon action et chaque tuble contient un champ input.
le soucis est que lorsque je click sur le boutton submit, sauf les inputs générés sont soumis pas tout le formulaire entier. voici ce que j'ai dans ma vue statique de parametrage :


<?php  

echo $this->set('title_for_layout','Remplissage des notes de classe');

?>
<div class="panel panel-primary">
<div class="panel-heading">
    <h3 class="panel-title"><strong>
    Zone de parametrage </strong>( Vous devez obligatoirement sélectionnez le cycle pour avoir accèes à d'autres options ...)</h3>
  </div>
  <div class="panel-body">

<?php echo $this->Form->create('Note',array('class'=>'form-inline','id' => 'formstudent','url'=> array('action'=> 'addnote'))); ?>

<div class="col-lg-12 col-md-12">

            <table class="panel">
            <tr>
                <td>
                    <div class="form-group">
                        <?php   

                            echo $this->Form->input('sequences_id', array('label' => 'Séquence','empty' => array('Choisir une Sequence'),'class'=>'form-control','options' => $listesequence));

                         ?>
                     </div>
                </td>
                <td>&nbsp;
                    <div class="form-group listclass">
                        <?php   

                            echo $this->Form->input('filieres_id', array('label' => 'Classe *','empty' => array('Choisir une Classe'),'class'=>'form-control ajaxliste ','data-target' => 'idmatiere','data-url' => array('action' => 'listematiere'),'id' => 'idfiliere','options' => $listclasse));

                         ?> 
                     </div>
                </td>
                <td>&nbsp;
                    <div class="form-group jsclass">
                            <?php   

                            echo $this->Form->input('matieres_id', array('label' => 'Matière *','class'=>'form-control classmatiere','id' => 'idmatiere'));

                             ?> 
                     </div>
                </td>

            </tr>
            </table>

</div>

  </div>

</div>
<div class="contenu-form">

</div>

la portion généré automatique est la suivante:


    <h3 class="panel-title">Liste des élèves de la classe : &nbsp;&nbsp;<span class="badge classestudent"> <?php echo $calsseAllstudent; ?></span> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span> Nombre Total d'élève 
    <span class="badge"><?php echo $nbre_eleve; ?></span></span></h3>

<?php echo $this->Form->create('Note',array('class'=>'form-inline','url'=> array('action'=> 'addnote'))); ?>

    <td><?php $i = 1; ?></td>
            <table class="table table-bordered">
            <tr class="active">
                <td><strong>#</strong></td><td><strong>Nom</strong> </td><td><strong>Prénom</strong></td><td><strong>Note obtenu</strong></td>
            </tr>
            <?php   foreach ($listeeleve as $key => $eleve): ?>
                <tr>
                <td><?php echo $key +1 ; ?></td>
                <td><?php echo $eleve['Student']['nom']; ?></td>
                <td><?php echo $eleve['Student']['prenom']; ?></td>
                <td>
                <?php   

                            echo $this->Form->input('noteobtenu', array('label' => '','class'=>'form-control classmatiere noteeleve','type' => 'text','required' => true));

                 ?> 
                </td>
            </tr>
            <?php endforeach; ?>
            <?php unset($eleve); ?>
            </table>
<div class="line-input">
                                            <p >
                                                    <?php
                                                            echo $this->Form->button(' Sauvegarder', array('class'=>'btn btn-primary btn-submit glyphicon glyphicon-ok  btsendform','type' => 'submit'));
                                                            echo $this->Form->button(' Annuler', array('type'=>'reset','class'=>'btn btn-default btn-reset glyphicon glyphicon-refresh')); 

                                                    ?>
                                            </p>
                </div>

    <?php echo $this->Form->end();?>

losque je clicke rien

9 réponses


Coryyo
Réponse acceptée

Tu créé deux fois le formulaire, insert plutôt les champs inputs dynamique directement dans le premier formulaire.

romses
Auteur
Réponse acceptée

Déjà merçi CORYYO, en parcourant mes div j'ai constaté des ouvertures non désirées et après avoir tout équilibré cela fonctionne bien j'arrive a envoyer tout les données mais maintenant le soucis comme tu viens de mentionné surviens celui de récupérer les données en effet comment crée hempers form qui respecte cette syntaxe <input name="data['Note']['eleve'][$ideleve]" />?

Salut, tu peux copier la fonction de ton controlleur?

romses
Auteur

voici la fonction de mon controlleur pour afficher le form généré

public function membre_index()

    {
        if($this->request->is('ajax'))
        { 
            $this->layout = null;
            $idsend = $this->request->query('id');

            $nbtotaleleve = $this->Student->find('count',array(
                    'conditions' => array('Student.enseignements_id' => $this->Auth->user('enseignements_id'),
                        'Student.filieres_id' => $idsend
                        )
                                ));

            $listestudent = $this->Student->find('all',array(
                    'conditions' => array('Student.enseignements_id' => $this->Auth->user('enseignements_id'),
                        'Student.filieres_id' => $idsend
                        ),
                    'fields' => array('prenom','nom','id'),
                    'order' => array('nom ASC'),
                    'recursive' => 0
                                ));

            $this->Filiere->id = $idsend;
            $classefind = $this->Filiere->field('nomclasse');
            $listeparam = array('nbre_eleve' => $nbtotaleleve, 'listeeleve' => $listestudent,'calsseAllstudent' => $classefind);
            $this->set($listeparam);

        }
        else{

            $this->layout = null;
            $this->Session->setFlash('Veuillez recharger encore la page il se peut que votre navigateur n\' est pas à jour','default',array('class'=>'alert alert-info'));
            //return $this->redirect($this->referer());
            }
        //$this->set($res); 
    }
romses
Auteur

Bien pensée mais j'ai déjà essayé le soucis est que lorsque j'injecte les inputs dans le premier formulaire, le boutton input ne fonctionne plus en effet ne réagit plus ni au click ni à n'importe koi

Le premier problème c'est que tu as deux formulaires, donc lors de l'envoi seulement les données du premier seront envoyé. Dans ton ajax, comme c'est un ajout de champs, tu fais des inputs basic en html de même form que cake. Il faut que ton input note obtenu est un lien avec un id de l'élève. Dans ce genre :

<input name="data['Note']['eleve'][$ideleve]" />

Du coup tu pourra en faisant un foreach de $this->request->data['Note']['eleve'] récupérer les notes que tu as entré.

Si cela envoi les données, où est le soucis? Un débug(); pour voir?

romses
Auteur

je viens de faire ceci et ça fonctionne

<?php   

                            echo $this->Form->input('Note.' . $idstudent .'.noteobtenu', array('label' => '','class'=>'form-control classmatiere noteeleve ','onkeyup' => 'verif(this);','type' => 'text','required' => true));

                 ?> 

Oui, du coup les champs sont unique. C'était le problème que tu avais. :)