【问题标题】:How to preselect drop down choices and checkbox options in a form (PHP/MySQL)?如何在表单(PHP/MySQL)中预选下拉选项和复选框选项?
【发布时间】:2010-06-20 13:55:00
【问题描述】:

我正在创建一个更新表单,其中从 mysql 数据库中获取先前提交的信息以填充当前表单。这就是我目前所拥有的:

$select = mysql_query("SELECT * FROM some_table WHERE id = $id");
while ($return = mysql_fetch_assoc($select)) {
    $name = $return['name'];
    $bio = $return['bio'];
    $maritalStatus = $return['marital_status'];
    $favFood = $return['fav_food'];
}

<form action="page.php" method="post">
Name: <input type="text" name="name" value="<?php echo $name; ?>" /><br />

Bio: <textarea name="bio"><?php echo $bio; ?></textarea><br />

Marital Status
<select name="maritalStatus">
   <option>Select One</option>
   <option value="married">Married</option>
   <option value="single">Single</option>
   <option value="divorced">Divorced</option>
</select><br />

Favorite Food:
Cheeze: <input type="checkbox" name="favFood" value="cheeze" />
Cake: <input type="checkbox" name="favFood" value="cake" />
Oranges: <input type="checkbox" name="favFood" value="oranges" />
</form>

如您所见,我能够很好地显示通过输入文本框或文本区域输入的数据。但是,鉴于这两个选项是数据库中实际存在的选项,如何将“婚姻状况”下拉菜单预选到“离婚”选项并选中“最喜欢的食物”下的“橙子”复选框?

【问题讨论】:

  • 问题中没有特定的 JavaScript 或 MySQL,所以我用更合适的标签重新标记了这个问题

标签: php html forms


【解决方案1】:

或者,为了避免在每个选项中添加 if,只需执行以下操作:

echo '<select name="maritalStatus">';
$status = array("Select one", "Married", "Single", "Divorced");
foreach($status as $s)
      {
      $sel = ($maritalStatus == $s) ? 'selected = "selected"' : '';
      echo '<option value="'.$s.'" '.$sel.'>'.$s.'</option>';
      }
echo '</select>';

编辑:

要从数据库中动态填充选择,您可以:

echo '<select name="maritalStatus">';

$res = mysql_query("SELECT status FROM marital_status");
while ($row = mysql_fetch_array($res))
      {
      $s = $row['status']
      $sel = ($maritalStatus == $s) ? 'selected = "selected"' : '';
      echo '<option value="'.$s.'" '.$sel.'>'.$s.'</option>';
      }
echo '</select>';

【讨论】:

  • 我怎样才能从数据库中动态填充“已婚”、“单身”、“离婚”?假设这 3 个选项不是硬编码的,而是存在于一个名为“marital_statuses”的单独表中......
【解决方案2】:
<option value="single" <?php if($_REQUEST['maritalStatus'] == 'single'): ?>selected="selected"<?php endif ?>>Single</option>

是的,你必须为每个选项做一个 if。

【讨论】:

    【解决方案3】:

    要在 select 中预选一个选项,您必须像这样设置 selected 属性:

    <option value="married"<?= $marital_status == "married" ? ' selected="selected"' : ''?>>Married</option>
    <option value="single"<?= $marital_status == "single" ? ' selected="selected"' : ''?>>Single</option>
    <option value="divorced"<?= $marital_status == "divorced" ? ' selected="selected"' : ''?>>Divorced</option>
    

    更新 或更多DRY:

    <?php foreach(array("married","single","divorced") as $status)): ?>
      <option value="<?php= $status ?>"<?php $martial_status == $status ? ' selected="selected"' : '' ?>>
        <?php= ucwords($status) ?>
      </option>
    <?php endforeach; ?>
    

    【讨论】:

    • 只有当他有短标签时才可以。
    • 我怎样才能从数据库中动态填充“已婚”、“单身”、“离婚”?假设这 3 个选项不是硬编码的,而是存在于一个名为“marital_statuses”的单独表中......
    【解决方案4】:

    复选框

    <input type="checkbox" id="id" name"checkbox" value="Option 1" checked>
    

    <input type="checkbox" id="id" name"checkbox" value="Option 1" checked="checked">
    

    选择

    <option value="Option 1"  selected>Option 1</option>
    

    <option value="Option 1" selected="selected">Option 1</option>
    

    条件选择

    使用 jsp 的示例,其中 optionString 是要比较的变量:

    <input type="checkbox" id="id" name"checkbox" value="Option 1" 
    <%=(optionString.equalsIgnoreCase("Option 1"))? "checked":""%> />
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-12-15
      • 2013-07-12
      • 1970-01-01
      • 2022-01-10
      • 1970-01-01
      • 2021-01-26
      • 2020-12-18
      • 2017-06-12
      相关资源
      最近更新 更多