使用查询填充Moodle表单中的select元素

时间:2017-10-03 13:39:39

标签: php mysql moodle

我正在使用Forms API创建一个Moodle表单。我尝试使用查询填充表单中的下拉元素。

class my_form extends moodleform {

    function definition() {
        $mform =& $this->_form;

        $mform->addElement('html', '<h2>' . get_string('header', 'local_data')  . '</h2>');

        global $USER;
        $userid = $USER->id;
        $myCourseIds = getMyCourses($userid);

        $mform->addElement('select', 'courseid', get_string('courseid', 'local_data'), $myCourseIds);


        $this->add_action_buttons(true, get_string('send', 'local_data'));
    }

}

以下是查询:

function getMyCourses($userid) {
    global $DB;

    $sql = 'SELECT c.idnumber, c.shortname
            FROM {role_assignments} ra, {user} u, {course} c, {context} cxt, {attendance_sessions} ass, {attendance} att
            WHERE ra.userid = u.id
            AND ra.contextid = cxt.id
            and att.id = ass.attendanceid
            and c.id = att.course
            AND cxt.instanceid = c.id
            AND (roleid =12 OR roleid=3)
            and u.id = ?';

    return $DB->get_records_sql($sql, array($userid));
}

返回的错误是一般数据库错误。我注意到Moodle Forms API页面中的示例使用了一个全局变量$ FORUM_TYPES,其中我将变量用于我的查询。

以下是错误消息:

  

检测到编码错误,必须由程序员修复:PHP捕获致命错误。   More information about this error

所以我的问题是 -

  • 我可以使用在Moodle表单API的select元素中存储数据库查询结果的变量吗?

2 个答案:

答案 0 :(得分:1)

您可以获得相同的结果,而无需在Form函数 definition()中转换数组。 因为在您的查询中,您只选择两列(idnumber和shortname),因此您可以在 getMyCourses()函数中使用 get_records_sql_menu 函数而不是 get_records_sql

get_records_sql_menu 将返回已成对匹配的元素的数组 - &gt; select中第一列为key的第二列 - &gt;值。

Moodle Docs Reference

答案 1 :(得分:0)

问题是我没有将查询结果转换为具有键和值对的数组。

for (i in seq(1,21,5)){

  if (i != 1){
     i <- i-1
  }

  print(i)

}