Maison  >  Questions et réponses  >  le corps du texte

Le formulaire Moodle ne peut pas être vérifié après la soumission

<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>
P粉287726308P粉287726308440 Il y a quelques jours522

répondre à tous(1)je répondrai

  • P粉680487967

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

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

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

    De plus, dans Moodle, vous ne devez pas accéder directement à $_GET - utilisez les fonctions wrapper requirejs_param() ou optionnel_param() car elles :

    • Nettoyer les paramètres aux types déclarés
    • Obtenez automatiquement les paramètres de $_GET ou $_POST (important dans ce cas car lorsque vous soumettez le formulaire, le paramètre 'id' fera partie des données POST)
    • Gérez les paramètres manquants en appliquant les valeurs par défaut (optional_param) ou en arrêtant et en affichant les messages d'erreur (required_param)

    Votre accès à $_GET['id'] doit donc être remplacé par :

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

    répondre
    0
  • Annulerrépondre