ホームページ  >  に質問  >  本文

Moodle フォームは送信後に検証できません

<p>構造が URL のパラメータに依存するフォームを作成しようとしています。 URL にパラメータが指定されていない場合は、エラー メッセージが表示されます。 ID に基づいてデータベース クエリを実行し、フォーム データを入力します。 </p> <p>URL の例: http://127.0.0.1/local/group/signin.php?groupid=14</p> <p>残念ながら、アクション ボタンをクリックしてフォームを送信すると、フォームが検証されません。 http://127.0.0.1/local/group/signin.php にジャンプし、URL にパラメータがないため、「グループが見つかりません」というエラー メッセージが表示されます。 </p> <p>ここで私の何が間違っているのでしょうか? </p> <p>signinform.php:</p> <pre class="brush:php;toolbar:false;">class Signinform extends Moedleform { パブリック関数定義() { グローバル $DB; グローバル $USER; $mform = $this->_form; $urlid = $this->_customdata['id']; // 渡されたグループIDを取得する $message = 'グループが見つかりません'; if(is_null($urlid)){ $mform->addElement('html', '<h3>'.\core\notification::error($message).'</h3>'); } それ以外{ // フォームの構築、SQL クエリの実行など。 $this->add_action_buttons(true, '送信'); } } 関数の検証($data, $files) { 戻り配列(); } }</pre> <p>Login.php:</p> <pre class="brush:php;toolbar:false;">$PAGE->set_url(new modle_url('/local/schedule/signin.php?')); $PAGE->set_context(\context_system::instance()); $PAGE->set_pagelayout('base'); $PAGE->set_title("登録"); $PAGE->set_Heading("グループを登録"); グローバル $DB; グローバル $USER; $urlid = $_GET["id"]; $to_form = array('id' => $urlid); // グループIDをフォームに渡します $mform = 新しいサインインフォーム(null, $to_form); $homeurl = 新しいmoodle_url('/'); if ($mform->is_cancelled()) { redirect($homeurl, 'Cancelled.'); // テスト目的のみなので、ここには入力しないでください else if ($fromform = $mform->get_data()) { redirect($homeurl, '検証中'); // テスト目的のみなので、ここには入力しないでください } echo $OUTPUT->header(); $mform->display(); echo $OUTPUT->footer();</pre></p>
P粉287726308P粉287726308390日前478

全員に返信(1)返信します

  • P粉680487967

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

    ページに渡す必要がある「ID」を含む隠しフィールドをフォームに追加する必要があります。追加しないと、フォームが送信されたときに ID がページのパラメーターに存在しなくなります。

    例 (definition() 内)

    リーリー

    さらに、Moodle では $_GET に直接アクセスしないでください。ラッパー関数 required_pa​​ram() またはOptional_param() を使用してください。理由は次のとおりです。

    • パラメータを宣言された型にクリーンアップする
    • $_GET または $_POST からパラメータを自動的に取得します (フォームを送信すると、「id」パラメータが POST データの一部になるため、この場合は重要です)
    • デフォルト値 (optional_param) を適用するか、停止してエラー メッセージを表示する (required_pa​​ram) ことで、不足しているパラメーターを処理します。
    したがって、$_GET['id'] へのアクセスは次のように置き換える必要があります:

    リーリー

    返事
    0
  • キャンセル返事