【问题标题】:Pre-populating and compare select field with 'selected' option预填充和比较选择字段与“选定”选项
【发布时间】:2017-12-28 15:49:39
【问题描述】:

我将表单数据从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>

【问题讨论】:

    标签: php html forms


    【解决方案1】:

    当条件满足时,您可以检查并标记为选中。一个例子是:

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

    【讨论】:

      【解决方案2】:

      您可以像这样将变量与选项标签中的值进行比较:

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

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

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

      然后在选择元素中:

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

      【讨论】:

        【解决方案3】:

        如果您打算做很多这样的事情,我的建议是构建一个 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' );
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2019-12-07
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2017-08-11
          相关资源
          最近更新 更多