2011-01-26 7 views
39

を呼び出すときに、これはあなたがそれはあなたがクラスメソッド

class shades { 
    function create($name, $shades, $slug, $shortDesc, $longDesc, $position){ 
     $name = sanitize_paranoid_string($name); 
     $slug = slug($name); 
     $shortDesc = sanitize_sql_string($shortDesc); 
     $longDesc = sanitize_sql_string($longDesc); 
     $query = mysql_query("INSERT INTO products (type, name, slug, shortDesc, htmlDesc, position)VALUES('shades','$name','$slug','$shortDesc','$longDesc','$position')")or die(mysql_error()); 
     $ID = mysql_insert_id(); 
     assign($shades, $ID); 
     if($query) {return true;} 
     else {return false;}; 
    } 
    function delassign($toID){ 
     mysql_query("DELETE FROM assign WHERE type='shades' AND toID='$toID'")or die(mysql_error());  
    } 
    function assign($shades, $toID) 
    { 
     foreach($shades as $shade) 
     { 
      $result = mysql_query("INSERT INTO assign(type, typeID, toID)VALUES('shades','$shade','$toID')")or die(mysql_error()); 
      if($result){echo "Added!";} 
      else{echo"Not Added!";} 
     }; 
    } 
} 
+4

サンプルコードは、[delphiign]の[SQL injection](http://unixwiz.net/techtips/sql-injection.html)の脆弱性があります。この穴を修正するには、旧式のmysqlドライバから[PDO](http://php.net/PDO)に切り替え、[prepared statements](http://www.php.net/PDO.prepared-statements)を使用してください。これは明示的なサニタイズよりも優れていることに注意してください。サニタイズするのを忘れることはできますが、プリペアドステートメントのパラメータで忘れることは何もありません(パラメータを忘れた場合PHPはエラーを生成します)。 – outis

+2

... PDOチュートリアルが必要な場合は、「PHPとPDOでMySQLスクリプトを作成する」(http://www.kitebird.com/articles/php-pdo.html)を試してみてください。 – outis

答えて

83

の代わりにこの

$this->assign() 

のような機能を呼び出す必要があります名前はassign()ですが、この名前のメソッドです。 PHPはJavaのではなく、あなたが関数の呼び出しは、別のメソッドの内部に存在するあなたのケースでは機能

assign() 

または方法

$object->assign() 

を呼び出したい場合はPHPであなたは、明確にする必要があります。 $thisは常にメソッドが存在するオブジェクトを参照します。

$this->assign() 
14

が動作していない理由を私は明らかにそう機能を定義している見ることができるように、これは、コードでエラーFatal error: Call to undefined function assign(
でエラー「未定義の関数の呼び出し」あなたが楽しみを持っていけないだけassign()

3

メイツ、

簡単なスクリプトをテストしながら、私は今日、このエラーにつまずきました。私は "クラス"機能を使用していないので、それは塩の穀物でそれを取る。 私はその定義&宣言...ので、PHPは私にエラー「未定義の関数の呼び出し」を投げていたこの

 try{ 
      foo(); 
     } 
     catch (exception $e) 
      { 
      echo "$e->getMessage()"; 
      } 

     function foo(){ 
         echo "blah blah blah"; 
        } 

のようなものの前に関数を呼び出しました。

これは古典的なプログラミングエラーのようですが、ヒントを必要とする人に役立つかもしれません。あなたが行うことができます

0

別の愚かな間違いは、クラスに非クラス環境から再帰関数をコピーして、内側の自己ます$ this-に呼び出しを変更する `tをある> METHOD_NAME()couldn`tは理解しているのでこれを書い

i`mなぜこのエラーが発生し、このスレッドを最初にGoogleで検索したのですか?