【问题标题】:Whats the possibility of one updating a database field with a form having a drop down without changing the value of the drop down field在不更改下拉字段的值的情况下使用具有下拉列表的表单更新数据库字段的可能性是什么
【发布时间】:2016-07-29 22:01:05
【问题描述】:

假设我使用下拉菜单将数据输入到 mysql 数据库中:

<div>
  <input name="name" type="text" id="name" placeholder="Enter Name"></div>
<div>
  <select name="position" id="position" type="text">
    <option selected="selected">Select</option>
    <option value="A">A</option>                        
    <option value="B">B</option>
    <option value="C">C</option>
  </select>
</div>

使用普通文本字段,我可以简单地包含值字段以在表格中显示最初输入的数据在表格中。并更改它,以便当我提交表单时,它会更新相关字段。

<div>
  <select name="position" id="position" type="text" value="<?php echo $row_position['Position']; ?>>
    <option selected="selected">Select</option>
    <option value="A">A</option>                        
    <option value="B">B</option>
    <option value="C">C</option>
  </select>
</div>

所以假设我不想更新与下拉列表相关的字段,我该怎么做?因为发生的情况是,一旦我提交表单而不从下拉列表中选择任何选项,它会从列表中选择第一个选项,即“选择”选项,并使用它来更新数据库中的相关字段。

【问题讨论】:

  • 保持第二个 html sn-p 中的所有内容,只需将disabled 属性添加到第一个选项。
  • @marmeladze 如果我将禁用添加到第一个选项,那么它只会继续选择第二个选项。我在想的是,如果我不从下拉列表中选择一个选项,那么它不应该更新数据库中的字段
  • 为什么不把最初输入的数据设为选中的呢?
  • 另一种可能性是给“选择”值 -1 并在服务器端检查是否应该更新 (if($_POST['position']&gt;0))。
  • 也感谢@marmeladze 的贡献。

标签: php html


【解决方案1】:

我建议至少采取两个步骤来使其用户友好并实现您的目标:

首先,选择最初输入的选项(如果可用):

<?php 
    $positions = Array("A", "B", "C");
?>
<div>
  <select name="position" id="position">
      <option value="-1">Select</option>
      <?php
      foreach($positions as $v) {
         $selected = ($row_position['Position']===$v) ? "selected" : "";
         echo "<option value='$v' $selected>$v</option>";
      }
      ?>
  </select>
</div>

并在接收 php-script 时检查您是否收到了有效的选项,否则发送错误消息:

<?php
//other stuff...

if($_POST['position']>0) {
    // save that value
} else {
   // send error to user
}
// even more stuff..
?>

注意:在选择标签中没有type=text 也没有value=anything 可用。

【讨论】:

  • 我也试过你的建议,效果很好。将使用您的建议,因为这比我解决该问题的工作要好。谢谢大佬。
【解决方案2】:

假设您正在从数据库中获取下拉选项。

注意:数组键、变量仅用于演示目的。这可能与您的实际记录不同。

<div>
  <select name="position" id="position">
    <?php foreach($options as $option): ?>
    <option value="<?= $option['position'] ?>" <?php if($option['position'] == $current_record['position']) { echo "selected"; }  ?>> <!-- e.g. $option['id'] -->
      <?= $option['name'] ?>
    </option>                        
    <? endforeach; ?>
  </select>
</div>

【讨论】:

    【解决方案3】:

    解决问题的方法是简单地将数据库中的值添加到 selectedoption 或第一个选项字段。因此,默认情况下,不更改下拉列表,选择具有数据库值的第一个选项。所以不会有任何变化。

    <div>
    <div><?php echo $row_position['Position']; ?></div>
      <select name="position" id="position">
        <option value="<?php echo $row_position['Position']; ?>Select to Change</option>
        <option value="A">A</option>                        
        <option value="B">B</option>
        <option value="C">C</option>
      </select>
    </div>
    

    这为问题提供了一个简单或直接的解决方案。 仍然会尝试其他建议,看看效果如何。谢谢大家。

    【讨论】:

    • 正如我在评论中所说的那样,这会起作用,但是很hacky并且对用户不友好,因为您没有显示用户之前选择的内容。不过我很高兴我能帮上忙。 (并去掉 select-tag 中的 type=text 和 value。它们不存在)
    • @Jeff 我在上面添加了一个 div 来显示用户之前存储的内容。
    • 也会尝试你的建议。再次感谢。如果我对您的建议有任何问题,会通知您。
    猜你喜欢
    • 2016-09-20
    • 1970-01-01
    • 2011-11-22
    • 2021-06-20
    • 2013-10-23
    • 1970-01-01
    • 1970-01-01
    • 2020-02-14
    • 1970-01-01
    相关资源
    最近更新 更多