You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Moodle表单提交后验证失败,跳转至无参数URL问题求助

问题分析与修复方案

核心问题总结

你的代码存在4个关键问题,导致提交表单后丢失URL参数并显示错误:

  1. URL参数名称不匹配:访问URL用的是groupid=14,但代码里尝试获取$_GET["id"],参数名不一致导致无法正确读取ID。
  2. 页面URL设置错误:set_url的写法不符合Moodle规范,且未携带参数,导致表单默认提交地址丢失groupid。
  3. 直接使用$_GET不安全:未采用Moodle官方的参数处理方法,存在安全风险且不符合框架规范。
  4. 表单提交未保留参数:表单中没有隐藏字段传递groupid,提交后参数直接丢失。

修正后的代码

signin.php

// 使用Moodle官方方法获取URL参数,安全且规范
$groupid = optional_param('groupid', null, PARAM_INT);

// 正确设置页面URL,包含groupid参数
$PAGE->set_url(new moodle_url('/local/schedule/signin.php', ['groupid' => $groupid]));
$PAGE->set_context(\context_system::instance());
$PAGE->set_pagelayout('base');
$PAGE->set_title("Sign up");
$PAGE->set_heading("Sign up for a group");

global $DB, $USER;
$to_form = array('groupid' => $groupid); // 传递正确的参数名
$mform = new signinform(null, $to_form);
$homeurl = new moodle_url('/');

if ($mform->is_cancelled()) {
     redirect($homeurl, 'Cancelled.');
} else if ($fromform = $mform->get_data()) {
     // 可通过$fromform->groupid获取提交时的参数
     redirect($homeurl, 'Validation in process');
}

echo $OUTPUT->header();
$mform->display();
echo $OUTPUT->footer();

signinform.php

class signinform extends moodleform {

    public function definition() {
        global $DB, $USER;
        $mform = $this->_form;
        $groupid = $this->_customdata['groupid'];
        $message = 'No group found';

        if (is_null($groupid)) {
            $mform->addElement('html', '<h3>'.\core\notification::error($message).'</h3>');
        } else {
            // 添加隐藏字段,确保提交表单时groupid不会丢失
            $mform->addElement('hidden', 'groupid', $groupid);
            $mform->setType('groupid', PARAM_INT);
            
            // 此处添加你的业务表单字段,示例:
            // $mform->addElement('text', 'fullname', 'Your Full Name');
            // $mform->setType('fullname', PARAM_TEXT);
            
            $this->add_action_buttons(true, 'Submit');       
        }
    }

    function validation($data, $files) {
        return array();
    }
}

修正说明

  1. 统一参数名称:将所有参数名改为groupid,与访问URL中的参数保持一致。
  2. 安全获取参数:使用optional_param方法处理URL参数,指定类型为PARAM_INT,避免注入风险。
  3. 保留提交参数:在表单中添加隐藏字段groupid,确保提交表单时参数被携带到后台。
  4. 规范URL设置:set_url方法传递参数数组,保证页面URL始终包含groupid,表单默认提交地址正确。

内容的提问来源于stack exchange,提问作者Scorch

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.20 09:23:08