我正在使用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
所以我的问题是 -
答案 0 :(得分:1)
您可以获得相同的结果,而无需在Form函数 definition()中转换数组。 因为在您的查询中,您只选择两列(idnumber和shortname),因此您可以在 getMyCourses()函数中使用 get_records_sql_menu 函数而不是 get_records_sql 。
get_records_sql_menu 将返回已成对匹配的元素的数组 - &gt; select中第一列为key的第二列 - &gt;值。
答案 1 :(得分:0)
问题是我没有将查询结果转换为具有键和值对的数组。
for (i in seq(1,21,5)){
if (i != 1){
i <- i-1
}
print(i)
}