Quick links: Content - sections - sub sections
EN FR
Quick Search Advanced search
 
Page

  [Opened] Output function on non object. Problème URGENT

Posted by bdecaslou on 05/12/2013 18:37

Salut tout le monde

Voilà j'ai dans un formulaire un champ output contenant un Time.

Je souhaite le remplir une première fois avec la valeur de la bdd. Du coup je récupère la valeur de la dernière expérience grâce à un getLastRecord(méthode dans la dao).

$experiment =  jDao::get("experiment");
$lastrecord = $experiment->getLastRecord();
$dt=$lastrecord->DateHourStart;
$formulaireexperiment4 = jForms::create("ProjetWeb~experiment4");
$formulaireexperiment4->setData('idExperiment',$id );
$formulaireexperiment4->setData('Time',$dt);

Dans ce cas-là la valeur est bien récupéré et correspond à celle de la DAO et est visible en output sur la page du formulaire.

Cependant sur la page suivante je recharge le même formulaire en modifiant l'output de la facon suivante

$meteo =  jDao::get("meteorologicaldata");
$lastrecord1 = $meteo->getLastRecord1();
$dt = $lastrecord1->Time;
$experiment =  jDao::get("experiment");
$lastrecord = $experiment->getLastRecord();
$id = $lastrecord->idExperiment;
$formulaireexperiment4 = jForms::create("ProjetWeb~experiment4");
$formulaireexperiment4->setData('idExperiment',$id );
$formulaireexperiment4->setData('Time',$dt);

Et la même sans avoir modifié la veur ca ne marche pas et ca me renvoie l'erreur suivante

"Call to a member function output() on a non-object in C:\wamp\www\jelix\lib\jelix\core\jCoordinator.class.php on line 204"

Le formulaire et la méthode sont jointes

<form xmlns="http://jelix.org/ns/forms/1.1">
<hidden ref="idExperiment" />
<hidden ref="IdData" />


<output ref="Time" >
        <label>Time in Greenwich Mean Time ( Take care if the experiment's duration is less than 2 days, the data are requested for the next hour, if not for the next day)</label>
        <alert type="required"></alert>
</output>

<input ref="temperature">
<label for="temperature">Temperature</label>
<alert type="required"></alert>
</input>
<input ref="InsolationTime" type="time">
<label for="InsolationTime">InsolationTime (Please use this format 00:00)</label>
<alert type="required"></alert>
</input>
<input ref="RainTime" type="time">
<label for="RainTime">RainTime (Please use this format 00:00) </label>
<alert type="required"></alert>
</input>
 
<submit ref="submit" >
    <label>Enregistrer</label>
</submit> 

</form>
<method type="selectfirst" name="getlastRecord1">
 <order>
<orderitem property="IdData" way="desc" />
</order>
    </method> 

  [Opened] Output function on non object. Problème URGENT

Reply #1 Posted by bdecaslou on 05/12/2013 18:42

L'affichage du formulaire se fait en fonction d'une donnée grâce à un if. Soit l'utilisateur est redirigé vers le menu, soit il affiche à nouveau le formulaire

  [Opened] Output function on non object. Problème URGENT

Reply #2 Posted by bdecaslou on 05/12/2013 18:52

Et voici la fonction entière.

Je récupère et enregistre d'abord le formulaire. Puis les données de la dao expériment nécessaire? J'affecte ma variable j et selon son résultat je calcule la nouvelle date et crée ma dao et la charge dans le formualaire (ou du moins en partie) que je modifierai ensuite après l'appel du formulaire.

function createsave5(){
        $rep = $this->getResponse('html');
        $rep->addCssLink(jApp::config()->urlengine['basePath'].'css/mes_styles.css');
        $rep->body->assign('IMG',jApp::config()->urlengine['basePath'].'images/');
        $rep->addCssLink('http://code.jquery.com/ui/1.8.24/themes/base/jquery-ui.css');
        $rep->addJSLink('https://ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.min.js');
        $rep->addJSLink('https://ajax.googleapis.com/ajax/libs/jqueryui/1.9.2/jquery-ui.min.js');
        
        $form= jForms::fill("ProjetWeb~experiment4");
        $dt=$form->getData('Time');
        $experiment4 = jDao::createRecord('ProjetWeb~meteorologicaldata');
        $experiment4-> idExperiment =$this->param('idExperiment');
        $experiment4-> IdData =$this->param('IdData');
        $experiment4-> Time =$this->param('Time');
        $experiment4-> temperature =$this->param('temperature');
        $experiment4-> InsolationTime =$this->param('InsolationTime');
        $experiment4-> RainTime =$this->param('RainTime'); 
        $data =  jDao::get("meteorologicaldata");
        $data->insert($experiment4);
        
        $experiment =  jDao::get("experiment");
        $lastrecord = $experiment->getLastRecord();
        $id = $lastrecord->idExperiment;
        $dt2= $lastrecord->DateHourEnd;
        $duration=$lastrecord->duration;
        $record=$duration-2;
        jLog::dump($dt2);
        jLog::dump($dt);
        $aa=substr($dt, 8, 2);
        $ab=substr($dt,5, 2);
        $ac=substr($dt, 0, 4);
        $ad=substr($dt, 11, 2);
        $ae=substr($dt, 14, 2);
        $af=substr($dt, 17, 2);
        $aaa=substr($dt2, 8, 2);
        $aab=substr($dt2, 5, 2);
        $aac=substr($dt2, 0, 4);
        $aad=substr($dt2, 11, 2);
        $aae=substr($dt2,14, 2);
        $aaf=substr($dt, 17, 2);
        $j=0;
        $dt3=new JDateTime($ac,$ab,$aa,$ad,$ae,$af);
        $dt4=new JDateTime($aac,$aab,$aaa,$aad,$aae,$aaf);
        $dt5 = $dt3->durationTo($dt4);
        $durs=($dt5->seconds)/86400;
        $durd=$dt5->days;
        $durm=($dt5->months)*12;
        $dur=$durs+$durd+$durm;
        if ($record<=0 && $dur>3600)
            {$j=0;
             }
        else if ($record>0 && $dur>86400)
            {$j=0;
            }
     
           
              if ($j==0) {
                  
                if($record<=0 ){
                if($ad<23){$ad=$ad+1;}
                else if($ab==01 || $ab==03 || $ab==05 || $ab==07 || $ab==08 || $ab==10 || $ab==12)
                {if ($aa<31){$ad=0; $aa=$aa+1;}else {$ab=$ab+1; $aa=0;}$ad=0;}
                else if($ab==04 || $ab==06 || $ab==09 || $ab==11 )
                {if ($aa<30){$aa=$aa+1;$ad=0;}else {$ab=$ab+1; $aa=0;$ad=0;}}
                else if($ac%4==0){if ($aa<29){$aa=$aa+1;$ad=0;}else {$ab=$ab+1; $aa=0;$ad=0;}}
                else if ($aa<28){$aa=$aa+1;$ad=0;}else {$ab=$ab+1; $aa=0;$ad=0;}
                }
                else {
                if($ab==01 || $ab==03 || $ab==05 || $ab==07 || $ab==08 || $ab==10 || $ab==12)
                {if ($aa<31){$aa=$aa+1;}else {$ab=$ab+1; $aa=0;}}
                else if($ab==04 || $ab==06 || $ab==09 || $ab==11 )
                {if ($aa<30){$aa=$aa+1;}else {$ab=$ab+1; $aa=0;}}
                else if($ac%4==0){if ($aa<29){$aa=$aa+1;}else {$ab=$ab+1; $aa=0;}}
                else if ($aa<28){$aa=$aa+1;}else {$ab=$ab+1; $aa=0;}
                }
         
                $dt4=$ac.'-'.$ab.'-'.$aa.' '.$ad.':'.$ae.':'.$af;
                $meteo =  jDao::get("meteorologicaldata");
                $lastrecord1 = $meteo->getLastRecord1();
                $idd = $lastrecord1->IdData;
                jLog::dump($idd);
                $experiment5 = jDao::createRecord('ProjetWeb~meteorologicaldata'); 
                $experiment5-> idExperiment =$id;
                $experiment5-> Time =$dt4; 
                $experiment5-> IdData =$idd+1; 
                $experiment5-> temperature =0; 
                $experiment5-> InsolationTime =0; 
                $experiment5-> RainTime =0; 
                $data1 =  jDao::get("meteorologicaldata");
                $data1->insert($experiment5);
                
                $meteo2 =  jDao::get("meteorologicaldata");
                $lastrecord2 = $meteo2->getLastRecord1();
                
                                
                $formulaireexperiment4 = jForms::create("ProjetWeb~experiment4");
                $formulaireexperiment4->setData('idExperiment',$lastrecord2->idExperiment );
                $formulaireexperiment4->setData('IdData',$lastrecord2->IdData );
                $formulaireexperiment4->setData('Time',$dt );
                $rep->body->assign('FORMULAIREEXPERIMENT4', $formulaireexperiment4);
                $rep->title = 'Complete fields of the experiment';
                $rep->bodyTpl = 'completer3';
                                }
                
                else if ($j==1)
                    {
                $rep = $this->getResponse('redirect');
                $rep->action = 'ProjetWeb~default:retourMenu';
                    }  

        return rep;
    } 

  [Opened] Output function on non object. Problème URGENT

Reply #3 Posted by foxmask on 05/12/2013 18:53

il faudrait nous montrer le code de la méthode du contrôleur car il manque l'essentiel


@GitHub - Forum HaveFnuBB! powered by Jelix - Le Booster Jelix !

  [Opened] Output function on non object. Problème URGENT

Reply #4 Posted by bdecaslou on 05/12/2013 18:57

Le résultat de JLog::dump($dt) renvoie '2013-05-11 19:55:14' , exactement du même format que la date renvoyée la première fois

  [Opened] Output function on non object. Problème URGENT

Reply #5 Posted by bdecaslou on 05/12/2013 18:59

La méthode de la première fonction

function completerExp2(){
   $rep = $this->getResponse('html');
   $rep->addCssLink(jApp::config()->urlengine['basePath'].'css/mes_styles.css');
   $rep->body->assign('IMG',jApp::config()->urlengine['basePath'].'images/');
   $rep->addCssLink('http://code.jquery.com/ui/1.8.24/themes/base/jquery-ui.css');
   $rep->addJSLink('https://ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.min.js');
   $rep->addJSLink('https://ajax.googleapis.com/ajax/libs/jqueryui/1.9.2/jquery-ui.min.js');
   $jsUrl = jApp::config()->urlengine['basePath'];   
   $experiment =  jDao::get("experiment");
   $lastrecord = $experiment->getLastRecord();
   $id = $lastrecord->idExperiment;
   $dt=$lastrecord->DateHourStart;
   jLog::dump($dt);
   $formulaireexperiment4 = jForms::create("ProjetWeb~experiment4");
   $formulaireexperiment4->setData('idExperiment',$id );
   $formulaireexperiment4->setData('Time',$dt);
   $rep->body->assign('FORMULAIREEXPERIMENT4', $formulaireexperiment4);
   $rep->title = 'Complete fields of the experiment';
   $rep->bodyTpl = 'completer2';
   return $rep;
    
}

  [Opened] Output function on non object. Problème URGENT

Reply #6 Posted by bdecaslou on 05/12/2013 19:00

Quel autre méthode souhaite-tu visualiser?

  [Opened] Output function on non object. Problème URGENT

Reply #7 Posted by bdecaslou on 05/12/2013 19:00

Quel autre méthode souhaite-tu visualiser?

  [Opened] Output function on non object. Problème URGENT

Reply #8 Posted by foxmask on 05/12/2013 19:02

createsave5 est dans l'action du form du templazte completer2 ?


@GitHub - Forum HaveFnuBB! powered by Jelix - Le Booster Jelix !

  [Opened] Output function on non object. Problème URGENT

Reply #9 Posted by bdecaslou on 05/12/2013 19:04

Ouaip exactement

<div class="block">

    <div class="blockcontent">
        <h3>Take care if the experiment's duration is less than 2 days, the data are requested for the next hour, if not for the next day</h3>
       
{formfull $FORMULAIREEXPERIMENT4,'ProjetWeb~default:createsave5'}

    
    </div>
</div>

Le bug intervient lors du chargement du deuxième formulaire

 
Page
  1. Output function on non object. Problème URGENT