【问题标题】:How do I populate the selected value of drop down lists with Mysql data?如何使用 Mysql 数据填充下拉列表的选定值?
【发布时间】:2008-10-15 17:53:52
【问题描述】:

我需要由 sql 数据库填充表单输入的值。我的代码适用于所有文本和文本区域输入,但我无法弄清楚如何将数据库值分配给下拉列表,例如。下文中的“财产类型”。它围绕获取“选择的选项”来表示数据库中保存的值。

这是我的代码:

$result = $db->sql_query("SELECT * FROM ".$prefix."_users WHERE userid='$userid'");    
$row = $db->sql_fetchrow($result);

echo "<center><font class=\"title\">"._CHANGE_MY_INFORMATION."</font></center><br>\n";
echo "<center>".All." ".fields." ".must." ".be." ".filled."  
<form name=\"EditMyInfoForm\" method=\"POST\" action=\"users.php\" enctype=\"multipart/form-data\">           
  <table align=\"center\" border=\"0\" width=\"720\" id=\"table1\" cellpadding=\"2\" bordercolor=\"#C0C0C0\">        
    <tr>                
      <td align=\"right\">".Telephone." :</td>                
      <td>
        <input type=\"text\" name=\"telephone\" size=\"27\" value=\"$row[telephone]\"> Inc. dialing codes
      </td>        
    </tr>        
    <tr>                
      <td align=\"right\">".Type." ".of." ".property." ".required." :</td>                                          
      <td>Select from list:
        <select name=\"req_type\" value=\"$row[req_type]\">                   
          <option>House</option>                  
          <option>Bungalow</option>                  
          <option>Flat/Apartment</option>                  
          <option>Studio</option>                  
          <option>Villa</option>                  
          <option>Any</option>                  
         </select>  
       </td>          
      </tr>
....

【问题讨论】:

标签: php mysql


【解决方案1】:

使用您当前的代码:

<?php
  $options = array('House', 'Bungalow', 'Flat/Apartment', 'Studio', 'Villa', 'Any');

  foreach($options as $option) {
    if ($option == $row['req_type']) {
      print '<option selected="selected">'.$option.'</option>'."\n";
    } else {
      print '<option>'.$option.'</option>'."\n";
    }
  }
?>

假设$row['req_type']$options 中的值之一。我强烈建议引用您的数组元素(即$row['req_type'] 而不是$row[req_type]。后一种方法会在error_reporting(E_ALL) 下产生错误

您可能还想查看phpbuilder.com 等资源。有些文章已经过时了,但会为您提供一些关于如何更好地构建代码的基础知识。 (例如,将您的 HTML 与您的 PHP 代码分开会大大提高这种情况下的可读性)。

edit:根据 cmets,显示的任何信息都应正确转义(例如,参见 htmlentities())。

【讨论】:

  • 我认为你应该逃避你输出的一切
  • 当然,虽然查看 OP 提供的代码,但似乎还有很多需要改进的地方
【解决方案2】:

奈杰尔,

查看带有复选标记的答案。它让我开始解决我的问题。首先我从表中选择我的数据,然后我选择我想要在下拉菜单中显示的数据。如果主表中的数据与所选下拉表中的数据匹配,则会回显。

$query9 = "SELECT *
       FROM vehicles
       WHERE VID = '".$VID."'
       ";

$result9=mysql_query($query9);
while($row9 = mysql_fetch_array($result9)){
    $vdate=$row9['DateBid'];
    $vmodelid=$row9['ModelID'];
    $vMileage=$row9['Mileage'];
    $vHighBid=$row9['HighBid'];
    $vPurchased=$row9['Purchased'];
    $vDamage=$row9['Damage'];
    $vNotes=$row9['Notes'];
    $vKBBH=$row9['KBBH'];
    $vKBBM=$row9['KBBM'];
    $vKBBL=$row9['KBBL'];
    $vKBBR=$row9['KBBR'];
    $vYID=$row9['YID'];
    $vMID=$row9['MID'];
    $vModelID=$row9['ModelID'];
    $vELID=$row9['ELID'];
    $vECID=$row9['ECID'];
    $vEFID=$row9['EFID'];
    $vColorID=$row9['ColorID'];
    $vRID=$row9['RID'];
    $vFID=$row9['FID'];
    $vDID=$row9['DID'];
    $vTID=$row9['TID'];
}

$query1 = "SELECT * FROM year ORDER BY Year ASC";
$result1=mysql_query($query1);
echo "<select  name='Year'>";
while($row1 = mysql_fetch_array($result1)){
    echo "<option value = '{$row1['YID']}'";
    if ($vYID == $row1['YID'])
        echo "selected = 'selected'";
    echo ">{$row1['Year']}</option>";
}
echo "</select>";

【讨论】:

    【解决方案3】:

    可能效率不高,但它很简单并且可以完成工作。

    $dropdown = str_replace("<option value=\"".$row[column]."\">","<option value=\"".$row[column]."\" selected>",$dropdown);
    

    【讨论】:

      【解决方案4】:

      谢谢欧文。您的代码看起来很完美,但给出了很多 php 错误。我将其简化为此,但只是将空格作为选项:

      <td>Select from list: <select name=\"req_type\">        
      
      $option = array('House', 'Bungalow', 'Flat/Apartment', 'Studio', 'Villa', 'Any');
      
      foreach($option as $option) {  
      if ($option == $row[req_type]) {    
          <option selected>$option</option>} 
      else {    
      <option>$option</option>}};
      </select></td>
      

      【讨论】:

      • 我检查了我的代码并纠正了我发现的一个错误,请比较结果。请注意,您不能混合使用 HTML/PHP,如果您使用的是 PHP,则必须在 标记内(我已将它们添加到我的示例中)。请注意您发布的代码(我刚刚清理过)和我的代码之间的差异。
      【解决方案5】:
              <?php
                  $result = $db->sql_query("SELECT * FROM ".$prefix."_users WHERE userid='$userid'");    
                  $row = $db->sql_fetchrow($result);
      
                  // options defined here
                  $options = array('House', 'Bungalow', 'Flat/Apartment', 'Studio', 'Villa', 'Any');
      
             ?>     
                  <center><font class="title"><?php echo _CHANGE_MY_INFORMATION; ?></font></center><br />
      
                  <center> All fields must be filled </center> 
                  <form name="EditMyInfoForm" method="POST" action="users.php" enctype="multipart/form-data">           
                    <table align="center" border="0" width="720" id="table1" cellpadding="2" bordercolor="#C0C0C0">        
                      <tr>                
                        <td align="right">Telephone :</td>                
                        <td>
                          <input type="text" name="telephone" size="27" value="<?php echo htmlentities($row['telephone']); ?>" /> Inc. dialing codes
                        </td>        
                      </tr>        
                      <tr>                
                        <td align="right">Type of property required :</td>                                          
                        <td>Select from list:
                          <select name="req_type">
                        <?php foreach($options as $option): ?>     
                            <option value="<?php echo $option; ?>" <?php if($row['req_type'] == $option) echo 'selected="selected"'; ?>><?php echo $option; ?></option>                  
                        <?php endforeach; ?>
                           </select>  
                         </td>          
                        </tr>
      
      ...
      

      哎呀..有点太过分了。

      【讨论】:

      • 嗨,安迪。谢谢。为了停止 php 错误,我需要通过删除 ($row['req_type'] 中的单引号并在双引号之前添加 / 斜杠来修改您的代码。完成后,我在下拉列表中得到的只是一个 ' >'。有没有我可以添加到每个选项而不是使用数组的代码?奈杰尔
      • 我知道我应该将 HTML 与 PHP 分开,但由于我没有浏览整个网站,您能否推荐不分开就可以工作的选项?另外,我知道我应该使用 HTMLENTITIES,但是当我在显示的值中得到 HTMLENTITIES 这个词时?我知道,我有点傻奈杰尔
      【解决方案6】:

      感谢大家的帮助。虽然我无法得到任何工作的答案,但它给了我一些想法,我已经完成了这项工作!我最终走了一个长篇大论的方式,但是嘿,如果它没有坏,请不要修复它。

      if ($row[$req_type]=='House'){
          $sel_req_type1='selected';
      }
      else if ($row[$req_type]=='Bugalow'){
          $sel_req_type2='selected';
      }
      

      等等。等等等等。

      在表格中:

      <option $sel_req_type1>House</option>
      <option $sel_req_type2>Bulgalow</option>
      

      等等。等等等等。

      我还有其他问题需要克服,即文本字段的 htmlentities 和引用数组元素(即 $row['req_type'] 而不是 $row[req_type]。但我会在另一个问题上问这个问题。再次感谢

      【讨论】:

        【解决方案7】:

        这是另一种处理方式。

        <?php
        $query = "SELECT * FROM ".$prefix."_users WHERE userid='$userid'";
        $result = mysql_query($query); ?>
        $options = array('House', 'Bungalow', 'Flat/Apartment', 'Studio', 'Villa', 'Any');
        <select name="venue">
        <?php
            while($row = mysql_fetch_array($result)) {
                print '<option value="'.$option.'"';
                if($row['req_type'] == $option) {
                    print 'selected';
                }
                print '>'.$option.'</option>';
            } 
        ?>
        </select>
        

        【讨论】:

        • 嗨布拉德。谢谢,但您没有在任何地方列出选项?选项不保存在数据库中,只有选定的值。
        • 感谢您的澄清。我想知道这些选项是从哪里来的。我在我的一个网站中有一个表格,其中存储了所有不同的项目,它会自动加载到一个选择下拉框中,这很好,因为我还引用该表格来执行其他功能。
        • 再次感谢布拉德。我不得不去掉 req_type 上的单引号来停止空格错误并在双引号之前添加 \ 斜杠。但是,完成后,我得到了在下拉列表之外和下拉列表内显示的选项列表 ';} ?
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-08-27
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多