Das Moodle-Formular kann nach der Einreichung nicht überprüft werden
P粉287726308
P粉287726308 2023-08-28 21:01:24
0
1
474
<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>
P粉287726308
P粉287726308

Antworte allen(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);
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage
Über uns Haftungsausschluss Sitemap
Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!