Borang Moodle tidak boleh disahkan selepas diserahkan
P粉287726308
2023-08-28 21:01:24
<p>Saya cuba mencipta borang yang strukturnya bergantung pada parameter dalam URL. Jika tiada parameter dinyatakan dalam URL, mesej ralat harus dipaparkan. Berdasarkan id, lakukan pertanyaan pangkalan data dan isikan data borang. </p>
<p>Contoh URL: http://127.0.0.1/local/group/signin.php?groupid=14</p>
<p>Malangnya, apabila saya menyerahkan borang dengan mengklik butang tindakan, borang saya gagal disahkan. Ia melompat ke http://127.0.0.1/local/group/signin.php dan memaparkan mesej ralat "Kumpulan tidak ditemui" kerana tiada parameter dalam URL. </p>
<p>Apa yang saya buat salah di sini? </p>
<p>signinform.php:</p>
<pre class="brush:php;toolbar:false;">class signinform memanjangkan moodleform {
definisi fungsi awam() {
global $DB;
global $USER;
$mform = $this->_form;
$urlid = $this->_customdata['id'] // Dapatkan ID kumpulan yang diluluskan
$message = 'Kumpulan tidak dijumpai';
if(is_null($urlid)){
$mform->addElement('html', '<h3>'.corenotification::error($message).'</h3>');
}
lain{
// Bina borang, laksanakan pertanyaan SQL, dsb.
$ini->tambah_butang_tindakan(benar, 'Serah');
}
}
pengesahan fungsi($data, $files) {
kembali tatasusunan();
}
}</pre>
<p>Log Masuk.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("Daftar");
$PAGE->set_heading("Daftar kumpulan");
global $DB;
global $USER;
$urlid = $_GET["id"];
$to_form = array('id' => $urlid); // Hantarkan ID kumpulan ke borang
$mform = new signinform(null, $to_form);
$homeurl = moodle_url baharu('/');
jika ($mform->is_cancelled()) {
redirect($homeurl, 'Dibatalkan.'); // Hanya untuk ujian, jangan sekali-kali masuk ke sini
} else if ($fromform = $mform->get_data()) {
redirect($homeurl, 'Pengesahan sedang berjalan'); // Hanya untuk ujian, jangan sekali-kali masuk ke sini
}
echo $OUTPUT->header();
$mform->paparan();
echo $OUTPUT->footer();</pre></p>
Anda perlu menambah medan tersembunyi pada borang anda yang mengandungi 'id' yang mesti dihantar ke halaman, jika tidak, apabila borang diserahkan, id tidak akan ada lagi dalam parameter halaman.
Sebagai contoh (dalam definisi())
Selain itu, dalam Moodle anda tidak seharusnya mengakses $_GET secara langsung - gunakan fungsi pembungkus required_param() atau optional_param() kerana ia:
Jadi akses anda kepada $_GET['id'] hendaklah digantikan dengan: