2009-10-14 4 views
0

Je vise à basculer le numéro d'état dans la table des contacts dans le champ contact_status_id chaque fois qu'un lien contenant l'ID du contact est cliqué. La page ne montre aucune erreur, mais l'action ne change pas le nombre. Aucune validation n'est encore implémentée.CakePHP, impossible de repérer le problème dans l'action d'édition

Peut-être qu'un ensemble d'yeux frais peut détecter un problème?

function inbox_toggle_number_status($id=null) 
{ 
    //Call from the inbox when the number is clicked and status toggled. 

    $this->User->Contact->id = $id; 

    if (!empty($id)) 
    { 

     $current_status = $this->User->Contact->find('first', array('conditions' => array('id' => $id))); 

     if ($current_status['Contact']['contact_status_id'] == '1'): 
      $this->User->Contact->saveField('contact_status_id', '2'); 
      exit(); 

     elseif ($current_status['Contact']['contact_status_id'] == '2'): 
      $this->User->Contact->saveField('contact_status_id', '3'); 
      exit(); 

     elseif ($current_status['Contact']['contact_status_id'] == '3'): 
      $this->User->Contact->saveField('contact_status_id', '2'); 
      exit(); 

     else: 
      exit(); 

     endif; 
    } 
} 
+2

Je vois un problème, le code n'est pas correctement indenté, et vous avez plusieurs instructions sur une ligne, ce qui le rend difficile à lire, ce qui le rend difficile à repérer les problèmes et difficile à maintenir. Donc, cela devrait être votre premier ordre du jour, rendre le code lisible. –

+0

vous avez raison, j'ai rangé un peu. – ondrobaco

Répondre

1
function inbox_toggle_number_status($id = null) 
{ 
    if(!$id) 
    { 
     $this->Session->setFlash('no id'); 
     $this->redirect(array('action' => 'index')); 
    } 

    $this->User->Contact->id = $id; 
    $current_status = $this->User->Contact->read(null, $id); 

    switch($current_status['Contact']['contact_status_id']) 
    {     
     case 1: 
      $this->User->Contact->saveField('contact_status_id', 2); 
      break; 

     case 2: 
      $this->User->Contact->saveField('contact_status_id', 3); 
      break; 

     case 3: 
      //should yu not go back to 1? 
      $this->User->Contact->saveField('contact_status_id', 2); 
      break; 
    } // switch 
} 
0

Je n'ai jamais eu beaucoup de chance avec certaines des méthodes de sauvegarde dans le gâteau. Pour cette raison, j'utilise presque toujours Model :: save (array()), avec le tableau contenant à la fois l'identifiant et le champ à mettre à jour. Si vous voulez aller dans cette voie, vous pouvez faire:

if(!empty($id)) { 
    $arr = array('Contact' => array('id' => $id)); 

    $current_status = $this->User->Contact->find('first', array('conditions' => array('id' => $id))); 

    if ($current_status['Contact']['contact_status_id'] == '1'): 
     $arr['Contact']['contact_status_id'] = 2; 
    <other conditional clauses here> 


    $this->User->Contact->save($arr); 
    exit(); 
} 

Si vous voulez poursuivre votre itinéraire, s'il vous plaît définir votre niveau de débogage 2 et laissez-nous savoir si le script tente même d'enregistrer les valeurs dans le db (donnez-nous le vidage SQL au bas de la page).

0

J'ai eu une idée; voir cette ligne?

$this->User->Contact->id = $id; 

ce paramètre id pourrait ne durer la première requête exécutée une fois défini,

si

vous pourriez avoir à régler à nouveau juste avant l'instruction if contenant les appels saveField .

Cependant, vous n'en avez pas vraiment besoin avant votre appel find (...) parce que vous avez le $ id défini dans le tableau 'conditions' find (...).

Solution

essayez de déplacer $ this-> Utilisateur-> Contact-> id = $ id, à la ligne après découverte (...), il sera réglé pour le setField à venir (. ..) appel.

également

au lieu d'utiliser le! Vide (...), essayez de commencer la fonction avec

if(!isset($id)){ 
    $this->redirect(/*some url with an error message*/); 
} 

suivi du code qui exécuteraient si le $ id est valide

Questions connexes