从下拉列表中保留动态选择的值,但仍可以在提交后查看列表

时间:2014-04-10 15:06:22

标签: php mysql

我有以下表格:

<div id="Quick_find_container">
    <form action="" method="post" target="_self">
        <div id="qcategory_1">Product</div>
            <div id="qcategory">
                <select name="Category" class="dropmenu" id="Category"onchange="this.form.submit()">
                    <option value="">Any</option>
                    <option value="Keyboard"<?php if ($_POST['Category']=="Keyboard") {echo "selected='selected'"; } ?>>Keyboard</option>
                    <option value="Piano"<?php if ($_POST['Category']=="Piano") {echo "selected='selected'"; } ?>>Piano</option>
                </select>
            </div>
            <div id="qbrand_1">Brand</div>
            <div id="qbrand"><select name='Manufacturer' onchange="this.form.submit()">
<?php  
            echo '<option value="">Any</option>';

        $value = $_POST['Manufacturer'];

            while ($row = mysql_fetch_array($RS_Search)) {
                echo "<option value=" . $row['Manufacturer'] . " ' . (selected == $value ? ' selected' : '') . '>" . $row['Manufacturer'] . "</option>";
            }
?>
                </select>
            </div>
            <div id="qsubmit">
                <input name="Search2" type="submit"  id="Search2" value="Submit">
            </div>
        </form>
    </div>
    <?php echo $_POST['Category']; ?>
    <?php echo $_POST['Manufacturer']; ?>

Echo post Category和Manufacturer纯粹是为了看它提交的内容。

我的问题是第二个下拉菜单。我希望在选择某些内容后显示所选值。目前,即使POST_ [制造商&#39;]的输出正确,它也会跳回到默认值Any。 有没有办法像第一个下拉菜单中那样显示所选值?我仍然希望保留值,以便从数据库中进行选择。但只显示所选值。

欢迎任何帮助

2 个答案:

答案 0 :(得分:1)

你选择回答选项的行有很多引号问题。这将解决它:

while ($row = mysql_fetch_array($RS_Search)) {
    $selected = $_POST['Manufacturer'] == $row['Manufacturer'] ? 'selected' : '';
    echo '<option ' . $selected . ' value="' . htmlspecialchars($row['Manufacturer']) . '">' . htmlspecialchars($row['Manufacturer']) . '</option>';
}

附注:在将变量输出到HTML中以防止XSS时,请记住使用htmlspecialchars()或类似内容。

答案 1 :(得分:0)

从理论上讲,你在那里的代码可能会工作,而我已经像这样做了

while ($row = mysql_fetch_array($RS_Search)) {
    $selected = ($_POST['Manufacturer'] == $row['Manufacturer']) ? 'selected="selected":'';
    echo '<option '.$selected.'>' . $row['Manufacturer'] . '</option>";
}?>

如果标签内有相同的内容,则不需要值。您还在标签中遗漏了一些引号。学习简化代码,以便更容易理解。