Moodle表单提交后无法进行验证
P粉287726308
P粉287726308 2023-08-28 21:01:24
[PHP讨论组]
<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-&gt;_form; $urlid = $this-&gt;_customdata['id']; // 获取传递的组ID $message = '未找到组'; if(is_null($urlid)){ $mform-&gt;addElement('html', '&lt;h3&gt;'.\core\notification::error($message).'&lt;/h3&gt;'); } else{ // 构建表单,执行SQL查询等 $this-&gt;add_action_buttons(true, '提交'); } } function validation($data, $files) { return array(); } }</pre> <p>登录.php:</p> <pre class="brush:php;toolbar:false;">$PAGE-&gt;set_url(new moodle_url('/local/schedule/signin.php?')); $PAGE-&gt;set_context(\context_system::instance()); $PAGE-&gt;set_pagelayout('base'); $PAGE-&gt;set_title(&quot;注册&quot;); $PAGE-&gt;set_heading(&quot;注册一个组&quot;); global $DB; global $USER; $urlid = $_GET[&quot;id&quot;]; $to_form = array('id' =&gt; $urlid); // 将组ID传递给表单 $mform = new signinform(null, $to_form); $homeurl = new moodle_url('/'); if ($mform-&gt;is_cancelled()) { redirect($homeurl, '已取消。'); // 仅用于测试,永远不会进入此处 } else if ($fromform = $mform-&gt;get_data()) { redirect($homeurl, '正在进行验证'); // 仅用于测试,永远不会进入此处 } echo $OUTPUT-&gt;header(); $mform-&gt;display(); echo $OUTPUT-&gt;footer();</pre></p>
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);
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习
PHP中文网抖音号
发现有趣的

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