cari

Rumah  >  Soal Jawab  >  teks badan

Borang Moodle tidak boleh disahkan selepas diserahkan

<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>
P粉287726308P粉287726308452 hari yang lalu535

membalas semua(1)saya akan balas

  • P粉680487967

    P粉6804879672023-08-29 17:01:00

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

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

    Selain itu, dalam Moodle anda tidak seharusnya mengakses $_GET secara langsung - gunakan fungsi pembungkus required_param() atau optional_param() kerana ia:

    • Bersihkan parameter kepada jenis yang diisytiharkan
    • Dapatkan parameter secara automatik daripada $_GET atau $_POST (penting dalam kes ini kerana apabila anda menyerahkan borang, parameter 'id' akan menjadi sebahagian daripada data POST)
    • Kendalikan parameter yang hilang dengan menggunakan nilai lalai (optional_param) atau menghentikan dan memaparkan mesej ralat (required_param)

    Jadi akses anda kepada $_GET['id'] hendaklah digantikan dengan:

    $urlid = optional_param('id', null, PARAM_INT);

    balas
    0
  • Batalbalas