代码之家  ›  专栏  ›  技术社区  ›  CLiown

PHP致命错误-未定义函数

php
  •  0
  • CLiown  · 技术社区  · 14 年前

    我意识到这有点含糊,但希望有人能给我指明正确的方向。

    这是错误: 致命错误:在第418行调用未定义的函数print_row()。

    原因如下:

    **$something = profile_display_fields($css->id);**
    

    在本代码中:

    $customcss = get_records_select('user_info_field', '', 'sortorder ASC');
    
    foreach ($customcss as $css) {
      if ($css->name == 'usercss') {
       $something = profile_display_fields($css->id);
      }
    }
    

    这是418号线:

    print_row(s($formfield->field->name.':'), $formfield->display_data());
    

    整个功能是:

    function profile_display_fields($userid) {
        global $CFG, $USER;
    
        if ($categories = get_records_select('user_info_category', '', 'sortorder ASC')) {
            foreach ($categories as $category) {
                if ($fields = get_records_select('user_info_field', "categoryid=$category->id", 'sortorder ASC')) {
                    foreach ($fields as $field) {
                        require_once($CFG->dirroot.'/user/profile/field/'.$field->datatype.'/field.class.php');
                        $newfield = 'profile_field_'.$field->datatype;
                        $formfield = new $newfield($field->id, $userid);
                        if ($formfield->is_visible() and !$formfield->is_empty()) {
                            print_row(s($formfield->field->name.':'), $formfield->display_data());
                        }
                    }
                }
            }
        }
    }
    
    3 回复  |  直到 14 年前
        1
  •  1
  •   VolkerK    14 年前

    看起来像 moodle 的profile_display_fields()在user/profile/lib.php中定义。

    print_rows()函数在user/view.php中定义。确保在调用profile_display_fields()之前包含此文件。

    编辑:

    function print_row($left, $right) {
        echo "\n<tr><td class=\"label c0\">$left</td><td class=\"info c1\">$right</td></tr>\n";
    }
    

    这是print_rows()的“原始”定义。在某个地方定义它,以防使用user/profile/lib.php,而不是view.php。

    编辑:我不喜欢它,但您可以将函数定义设为条件以避免“致命错误:无法重新声明函数xyz”

    if ( !function_exists('print_row') ) {
      function print_row($left, $right) {
        echo "\n<tr><td class=\"label c0\">$left</td><td class=\"info c1\">$right</td></tr>\n";
      }
    }
    
        2
  •  2
  •   Sarfraz    14 年前

    错误是正确的,我找不到函数 print_row 定义 在你的代码中。请确保您定义了该函数,该函数似乎存在于其他文件中,请尝试在其他文件中搜索该函数,并将该文件包含在脚本中,此错误不会再次出现。

        3
  •  0
  •   Andrew Moore    14 年前

    您的代码由于以下原因而失败:

    • print_row() 不是PHP核心的函数部分
    • 没有定义PHP扩展 打印行()
    • 您的代码没有定义调用 打印行() 在执行该语句之前。

    如果 打印行() 在外部文件中定义,请确保包含此文件 之前 调用函数。