Moodle表單提交後無法進行驗證
P粉287726308
2023-08-28 21:01:24
<p>我正在嘗試建立表單,其結構取決於URL中的參數。如果URL中沒有指定參數,則應顯示錯誤訊息。根據id,執行資料庫查詢並填入表單資料。 </p>
<p>範例網址: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']的存取應替換為: