Formulaire généré dynamiquement et submit

Par romses, il y a 10 ans


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

romses, il y a 10 ans

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]" />?

Coryyo, il y a 10 ans

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

Coryyo, il y a 10 ans

Salut, tu peux copier la fonction de ton controlleur?

romses, il y a 10 ans

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); }
Coryyo, il y a 10 ans

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

romses, il y a 10 ans

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

Coryyo, il y a 10 ans

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é.

romses, il y a 10 ans

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)); ?>
Coryyo, il y a 10 ans

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