Moodle表单提交后无法进行验证
P粉287726308
P粉287726308 2023-08-28 21:01:24
[PHP讨论组]

我正在尝试创建一个表单,其结构取决于URL中的参数。如果URL中没有指定参数,则应显示错误消息。根据id,执行数据库查询并填充表单数据。

示例URL:http://127.0.0.1/local/group/signin.php?groupid=14

不幸的是,当我通过点击操作按钮提交表单后,我的表单无法验证。它跳转到http://127.0.0.1/local/group/signin.php,因为URL中没有参数,所以显示错误消息“未找到组”。

我在这里做错了什么?

signinform.php:

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();
}
}

登录.php:

$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();

P粉287726308
P粉287726308

全部回复(1)
P粉680487967

您需要在表单中添加一个隐藏字段,该字段包含必须传递到页面的'id',否则,当表单提交时,该id将不再存在于该页面的参数中。

例如(在definition()中)

$mform->addElement('hidden', 'id', $urlid);
$mform->setType('id', PARAM_INT);

此外,在Moodle中,您不应直接访问$_GET - 使用包装函数required_param()或optional_param(),因为它们:

  • 将参数清理为声明的类型
  • 自动从$_GET或$_POST中获取参数(在这种情况下很重要,因为当您提交表单时,'id'参数将成为POST数据的一部分)
  • 通过应用默认值(optional_param)或停止并显示错误消息(required_param)来处理缺少的参数

因此,您对$_GET['id']的访问应替换为:

$urlid = optional_param('id', null, PARAM_INT);
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号