Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/276.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP-在另一个类中调用函数->;功能_Php - Fatal编程技术网

PHP-在另一个类中调用函数->;功能

PHP-在另一个类中调用函数->;功能,php,Php,我正在尝试这样做: class database { function editProvider($post) { $sql = "UPDATE tbl SET "; foreach($post as $key => $val): if($key != "providerId") { $val = formValidate($val); $s

我正在尝试这样做:

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
然后在另一个类内使用此函数*:

function formValidate($string){
  $string = trim($string);
  $string = mysql_real_escape_string($string);
  return $string;
}
//
。。在$val上。为什么不起作用?若我写在表单的一个字段中,它根本并没有逃逸任何东西。这怎么可能

*更新* 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函数工作正常,除了:-)**

您需要实例化该验证类,并且在实例化之后,您需要使用值参数在该类中调用该函数

在editProvider中,您可以有:

$validator = new validate();
$val = $validator->formValidate($val);
如果上述操作不起作用,请尝试以下操作:

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

查看它是否有效,如果有效,则与未调用的正确函数有关。

您需要实例化该验证类,并且在实例化之后,您需要使用值参数在该类中调用该函数

在editProvider中,您可以有:

$validator = new validate();
$val = $validator->formValidate($val);
如果上述操作不起作用,请尝试以下操作:

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

并查看它是否有效,如果有效,则与未调用正确的函数有关。

您不需要有用于此目的的实例。只需执行
validate::formValidate($val)

为此,您不需要有实例。只需执行
validate::formValidate($val)

不知道为什么您如此热衷于使用$this而不是静态实现。在我看来,静态调用使这段代码更加容易。如果确实希望从数据库类访问
$this->formValidatString()
,则必须执行
类数据库扩展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;
    }
}
类数据库{
公共函数编辑器提供程序($post)
{   
$sql=“更新tbl集合”;
foreach($key=>$val):
如果($key!=“providerId”)
{
$val=MyOtherClass::formValidate($val);
$sqlE[]=“`$key`='$val'”;
}
endforeach;
$sqlE=内爆(“,”,$sqlE);
$where='where`id`=\'.$post['id'.\''.';
$sql=$sql.$sqlE.$where;
$query=mysql\u查询($sql);
如果($query){
返回true;
}
}        
}//末级
类MyOtherClass
{
公共静态函数formValidate($string){
if(strlen($string)<1){
抛出新异常('Invalid$string'.$string');
}
$string=修剪($string);
$string=mysql\u real\u escape\u string($string);
返回$string;
}
}

不知道为什么您会如此热衷于使用$this而不是静态实现。在我看来,静态调用使这段代码更加容易。如果确实希望从数据库类访问
$this->formValidatString()
,则必须执行
类数据库扩展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;
    }
}
类数据库{
公共函数编辑器提供程序($post)
{   
$sql=“更新tbl集合”;
foreach($key=>$val):
如果($key!=“providerId”)
{
$val=MyOtherClass::formValidate($val);
$sqlE[]=“`$key`='$val'”;
}
endforeach;
$sqlE=内爆(“,”,$sqlE);
$where='where`id`=\'.$post['id'.\''.';
$sql=$sql.$sqlE.$where;
$query=mysql\u查询($sql);
如果($query){
返回true;
}
}        
}//末级
类MyOtherClass
{
公共静态函数formValidate($string){
if(strlen($string)<1){
抛出新异常('Invalid$string'.$string');
}
$string=修剪($string);
$string=mysql\u real\u escape\u string($string);
返回$string;
}
}

您在哪里声明了这两个函数(在不同的类中)?很难看出问题是什么,因为您说它在类中调用函数,但您只提供了两个函数,没有提供类。很难看到作用域,您也可以尝试在formValidate函数的开头和结尾放置一个echo,以查看它是否真的在调用它。请尝试并提供此调试信息。谢谢我添加了不同的类,函数在其中。editProvider位于类数据库内,formValidate位于类验证内。这对你有帮助吗?是的,请看何塞·维加的评论。希望有帮助!但是只是一个旁注——如果你把validate作为一个简单的函数,而不是把它放到一个类中,你本来可以做你原来做的事情,但是把它放到一个类中会迫使你实例化这个类,希望这就是你想要的。还可以看到静态调用函数:但我正在尝试使用$this->。。我只是觉得它必须在课堂上,因为你开始谈论它。现在它不在类内,但仍然不能使用$this->您在哪里声明了这两个函数(在不同的类中)?很难看出问题是什么,因为您说它在类内调用函数,但您只提供了两个函数,没有提供类。很难看到作用域,您也可以尝试在formValidate函数的开头和结尾放置一个echo,以查看它是否真的在调用它。请尝试并提供此调试信息。谢谢我添加了不同的类,函数在其中。editProvider位于类数据库内,formValidate位于类验证内。这对你有帮助吗?是的,请看何塞·维加的评论。希望有帮助!但是只是一个旁注——如果你把validate作为一个简单的函数,而不是把它放到一个类中,你本来可以做你原来做的事情,但是把它放到一个类中会迫使你实例化这个类,希望这就是你想要的。还可以看到静态调用函数:但我正在尝试使用$this->。。我只是觉得应该在课堂上,因为你开始谈论