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 :

Sauvegarder directement depuis l'index dans un tableau


Sujet :

Bibliothèques et frameworks PHP

  1. #1
    Membre à l'essai
    Femme Profil pro
    Inscrit en
    Janvier 2013
    Messages
    40
    Détails du profil
    Informations personnelles :
    Sexe : Femme

    Informations forums :
    Inscription : Janvier 2013
    Messages : 40
    Points : 22
    Points
    22
    Par défaut Sauvegarder directement depuis l'index dans un tableau
    Bonjour à tous !


    J'ai un petit souci avec CakePhp (surement dû à ma mauvaise maîtrise du modèle MVC) et j'aurais besoin d'un conseil !


    Alors je vais essayer de vous expliquer clairement !


    J'ai une table événement dans ma BDD. J'ai une vue index.ctp qui affiche un tableau présentant chaque ligne de ma table.

    Code index.ctp :
    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
     
    <table class="table table-striped">
    	<tr>
    		<th><?php echo $this->Paginator->sort('ref', 'Référence ticket'); ?></th>
    		<th><?php echo $this->Paginator->sort('intervenant', 'Intervenant'); ?></th>
    		<th>Actions</th>
    		<th><?php echo $this->Paginator->sort('begindate', 'Date de début'); ?></th>
    		<th><?php echo $this->Paginator->sort('tarif', 'Tarif (en euro)'); ?></th>
    	</tr>
    	<?php foreach($operations as $k=>$v): $v = current($v); ?>
    	<tr>
    		<td><?php echo $this->Html->link($v['ref'], array('action'=>'show',$v['id'])); ?></td>
    		<td><?php echo $v['intervenant']; ?></td>
    		<td><?php echo $this->Html->link("Valider", array('action'=>'validatedemande',$v['id'])); ?></td>
    		<td><?php echo $v['begindate']; ?></td>
    		<td><?php echo $v['tarif']; ?></td>
    	</tr>
    	<?php endforeach; ?>
    </table>
    Voilà la partie qui me pose problème c'est la ligne : <td><?php echo $this->Html->link("Valider", array('action'=>'validatedemande',$v['id'])); ?></td>

    En fait ça me donne un lien qui envoie sur une autre vue pour pouvoir modifier la ligne en question.

    Code validatedemande.ctp:

    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
     
    <?php 
                echo $this->Form->create('Post', array('class' => 'form-horizontal')); 
                ?>
                <fieldset>
                                    <div class="control-group">
                                        <?php echo $this->Form->input('id'); ?>
                                    </div>
                                    <div class="control-group">
                                    	<label for="label1" class="control-label"> </label>
                                    	<?php echo '<div class="controls"><button id="label1" class="btn btn-success" name="data[Post][validate]" value=1 >Valider</button><button id="label2" class="btn btn-danger" name="data[Post][validate]" value=2 disabled>Refuser</button></div>'; ?>
                                    </div>
     
                </fieldset>
                <?php 
     
                    echo $this->Form->end();
                ?>
    Voilà donc sur cette page j'ai juste un bouton valider et un bouton refuser. Sauf que c'est pas super pratique car pour chaque ligne, on doit cliquer sur le lien qui nous envoi sur l'autre page, valider ou refuser, puis cliquer sur le lien suivant, rechanger de page etc ...

    Donc j'aimerais bien que le bouton valider et le bouton supprimer soit utilisable dans le tableau de la page index, comme ceci :

    Code que j'aimerais pour index.ctp afin de ne plus avoir validatedemande.ctp :
    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
     
    <table class="table table-striped">
    	<tr>
    		<th><?php echo $this->Paginator->sort('ref', 'Référence ticket'); ?></th>
    		<th><?php echo $this->Paginator->sort('intervenant', 'Intervenant'); ?></th>
    		<th>Actions</th>
    		<th><?php echo $this->Paginator->sort('begindate', 'Date de début'); ?></th>
    		<th><?php echo $this->Paginator->sort('tarif', 'Tarif (en euro)'); ?></th>
    	</tr>
    	<?php foreach($operations as $k=>$v): $v = current($v); ?>
    	<tr>
    		<td><?php echo $this->Html->link($v['ref'], array('action'=>'show',$v['id'])); ?></td>
    		<td><?php echo $v['intervenant']; ?></td>
    		<td><button id="label1" class="btn btn-success" name="data[Post][validate]" value=1 >Valider</button><button id="label2" class="btn btn-danger" name="data[Post][validate]" value=2 disabled>Refuser</button></td>
    		<td><?php echo $v['begindate']; ?></td>
    		<td><?php echo $v['tarif']; ?></td>
    	</tr>
    	<?php endforeach; ?>
    </table>
    J'ai juste mis l'html des 2 boutons direct dans les cases du tableau. mais mon souci c'est pour la sauvegarde dans le controller que ça passe pas !


    Voici mon controller associé à ces 2 vues :
    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
     
    	function index(){
     
    				$groupe = $this->Session->read('accessgroup');
    				if($groupe == '4' || $groupe == '5' || $groupe == '6'){
    					$this->paginate = array('Post' => array(
    						'limit' => 10,
    						'order' => array('Post.id' => 'desc'))
    					);
    				}else{
    					$this->paginate = array('Post' => array(
    						'limit' => 10,
    						'order' => array('Post.id' => 'desc'),
    						'conditions' => array('Post.intervenant' => 'test'))
    					);
    				}
    				$d['operations'] = $this->Paginate('Post');	
    				$this->set($d);
    		}
    	}
     
    	function validatedemande($id = null){
    		if($this->request->is('put') || $this->request->is('post')){
    			if($this->Post->save($this->request->data)){
    				$this->Session->setFlash("L'opération a bien été modifiée","notif");
    				$this->redirect(array('action'=>'index'));
    			}
    		}elseif($id){
    			$this->Post->id = $id;
    			$this->request->data = $this->Post->read();
    		}
    	}
    Voilà ! J'ai essayé de faire un mix des 2 pour faire la sauvegarde dans index mais je n'y arrive pas ... Des conseils s'il vous plait ?

  2. #2
    Membre expert
    Avatar de Spartacusply
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2011
    Messages
    1 723
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mai 2011
    Messages : 1 723
    Points : 3 274
    Points
    3 274
    Par défaut
    T'es pas loin, il te faut juste passer la valeur dans le lien :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <?php echo $this->Html->link("Valider", array('action' => 'validatedemande', $v['id'], true)) . $this->Html->link("Refuser", array('action' => 'validatedemande', $v['id'], false)); ?>
    Ensuite, dans ton action, pour enregistrer le changement :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    public function validatedemande($id = null, $value = null) {
            if (!$this->Post->exists($id)) {
                throw NotFoundException('Post inexistant');
            }
            $this->Post->id = $id;
            if ($this->Post->saveField('validate', (boolean) $value)) {
                $this->Session->setFlash("L'opération a bien été modifiée", "notif");
            } else {
                $this->Session->setFlash("Une erreur s'est produite");
            }
            return $this->redirect(array('action' => 'index'));
        }
    Comme ça plus besoin de vue intermédiaire.
    Un message utile vous a aidé ? N'oubliez pas le

    www.simplifions.fr - Simplifier vos comptes entre amis !

  3. #3
    Membre à l'essai
    Femme Profil pro
    Inscrit en
    Janvier 2013
    Messages
    40
    Détails du profil
    Informations personnelles :
    Sexe : Femme

    Informations forums :
    Inscription : Janvier 2013
    Messages : 40
    Points : 22
    Points
    22
    Par défaut
    MERCI ! C'est exactement ce que j'essayais de faire en vain ! Tu me délivres Encore merci ^^

Discussions similaires

  1. Recherche d'un index dans un tableau
    Par Clydopathe dans le forum VB.NET
    Réponses: 3
    Dernier message: 29/04/2009, 15h05
  2. Réponses: 2
    Dernier message: 21/02/2009, 18h50
  3. [MySQL] affichage pour pagination depuis un requête dans un tableau
    Par berti dans le forum PHP & Base de données
    Réponses: 3
    Dernier message: 27/05/2008, 10h44
  4. Réponses: 15
    Dernier message: 08/08/2006, 17h35
  5. [VBA] Obtenir l'index dans un tableau à partir de sa valeur.
    Par Julien Dufour dans le forum Access
    Réponses: 2
    Dernier message: 28/07/2006, 11h03

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