用户点击提交按钮PHP后,将Dropbox自动重置为第一个值

时间:2013-05-13 15:25:21

标签: php drop-down-menu concrete5

用户点击提交按钮后,如何将下拉菜单重置为菜单的“空白”选项?我使用的是使用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 个答案:

答案 0 :(得分:0)

我认为您可以使用(javascript)onsubmit操作扩展表单标记,然后执行重置。

答案 1 :(得分:0)

由于这是表单提交,您只想在视图中更改“下拉框”/选择的值。提交后,您将有一个新的页面加载;所以,在每种情况下,您都希望显示默认值,而不是$selectHost的当前值

在您看来,请更改此

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

到这个

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

根据http://www.concrete5.org/documentation/developers/forms/standard-widgets

答案 2 :(得分:0)

我非常肯定的是,没有办法覆盖C5的接受POSTed值并将其作为默认值的愿望。即使像TWR建议的那样,也指定了一个值。 (这通常是一件好事,因为如果页面被POST到并且出现错误,则您不想显示数据库中的值;您希望显示POST中的内容)。

您可以非常轻松地覆盖表单助手。

但是,我建议您在成功提交后进行重定向(不要在错误后重定向 - 然后将POSTed值有用)到页面。您可以使用确认消息重定向到另一个页面或同一页面。有关使用重定向的示例,请参阅https://github.com/concrete5/concrete5/blob/master/web/concrete/core/controllers/single_pages/dashboard/blocks/stacks.php#L23

这是针对您的问题的最佳做法,但也因为使用您当前的代码,如果有人点击刷新,它会重新保存数据并重新授权主机。

答案 3 :(得分: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>