Как мне заполнить выбранное значение раскрывающихся списков данными Mysql? - PullRequest
2 голосов
/ 15 октября 2008

Мне нужно, чтобы значения входных данных формы заполнялись базой данных 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>
....

Ответы [ 7 ]

5 голосов
/ 15 октября 2008

используя ваш текущий код:

<?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 : согласно комментариям, любая отображаемая информация должна быть экранирована правильно (см., Например, htmlentities()).

1 голос
/ 28 мая 2010

Найджел,

См. Ответ с галочкой рядом с ним. Иди ко мне в решении моей проблемы. Сначала я выбираю свои данные из таблицы, затем я выбираю данные, которые я хочу отобразить в раскрывающемся меню. Если данные из первичной таблицы совпадают с данными из выбранной раскрывающейся таблицы, выводится эхо.

$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>";
0 голосов
/ 16 октября 2008

Спасибо всем за вашу помощь. Хотя я не мог получить ни одного ответа на работу, это дало мне идеи, и я выполнил работу! Я закончил тем, что пошел по этому многословному пути, но эй-хо, если это не сломано, не исправляйте это.

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>

и т.д.. и т. д.

У меня все еще есть другие проблемы, которые необходимо преодолеть, т. Е. Недостатки для текстовых полей и процитировать элементы массива (т. Е. $row['req_type'] вместо $row[req_type]. Но я задам этот вопрос по другому вопросу. Еще раз спасибо

0 голосов
/ 16 октября 2008
        <?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>

...

упс .. слишком увлеклась.

0 голосов
/ 16 октября 2008

Спасибо, Оуэн. Ваш код кажется идеальным, но выдает много ошибок 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>
0 голосов
/ 16 октября 2008

Может быть неэффективным, но все просто и выполняет свою работу.

$dropdown = str_replace("<option value=\"".$row[column]."\">","<option value=\"".$row[column]."\" selected>",$dropdown);
0 голосов
/ 15 октября 2008

Вот еще один способ сделать это.

<?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>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...