2011-01-26 47 views
39

này là lỗi Fatal error: Call to undefined function assign(
này là mã, như bạn có thể nhìn thấy tôi rõ ràng đã xác định chức năng vậy tại sao là nó không làm việc"gọi đến chức năng xác định" lỗi khi gọi phương thức lớp

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

Mã mẫu có thể dễ bị tấn công [SQL injection] (http://unixwiz.net/techtips/sql-injection.html) trong hàm 'delassign'. Để sửa lỗ này, hãy chuyển từ trình điều khiển mysql lỗi thời sang [PDO] (http://php.net/PDO) và sử dụng [báo cáo đã chuẩn bị] (http://www.php.net/PDO.prepared-statements). Lưu ý điều này vượt trội so với việc vệ sinh rõ ràng bởi vì trong khi bạn có thể quên khử trùng, không có gì để bảo mật với các tham số đã được chuẩn bị sẵn sàng (nếu bạn quên một tham số, PHP sẽ tạo ra một lỗi thông báo cho bạn). – outis

+2

... Nếu bạn cần hướng dẫn PDO, hãy thử ["Viết kịch bản MySQL bằng PHP và PDO"] (http://www.kitebird.com/articles/php-pdo.html). – outis

Trả lời

83

Bạn không có một niềm vui ction có tên là assign(), nhưng một phương pháp có tên này. PHP không phải là Java và PHP bạn phải làm cho rõ ràng, nếu bạn muốn gọi một hàm

assign() 

hoặc một phương pháp

$object->assign() 

Trong trường hợp của bạn gọi hàm nằm bên phương pháp khác. $this luôn đề cập đến đối tượng, trong đó một phương thức tồn tại, chính nó.

$this->assign() 
14

bạn cần phải gọi hàm như thế này

$this->assign() 

thay vì chỉ assign()

3

Mates,

tôi stumbled khi lỗi này ngày hôm nay trong khi thử nghiệm một kịch bản đơn giản. Tôi không sử dụng chức năng "class" mặc dù nó mang nó với hạt muối. Tôi đã gọi hàm trước khi tuyên bố định nghĩa & của nó ... một cái gì đó như thế này

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

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

nên php được ném cho tôi lỗi "gọi đến chức năng xác định".

Lỗi này dường như là lỗi lập trình cổ điển nhưng có thể giúp ai đó cần đầu mối.

0

Một sai lầm ngớ ngẩn, bạn có thể làm là sao chép chức năng đệ quy từ môi trường lớp học không đến lớp và don `t thay đổi nội tự các cuộc gọi đến $ this-> method_name()

i`m viết này vì couldn`t hiểu tại sao tôi nhận được lỗi này và chủ đề này là lần đầu tiên trong google khi bạn tìm kiếm lỗi này.

Các vấn đề liên quan