Back to top

Autore Topic: modifica dati a db [Risolto]  (Letto 2773 volte)

Offline devillino

  • Nuovo arrivato
  • *
  • Post: 37
    • Mostra profilo
modifica dati a db [Risolto]
« il: 10 Nov 2013, 16:48:29 »
salve ragazzi sto sbattendo la testa su un comportamento strano che ha joomla quando esegue un function del framework.
mi spiego meglio, in pratica la mia applicazione richiama tramite ajax un oggetto json costruito utilizzando il pattern MVC; seguendo tutto il flusso il mio componente fa quello che deve fare: restituisce l'oggetto emodifica una tabella. purtroppo però questo fin quando non entra in un include "debug.php" per eseguire la form:
Codice: [Seleziona]
         public function __destruct()
   {
      // Do not render if debugging or language debug is not enabled
      if (!JDEBUG && !JFactory::getApplication()->getCfg('debug_lang'))
      {
         return;
      }
....
....
....
appena fa il return esce dal debug (uso eclipse), però mi trovo la tabella prima valorizzata correttamente, modificata sbiancata dei campi non chiave. Qualche idea???

Per modificare la tabella non uso i CRUD in quanto per la mia applicazione non mi serviva un approcio simile.
Penso che cmq il problema sia legato a qualche malfunzionamento dovuto alla sincronizzazione del server web che lancia i vari processi in parallelo.(ipotesi che mi vien e in mente a valle del fatto che in eclipse vedo vari rami sospesi nella coda dello stack e se faccio proseguire prima uno e poi un'altro varia la valorizzazione della tabella)

non so se sono stato chiaro, nel caso posto il metodo del controller richiamato dalla task
Codice: [Seleziona]
  public function load() {
       // Initialise variables.
       $app    = JFactory::getApplication();
       $model  = $this->getModel('msgIn');
       $view   = $this->getView("msgIn", "json" );
       $user = JFactory::getUser();
       $db = JFactory::getDBO();
       
       $gruppo = JRequest::getVar('gruppo');
       $jsLMsg = JRequest::getVar('lastmsg');
           
/*prelievo dati*/
       $model->setOperazione(1);
       $model->setgruppo($gruppo);
       $model->setlastidmsg($jsLMsg);       // relativo all'user lato client
       $dbLtmsg = $model->getlastidmsg();   // relativo all'user lato db
       $LChatMsg = $model->getLChatMsg();   // relativo alla chat
       
/*update dati*/             
       /* step 1)
       *devo trovare la riga con il flag ultimo gruppo aggiornato e
       *sbianchettare il campo*/
       $query = $db->getQuery(true);
       $query
          ->update('#__jgroup')
          ->columns('lastgrp')
          ->set( $db->quoteName('lastgrp') . '= \'\'')
          ->where('lastgrp=1','AND')
          ->where('userid='.$user->id);
       $db->setQuery($query);
       $db->query();
       
       /* setp 2)
       *flaggare il campo ultimo gruppo letto in canna*/
       $query = $db->getQuery(true);
       $query
          ->update('#__jgroup')
          ->columns('lastgrp')
          ->set( $db->quoteName('lastgrp') . '= \'1\'')
          ->where('grpid='.$gruppo,'AND')
          ->where('userid='.$user->id);
       $db->setQuery($query);
       $db->query();
       
       
       
       /* step 3)
       *aggiornare il contatore degli ultimi msg letti del gruppo*/
       
       $query = $db->getQuery(true);
       $query
          ->update('#__jgroup')
          ->columns('lastidmsg')
          ->set( $db->quoteName('lastidmsg') . '=\''. $LChatMsg .'\'')
          ->where('grpid='.$gruppo,'AND')
          ->where('userid='.$user->id);
       $db->setQuery($query);
       $db->query();
       
       /*lego model alla view */
       $view->setModel( $model, true );
       $view->display();
       return true;
    }
e invece mi trovo la tabella #__jgroup  valorizzata con valori sbagliati ...a debug ho netato che fin quando l'applicazione è nel mio componente tutto è ok il problema nasce quando esegue il resto dei metodi necessari per il framework.
« Ultima modifica: 23 Nov 2013, 10:34:11 da devillino »

Offline mmleoni

  • Global Moderator
  • Instancabile
  • *****
  • Post: 5547
  • Sesso: Maschio
  • Just another *nix coder/sysadmin...
    • Mostra profilo
Re:modifica dati a db
« Risposta #1 il: 11 Nov 2013, 08:49:58 »
ciao,
 è un po' difficile capire che succede da qui...

comunque mi sono accorto di una cosa:

Codice: [Seleziona]
$gruppo = JRequest::getVar('gruppo');
[...]
->where('grpid='.$gruppo,'AND')
qui un sqli è facile facile, visto che gli passi una stringa sperando che sia un intero.  :(

per il resto, per controllare la concorrenza, io userei un file di log scritto da un file_put_contents, in modalità append, all'ingresso della funzione (date, time e variabili request oltre a juser->id).
sicuramente meno elegante del debug step by step, ma in questi casi sicuramente più funzionale, perché gestisce anche le concorrenze.

ciao,
marco


mmleoni web consulting - creazione siti web aziendali ed e-commerce avanzati - sviluppo moduli e componenti Joomla

Offline devillino

  • Nuovo arrivato
  • *
  • Post: 37
    • Mostra profilo
Re:modifica dati a db
« Risposta #2 il: 11 Nov 2013, 11:19:52 »
il problema è che fin quando entra in questo metodo fa tutto correttamente; il problema è dopo quando entra nello standard del framework, più precisamente quando entra nell'include debug.php non riesco a capire chi scrive nella tabella ma non dovrebbe essere il mio componente. Non so se è legato al fatto che utilizzo le tabelle senza aver creato la classe wrapper della tabella, è l'unica cosa che mi viene in mente. Il problema della concorrenza proprio non lo riesco a spiegare, siccome il metodo viene chiamato una sola volta.

Grazie per l'attenzione :) 

Offline mmleoni

  • Global Moderator
  • Instancabile
  • *****
  • Post: 5547
  • Sesso: Maschio
  • Just another *nix coder/sysadmin...
    • Mostra profilo
Re:modifica dati a db
« Risposta #3 il: 11 Nov 2013, 14:57:12 »
tu ti focalizzi su debug.php io tendo ad ignorarlo.
se la cosa non ti convince disabilita, oltre il debug, anche il plugin "sytem - debug" così che il flusso di programma non passi da lì.

il problema della concorrenza non è certo un evento raro in ajax, dal codice che scrivi mi pare sia tu sia abbastanza esperto da saperlo, quindi logga gli accessi, di solito si hanno grandi sorprese.

per il resto servirebbe un'analisi del codice completo, ma non è qui la sede opportuna, per capire che accade.

ciao,
marco

mmleoni web consulting - creazione siti web aziendali ed e-commerce avanzati - sviluppo moduli e componenti Joomla

Offline devillino

  • Nuovo arrivato
  • *
  • Post: 37
    • Mostra profilo
Re:modifica dati a db
« Risposta #4 il: 11 Nov 2013, 15:24:01 »
esperto non ancora ...conosco ancora poco di questo mondo; questo è il mio secondo componente è ancora presto XD :)
però anch'io non penso sia quello del debug il problema ...lo indico solo per dare una mano a farmi dare una mano! :D
magari quando torno a casa provo come indicato da te con lo scrivere delle info aggiuntive su file, cerco su internet per capire come fare queste operazioni, grazie per l'aiuto :)
(l'unica cosa che non mi convince è che con i break inseriti sul codice che fa l'update ci passa una sola volta cioè quando esegue correttamente l'update. :( )
si si infatti speravo fosse un problema riscontrato gia da qualcun altro nel forum anche se non ho trovato
nulla a riguardo nemmeno su internet.

Marco
« Ultima modifica: 11 Nov 2013, 15:27:04 da devillino »

Offline devillino

  • Nuovo arrivato
  • *
  • Post: 37
    • Mostra profilo
Re:modifica dati a db
« Risposta #5 il: 23 Nov 2013, 10:33:47 »
il problema della concorrenza non è certo un evento raro in ajax, dal codice che scrivi mi pare sia tu sia abbastanza esperto da saperlo, quindi logga gli accessi, di solito si hanno grandi sorprese.


avevi ragione ho provato a mettere un break in tutte le parti in cui veniva toccata quella tabella custom e ho trovato una richiesta ad un altro task che modifica la tabella; fatta da una piccolo pezzetto di javascript che partiva subito dopo il codice che debbugavo :S che stupido.


Gazie per l'aiuto :)
P.S. scusa Mr. Joomla se ho dubitato di te :P :D

 



Web Design Bolzano Kreatif