预先填充并比较选择字段和“已选择”#39;选项

时间:2017-07-22 17:13:07

标签: php html forms

我将表单数据从home.php提取到results.php并使用$_GET['xxxxx']预先填充其他表单的字段。我可以填充input个字段,但是如果将option字段和$sale_type与所选字段进行比较,如果相等?

home.php

<form action="results.php" method="GET">

    <input id="address" name="address" type="text" class="form-control1"/>

    <select type="text" name="sale_type" placeholder="Sale Type">
        <option value="Sale">For Sale</option>
        <option value="Rent">To Rent</option>
    </select>

   <input name="submit" type="SUBMIT" value="Next" class="form-control1">

</form>

results.php

选项字段已经填充,以确保表单在没有home.php结果的情况下使用。我需要将$sale_type值与name="sale_type选项进行比较,如果相等则将该选项值更改为选中。

    $address = $_GET['address'];
    $sale_type = $_GET['sale_type']; ?>

    <form method="POST">

        <input id="address" name="address" type="text" value='<?php echo $address; ?>'>

        <select type="text" name="sale_type" placeholder="Sale Type">
            <option value="Sale">For Sale</option>
            <option value="Rent">To Rent</option>
        </select>

        <button type="submit" id="filter">Search</button>
        <input type="hidden" name="action" value="ek_search">

    </form>

我想要的结果

    $address = $_GET['address'];
    $sale_type = $_GET['sale_type']; ?> //If value is Sale

    <form method="POST">

        <input id="address" name="address" type="text" value='<?php echo $address; ?>'>

        <select type="text" name="sale_type" placeholder="Sale Type">
            <option value="Sale" selected>For Sale</option> //Change to selected if equal
            <option value="Rent">To Rent</option>
        </select>

        <button type="submit" id="filter">Search</button>
        <input type="hidden" name="action" value="ek_search">

    </form>

3 个答案:

答案 0 :(得分:0)

您可以检查,然后在条件满足时标记为已选择。其中一个例子是:

 <option value="Sale"  <?php if(condition) echo "selected" ?> >For Sale</option>

答案 1 :(得分:0)

如果您要完全做这件事,我的建议是构建一个PHP函数。否则,你最终会得到一堆混合的HTML / PHP来检查条件。

这使您可以在需要时快速设置和显示下拉列表。

像这样的东西会做你想要的并且可以重复使用:

// Function to generate the HTML for a select
function dropdown_array( $name, $value, $array, $placeholder = '' ) {
    $temp_input = '<select name="' . $name . '"';
    $temp_input .= ( $placeholder ) ? ' placeholder="' . $placeholder . '"' : '';
    $temp_input .= '>' . PHP_EOL;

    if ( is_array( $array ) ) {
        foreach ( $array as $val => $text ) {
            $temp_input .= '<option value="' . $val . '"';
            if ( $value === $val ) {
                $temp_input .= ' selected';
            }
            $temp_input .= '>' . $text . '</option>' . PHP_EOL;
        }
    }

    $temp_input .= '</select>' . PHP_EOL;

    return $temp_input;
}

然后,在您的情况下,使用情况如下:

$array = array( 'Sale' => 'For Sale', 'Rent' => 'To Rent' );
echo dropdown_array( 'sale_type', $sale_type, $array, 'Sale Type' );

答案 2 :(得分:0)

您可以将变量与value中的值进行比较,如下所示:

<option value="Sale" <?= ($sale_type === 'Sale') ? 'selected' : ''; ?>>For Sale</option>

另一个选项,如果你愿意的话,是设置一个sale_types数组。您可以遍历选项并在那里查看,而不是检查每个单独的选项值。像这样:

$sale_types = [
    'Sale' => 'For Sale', 
    'Rent' => 'To Rent',
    'SomeOtherType' => 'Something Else'
];

然后在select元素中:

<? foreach ($sale_types as $sale_value => $sale_option): ?>
<option value="<?= $sale_option; ?>" <?= ($sale_type === $sale_option) ? 'selected' : ''; ?>><?= $sale_value; ?></option>
<? endforeach; ?>
相关问题