1

ユーザーが送信ボタンを押した後、ドロップダウン メニューをメニューの「空白」オプションにリセットするにはどうすればよいですか? PHP と HTML で設定された MVC と、concrete5ライブラリを使用しています。前もって感謝します!これが私がこれまでに持っているものです:

コントローラーコード:

public function authorize() {
    $selectHost = array('' => '');
    foreach ($this->host->getHostInfo() as $row) {
        if (isset($row['HARDWARE_id'])) {
            $selectHost[$row['id']] = $row['host'];
        }
    }
    $this->set('selectHost',$selectHost);
    $postCheck=array(array('param' => 'host',
                           'check' => '^[0-9]{1,50}$',
                           'error_msg' => 'Invalid Host ID'),
    );
    $post = scrub($_POST,$postCheck);
    if (isset($post['host'])) {
        $this->host->authorize($post['host']);
        $this->set('test', "<p>  The host has successfully been authorized.</p>");
    }
    else{
        $this->set('failed', "<p>Invalid Host ID</p>");
    }
}

ビューコード:

<form method="post" enctype="multipart/form-data" action="<?=$this->action('authorize')?>">
<?php
    $form = Loader::helper('form');
    print $form->label('host', 'Host: ');
    print $form->select('host', $selectHost);
?>
<?php   
    print $form->submit('Submit','Submit');
    echo $test;
    echo $failed;
?>
</form>
4

4 に答える 4

0

Concrete5 フォーム ヘルパーが意図したとおりに動作しないという問題がある場合は、それらを使用しないでください。代わりに、通常の HTML フォーム入力を使用してください。

<form method="post" enctype="multipart/form-data" action="<?=$this->action('authorize')?>">
<label for="host">Host: </label>
<select id="host" name="host">
<?php foreach ($selectHost as $value => $text): ?>
    <option value="<?php echo htmlentities($value); ?>"><?php echo htmlentities($text); ?></option>
<?php endforeach; ?>
</select>

<input type="submit" value="Submit" />
<?php   
    echo $test;
    echo $failed;
?>
</form>
于 2013-05-16T00:26:50.453 に答える
0

POSTされた値を取得してそれをデフォルトとして使用したいというC5の欲求を無効にする方法がないことは、私はかなり確信しています。TWR が提案したように、値を指定したとしても。(これは通常、良いことです。なぜなら、ページが POST されてエラーが発生した場合、データベースからの値を表示するのではなく、POST に含まれていたものを表示したいからです)。

フォーム ヘルパーは非常に簡単にオーバーライドできます。

ただし、送信が成功した後にページにリダイレクトすることをお勧めします (エラーの後にリダイレクトしないでください。POST された値が役立ちます)。理想的には確認メッセージを使用して、別のページまたは同じページにリダイレクトできます。リダイレクトの使用例については、https://github.com/concrete5/concrete5/blob/master/web/concrete/core/controllers/single_pages/dashboard/blocks/stacks.php#L23を参照してください。

これは問題のベスト プラクティスですが、現在のコードでは、誰かが更新を行うと、データが再送信され、ホストが再承認されるためです。

于 2013-05-15T23:24:58.580 に答える
0

これはフォームの送信であるため、ビューで「ドロップ ボックス」/選択の値を変更するだけです。送信後、新しいページが読み込まれます。したがって、どの場合でも、現在の値ではなく、デフォルト値を表示する必要があります。$selectHost

あなたの見解では、これを変更してください

print $form->select('host', $selectHost);

これに

print $form->select('host', $selectHost, null);

http://www.concrete5.org/documentation/developers/forms/standard-widgetsによると

于 2013-05-13T15:32:04.143 に答える