2013-02-12 54 views
0

首先,我的問題是從我的php類中調用一個由AJAX調用訪問的php文件調用的。PHP類私有變量誤導值

問題是返回值是完全錯誤的,與sybase_result值不一樣。那麼我錯過了什麼?

以下是我的程序步驟。

首先我們進行AJAX調用:

$.ajax(
{ 
    type: "POST", 
    url: "ajax/load_fiche_resume.php", 
    timeout:5000, 
    dataType: 'json', 
    data: ({matricule:matricule, id_mun:id_mun}), 
    beforeSend: function() 
    { 
     // Handle the beforeSend event 
     $('#loading-bar').show("slow"); 
    }, 
    complete: function() 
    { 
     // Handle the complete event 
     $('#loading-bar').hide("slow"); 

    }, 
    success: function(data) 
    { 

     console.dir(data); 

     $('#tab-role').html(formatData(data)); 
    }, 
    error: function() 
    { 
     alert("Oops! Une erreur c'est produite.\nVeuiller rafraichir la page. \nSi cela se reproduit, veuiller contacter le propriétaire du site."); 
    } 
}); 

然後,我們進入PHP文件load_fiche_resume.php

include('../class/class_role.php'); 

$oRole = new Role("42025", "2036-94-5034"); 


$ar_step2 = array(
       array("Propriétaire(s)"), 
       array("Nom(s) : ", $oRole->getProprioNoms()), 
       array("Adresse postale : ", $oRole->getProprioAdresse()), 
       array("Condition particulière d'inscription : ", $oRole->getProprioCondition()), 
       array("Date d'inscription au rôle : ", $oRole->getProprioDateInscription()) 
      ); 

如果我們看一下代碼仔細以上的返回值函數$ oRole-> getProprioDateInscription()應該是一個日期。但是不是日期,該函數從另一個get函數返回一個字符串(即:它將顯示$ oRole-> getProprioNoms的值),這是完全錯誤的。

如果我們去班級裏面$ oRole我們有這樣的:

class Role 
{ 
    private $prop_inscription; 
    public function getInfoProprio() 
    { 
     $qry = "SELECT 
        p.nom_form AS nom_form, 
        p.t_typos AS t_typos, 
        substr(p.d_date_inscr,1,10) AS d_date_inscr, 
        pga.adr_form AS adr_form, 
        p.id_adr AS id_adr, 
        p.id AS id 
       FROM 
        ev_dossiers d, 
        ro_b75 p, 
        pg_adresses pga 
       WHERE 
        d.id_dossiers = ".$this->getIdDossier()." AND 
        d.typ_donnees = 11 AND 
        d.id_donnees = p.id AND 
        p.id_adr = pga.id_adr order by p.id, p.id_adr, p.ordre;"; 
     $this->prop_qry = $qry; 
     $result = sybase_query($qry, $this->getLinkDB()); 
     $nbr = sybase_num_rows($result); 
     $typos = sybase_result($result, 0, "t_typos"); 

     if($nbr>0) 
     { 
      for($cpt=0; $cpt<$nbr; $cpt++) 
      { 
       if($cpt===0) 
       { 
        $this->setProprioNoms(utf8_encode(strtr(trim(sybase_result($result, $cpt, "nom_form")),"’","'"))); 
        $this->setProprioAdresse(utf8_encode(strtr(trim(sybase_result($result, $cpt, "adr_form")),"’","'"))); 
        $this->setProprioCondition($this->getConditionInscription(sybase_result($result, $cpt, "t_typos"))); 

// THIS IS PROBLEMATIC      
$this->setProprioDateInscription(sybase_result($result, 0, "d_date_inscr")); 
       } 
       else 
       { 
        $this->setProprioNoms(", ".utf8_encode(strtr(trim(sybase_result($result, $cpt, "nom_form")),"’","'"))); 
       } 
      } 
     } 
    } 

    ... 

     public function getProprioDateInscription() 
    { 
     return $this->prop_inscription; 
    } 
    private function setProprioDateInscription($date) 
    { 
     $this->prop_inscription = $date; 
    } 
} 

如果我們看看行,我們有這個函數:$ this-> setProprioDateInscription(sybase_result($結果,0,「d_date_inscr 「));

sybase_result返回一個日期(它在數據庫中都是正常的,值很好)。但問題出在Setter和private var prop_inscription的Getter之間。

你能幫我嗎?你知道問題來自哪裏嗎?

非常感謝。

+0

HI,首先,我認爲你應該得到$這個 - > setProprioDateInscription(sybase_result($結果,$ cpt,「d_date_inscr」));而不是$ this-> setProprioDateInscription(sybase_result($ result,0,「d_date_inscr」)); – 2013-02-22 13:34:10

+0

您對該sql查詢有多少行?在別人你重寫PropiroNoms。這意味着如果你從sql查詢中得到2行,你將從第一行開始設置日期,然後在下一個循環中,你將覆蓋proprio的名字。 – 2013-02-22 13:40:19

+0

一個建議,以json格式返回您的數據。你可以像這樣以json格式轉換你的php數組:echo json_encode($ ar_step2); – 2013-02-22 13:45:20

回答

0

要解決這個問題,

中庸之道改變這一行

// THIS IS PROBLEMATIC      
$this->setProprioDateInscription(sybase_result($result, 0, "d_date_inscr")); 

$this->setProprioDateInscription(utf8_encode(strtr(trim(sybase_result($result, $cpt,"d_date_inscr")),"’","'")));