Moodle表单提交后无法进行验证
P粉287726308
2023-08-28 21:01:24
<p>我正在尝试创建一个表单,其结构取决于URL中的参数。如果URL中没有指定参数,则应显示错误消息。根据id,执行数据库查询并填充表单数据。</p>
<p>示例URL:http://127.0.0.1/local/group/signin.php?groupid=14</p>
<p>不幸的是,当我通过点击操作按钮提交表单后,我的表单无法验证。它跳转到http://127.0.0.1/local/group/signin.php,因为URL中没有参数,所以显示错误消息“未找到组”。</p>
<p>我在这里做错了什么?</p>
<p>signinform.php:</p>
<pre class="brush:php;toolbar:false;">class signinform extends moodleform {
public function definition() {
global $DB;
global $USER;
$mform = $this->_form;
$urlid = $this->_customdata['id']; // 获取传递的组ID
$message = '未找到组';
if(is_null($urlid)){
$mform->addElement('html', '<h3>'.\core\notification::error($message).'</h3>');
}
else{
// 构建表单,执行SQL查询等
$this->add_action_buttons(true, '提交');
}
}
function validation($data, $files) {
return array();
}
}</pre>
<p>登录.php:</p>
<pre class="brush:php;toolbar:false;">$PAGE->set_url(new moodle_url('/local/schedule/signin.php?'));
$PAGE->set_context(\context_system::instance());
$PAGE->set_pagelayout('base');
$PAGE->set_title("注册");
$PAGE->set_heading("注册一个组");
global $DB;
global $USER;
$urlid = $_GET["id"];
$to_form = array('id' => $urlid); // 将组ID传递给表单
$mform = new signinform(null, $to_form);
$homeurl = new moodle_url('/');
if ($mform->is_cancelled()) {
redirect($homeurl, '已取消。'); // 仅用于测试,永远不会进入此处
} else if ($fromform = $mform->get_data()) {
redirect($homeurl, '正在进行验证'); // 仅用于测试,永远不会进入此处
}
echo $OUTPUT->header();
$mform->display();
echo $OUTPUT->footer();</pre></p>
您需要在表单中添加一个隐藏字段,该字段包含必须传递到页面的'id',否则,当表单提交时,该id将不再存在于该页面的参数中。
例如(在definition()中)
此外,在Moodle中,您不应直接访问$_GET - 使用包装函数required_param()或optional_param(),因为它们:
因此,您对$_GET['id']的访问应替换为: