Das Moodle-Formular kann nach der Einreichung nicht überprüft werden
P粉287726308
2023-08-28 21:01:24
<p>Ich versuche ein Formular zu erstellen, dessen Struktur von Parametern in der URL abhängt. Wenn in der URL keine Parameter angegeben sind, sollte eine Fehlermeldung angezeigt werden. Führen Sie basierend auf der ID eine Datenbankabfrage durch und füllen Sie die Formulardaten aus. </p>
<p>Beispiel-URL: http://127.0.0.1/local/group/signin.php?groupid=14</p>
<p>Leider kann mein Formular nicht validiert werden, wenn ich das Formular durch Klicken auf die Aktionsschaltfläche absende. Es springt zu http://127.0.0.1/local/group/signin.php und zeigt die Fehlermeldung „Gruppe nicht gefunden“ an, da die URL keine Parameter enthält. </p>
<p>Was mache ich hier falsch? </p>
<p>signinform.php:</p>
<pre class="brush:php;toolbar:false;">class signinform erweitert Moodleform {
öffentliche Funktionsdefinition() {
global $DB;
global $USER;
$mform = $this->_form;
$urlid = $this->_customdata['id'] // Die übergebene Gruppen-ID abrufen
$message = 'Gruppe nicht gefunden';
if(is_null($urlid)){
$mform->addElement('html', '<h3>'.corenotification::error($message).'</h3>');
}
anders{
// Formulare erstellen, SQL-Abfragen ausführen usw.
$this->add_action_buttons(true, 'Submit');
}
}
Funktionsvalidierung($data, $files) {
return array();
}
}</pre>
<p>Login.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("Register");
$PAGE->set_heading("Eine Gruppe registrieren");
global $DB;
global $USER;
$urlid = $_GET["id"];
$to_form = array('id' => $urlid); // Übergeben Sie die Gruppen-ID an das Formular
$mform = new signinform(null, $to_form);
$homeurl = new moodle_url('/');
if ($mform->is_cancelled()) {
weitergeleitet($homeurl, 'Abgebrochen.'); // Nur zum Testen, niemals hier eingeben
} else if ($fromform = $mform->get_data()) {
Redirect($homeurl, 'Verification in progress'); // Nur zum Testen, niemals hier eingeben
}
echo $OUTPUT->header();
$mform->display();
echo $OUTPUT->footer();</pre></p>
您需要在表单中添加一个隐藏字段,该字段包含必须传递到页面的'id',否则,当表单提交时,该id将不再存在于该页面的参数中。
例如(在definition()中)
此外,在Moodle中,您不应直接访问$_GET - 使用包装函数required_param()或optional_param(),因为它们:
因此,您对$_GET['id']的访问应替换为: