Le formulaire Moodle ne peut pas être vérifié après la soumission
P粉287726308
2023-08-28 21:01:24
<p>J'essaie de créer un formulaire dont la structure dépend des paramètres de l'URL. Si aucun paramètre n'est spécifié dans l'URL, un message d'erreur doit s'afficher. En fonction de l'identifiant, effectuez une requête de base de données et remplissez les données du formulaire. </p>
<p>Exemple d'URL : http://127.0.0.1/local/group/signin.php?groupid=14</p>
<p>Malheureusement, lorsque je soumets le formulaire en cliquant sur le bouton d'action, mon formulaire ne parvient pas à être validé. Il passe à http://127.0.0.1/local/group/signin.php et affiche le message d'erreur "Groupe introuvable" car il n'y a aucun paramètre dans l'URL. </p>
<p>Qu'est-ce que je fais de mal ici ? </p>
<p>signinform.php:</p>
<pre class="brush:php;toolbar:false;">class signinform étend moodleform {
définition de fonction publique() {
$DB globale ;
$ UTILISATEUR global ;
$mform = $this->_form;
$urlid = $this->_customdata['id']; // Récupère l'ID de groupe transmis
$message = 'Groupe introuvable';
si(is_null($urlid)){
$mform->addElement('html', '<h3>'.corenotification::error($message).'</h3>');
}
autre{
// Créez des formulaires, exécutez des requêtes SQL, etc.
$this->add_action_buttons(true, 'Soumettre');
}
}
validation de la fonction ($ données, $ fichiers) {
return array();
}
}</pré>
<p>Connexion.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("S'inscrire");
$PAGE->set_heading("Enregistrer un groupe");
$DB globale ;
$ UTILISATEUR global ;
$urlid = $_GET["id"];
$to_form = array('id' => $urlid); // Passe l'ID du groupe au formulaire
$mform = nouveau signinform(null, $to_form);
$homeurl = new moodle_url('/');
if ($mform->is_cancelled()) {
redirect($homeurl, 'Cancelled.'); // Uniquement pour les tests, ne jamais entrer ici
} sinon if ($fromform = $mform->get_data()) {
redirect($homeurl, 'Verification in progress'); // Uniquement pour les tests, ne jamais entrer ici
}
echo $OUTPUT->en-tête();
$mform->display();
echo $OUTPUT->footer();</pre></p>
Vous devez ajouter un champ masqué à votre formulaire qui contient l'identifiant qui doit être transmis à la page, sinon lorsque le formulaire sera soumis, l'identifiant ne sera plus présent dans les paramètres de la page.
Par exemple (dans la définition())
De plus, dans Moodle, vous ne devez pas accéder directement à $_GET - utilisez les fonctions wrapper requirejs_param() ou optionnel_param() car elles :
Votre accès à $_GET['id'] doit donc être remplacé par :