2011-11-18 39 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);