Php 如何在填写一个字段后自动填写其他表单字段?

Php 如何在填写一个字段后自动填写其他表单字段?,php,forms,moodle,Php,Forms,Moodle,我正在使用moodleform类在moodle中创建一个表单。我在表单中有许多字段。我想做的是,当用户填写第一个字段时,我想获取他/她输入的数据,在相关的DB表中搜索与该输入匹配的字段,然后填充该记录的其他字段 请注意,用户尚未按下任何提交按钮。我一直试图找到一个函数来获取输入的数据,但所有的努力都白费了。我发现了一个get_data()方法,但我甚至不知道如何正确使用它。我一直在读moodle的文档,但没有任何帮助。我不是编码新手,但我也不是专家 下面是一段代码片段: class reques

我正在使用moodleform类在moodle中创建一个表单。我在表单中有许多字段。我想做的是,当用户填写第一个字段时,我想获取他/她输入的数据,在相关的DB表中搜索与该输入匹配的字段,然后填充该记录的其他字段

请注意,用户尚未按下任何提交按钮。我一直试图找到一个函数来获取输入的数据,但所有的努力都白费了。我发现了一个get_data()方法,但我甚至不知道如何正确使用它。我一直在读moodle的文档,但没有任何帮助。我不是编码新手,但我也不是专家

下面是一段代码片段:

class requestcourse_form extends moodleform
{
    function definition() 
    {   
    global $CFG, $currentsess, $DB, $USER, $currentrecord; 

    $mform =& $this->_form; // Don't forget the underscore! 

    // Form header
    $mform->addElement('header', 'mainheader','<span style="font-size:22px">'.get_string('courserequestform','block_usp_mcrs'). '</span>');

    // Course Code field. 
    $coursecodearray = array();
    $coursecodearray[0] = get_string('choosecoursecode', 'block_usp_mcrs');
    $allcoursecodes = $DB->get_records_select('block_usp_mcrs_courses', 'id > 0', array(), 'id', 'id, course_code');
    foreach ($allcoursecodes as $id => $coursecodeobject) {
        $coursecodearray[$id] = $coursecodeobject->course_code;
    }
    $coursecode = $mform->addElement('select', 'coursecode', get_string('coursecode', 'block_usp_mcrs'), $coursecodearray);
    $mform->addRule('coursecode', get_string('required'), 'required', null, 'client');
    $mform->setType('coursecode', PARAM_RAW);

    // Course Name field. TODO: Course Name to pick automatically after entering Course Code
    $coursenamearray = array();
    $coursenamearray[0] = get_string('choosecoursename', 'block_usp_mcrs');
    $allcoursenames = $DB->get_records_select('block_usp_mcrs_courses', 'id > 0', array(), 'id', 'id, course_name');
    foreach ($allcoursenames as $id => $coursenameobject) {
        $coursenamearray[$id] = $coursenameobject->course_name;
    }
    $mform->addElement('select', 'coursename', get_string('coursename', 'block_usp_mcrs'), $coursenamearray);
    $mform->addRule('coursename', get_string('required'), 'required', null, 'client');
    $mform->setType('coursename', PARAM_RAW);
class requestcourse\u表单扩展了moodleform
{
函数定义()
{   
全局$CFG、$currentsess、$DB、$USER、$currentrecord;
$mform=&$this->\u form;//不要忘记下划线!
//表格标题
$mform->addElement('header','mainheader','.get_string('courserequestform','block_usp_mcrs'));
//课程代码字段。
$coursecodearray=array();
$CourseCodearay[0]=获取字符串('choosecoursecode','block_usp_mcrs');
$allcoursecodes=$DB->get_records_select('block_usp_mcrs_courses','id>0',array(),'id','id,course_code');
foreach($id=>$coursecodeobject的所有CourseCodes){
$CourseCodearay[$id]=$coursecodeobject->course\u代码;
}
$coursecode=$mform->addElement('select','coursecode',get_string('coursecode','block_usp\u mcrs'),$coursecodearray);
$mform->addRule('coursecode',get_string('required'),'required',null,'client');
$mform->setType('coursecode',参数为原始值);
//课程名称字段。TODO:输入课程代码后自动选择的课程名称
$coursenamearray=array();
$coursenamearray[0]=获取字符串('choosecoursename','block\U usp\U mcrs');
$allcoursenames=$DB->get_records_select('block_usp_mcrs_courses','id>0',array(),'id','id,course_name');
foreach($id=>$coursenameobject的所有CourseNames){
$coursenamearray[$id]=$coursenameobject->课程名称;
}
$mform->addElement('select','coursename',get_string('coursename','block_usp\u mcrs'),$coursenamearray);
$mform->addRule('coursename',get_string('required'),'required',null,'client');
$mform->setType('coursename',参数为原始值);

任何帮助都将不胜感激。

您必须使用javascript实现这一点,因为Moodle没有以嵌套方式填充数据的功能

添加AMD模块js文件,在其中调用mform进行显示

在渲染mform的文件中

$mform->render();
添加下面的行以调用amd js文件

$PAGE->requires->js_call_amd('local_acestructure/registration', 'init');
在amd js文件中,根据课程代码选择下拉更改,进行httprequest/ajax调用以获取数据

多谢各位