2011-11-18 40 views
0

我試圖做到這一點:PHP - 另一個類中調用函數 - >功能

class database {  
function editProvider($post) 
{ 
    $sql = "UPDATE tbl SET "; 
     foreach($post as $key => $val): 
      if($key != "providerId") 
      { 
       $val = formValidate($val); 
       $sqlE[] = "`$key`='$val'"; 
      } 
     endforeach; 

    $sqlE = implode(",", $sqlE); 

    $where = ' WHERE `id` = \''.$post['id'].'\''; 
    $sql = $sql . $sqlE . $where; 

    $query = mysql_query($sql); 

    if($query){ 
     return true; 
    } 
} 
// 
}//end class 

,然後使用此功能*另一個類的INSIDE *

function formValidate($string){ 
    $string = trim($string); 
    $string = mysql_real_escape_string($string); 
    return $string; 
} 
// 

。 。on $ val。爲什麼這不起作用?如果我在表單的一個字段中寫字,那麼它根本就不會逃脫。怎麼可能?

* UPDATE * handler.php:

if(isset($_GET['do'])){ 

if($_GET['do'] == "addLogin") 
{ 
    $addLogin = $db->addLogin($_POST); 
} 

if($_GET['do'] == "addProvider") 
{ 
    $addProvider = $db->addProvider($_POST); 
} 

if($_GET['do'] == "editProfile") 
{ 
    $editProfile = $db->editProfile($_POST); 
} 

if($_GET['do'] == "editProvider") 
{ 
    $editProvider = $db->editProvider($_POST); 
} 
} 
//end if isset get do 

**的editProvider功能工作正常,除了這個:-) **

+1

你在哪裏聲明的兩個函數(不同班)? – ComFreek

+0

很難看出問題是因爲你說它是在一個類中調用一個函數,但你只提供了兩個函數而沒有類。它很難看到範圍,你也可以嘗試在formValidate函數的開始和結尾放置一個回聲來查看它是否實際調用它。請嘗試提供此調試信息。謝謝! – jakx

+0

我已經添加了不同的類,其中的函數在裏面。 editProvider在類數據庫中,formValidate在類驗證中。這對你有幫助嗎? – skolind

回答

1

不知道爲什麼你如此傾向於使用$ this與靜態實現。國際海事組織,一個靜態調用使這個代碼更容易。如果您確實想從數據庫類訪問$this->formValidatString(),則必須執行class database extends MyOtherClass

下面是這將是多麼容易做一個靜態調用:

class database { 

    public function editProvider($post) 
    { 
     $sql = "UPDATE tbl SET "; 
     foreach($post as $key => $val): 
      if($key != "providerId") 
      { 
       $val = MyOtherClass::formValidate($val); 
       $sqlE[] = "`$key`='$val'"; 
      } 
     endforeach; 

     $sqlE = implode(",", $sqlE); 

     $where = ' WHERE `id` = \''.$post['id'].'\''; 
     $sql = $sql . $sqlE . $where; 

     $query = mysql_query($sql); 

     if($query){ 
      return true; 
     } 
    }   
}//end class 

class MyOtherClass 
{ 
    public static function formValidate($string) { 

     if (strlen($string) < 1) { 
      throw new Exception('Invalid $string ' . $string . '); 
     } 

     $string = trim($string); 
     $string = mysql_real_escape_string($string); 

     return $string; 
    } 
} 
+0

這仍然不起作用。請閱讀其他評論。我寫道,甚至沒有mysql_real_escape_string($ val)的作品..:-S我不知道這是怎麼回事。 – skolind

+0

@Kolind:更新的代碼,例外會讓你知道你傳入的val是否合法。 –

2

你需要實例化校驗類和超過一次實例化你將需要在你的值參數中調用那個類的那個函數。

裏面你editProvider你可以有:

$validator = new validate(); 
$val = $validator->formValidate($val); 

如果上述方法無效,請嘗試以下操作:

$val = mysql_real_escape_string(trim($val)); 

,看看它是否工作,如果這樣做,必須做正確的功能沒有被調用。

+0

已經嘗試過,但它不起作用 – skolind

+0

您可以驗證formValidate實際上是否正在發射?添加一個echo $字符串並使其接收正確的參數。 –

+0

這是行不通的.. – skolind

0

你不需要爲此目的有一個實例。只要做validate::formValidate($val);