Как сделать <option selected="selected">
установленный MySQL и PHP?
Мой код:
echo '<select>';
$tempholder = array();
$rs = mysql_query("SELECT * FROM id ORDER BY year");
$nr = mysql_num_rows($rs);
for ($i=0; $i<$nr; $i++){
$r = mysql_fetch_array($rs);
//if($year==$r["year"]){ $selected=' selected="selected"'; }//doesn't work so
if (!in_array($r['year'], $tempholder)){
$tempholder[$i] = $r['year'];
echo "<option>".$r["year"]."</option>";//<option$selected>...
}
}
unset($tempholder);
echo '</select>';
Помимо исправления ошибки =
/==
, вы можете избавить себя от поиска массива и упростить код, попросив базу данных вернуть каждый год только один раз в запросе:
<select>
<?php $result= mysql_query('SELECT DISTINCT year FROM id ORDER BY year'); ?>
<?php while($row= mysql_fetch_assoc($result)) { ?>
<option <?php if ($row['year']==$year) { ?>selected="selected"<?php } ?>>
<?php echo htmlspecialchars($row['year']); ?>
</option>
<?php } ?>
</select>
(Возможно, вам не понадобится htmlspecialchars()
, если это числовой год, но хорошей практикой всегда является HTML-эскейп любого обычного текста, который вы включаете в HTML-шаблон. Вы можете определить функцию с более коротким именем для выполнения echo htmlspecialchars()
, чтобы сократить время набора текста.
)
Вы должны определять $ selected
каждый раз, и вы использовали оператор присваивания вместо сравнения:
echo '<select>';
$tempholder = array();
$rs = mysql_query("SELECT * FROM id ORDER BY year");
$nr = mysql_num_rows($rs);
for ($i = 0; $i < $nr; $i++){
if($year == $r["year"]) { //not $year = $r["year"]
$selected=' selected="selected"';
}
else {
$selected = "";
}
$r = mysql_fetch_array($rs);
if (!in_array($r['year'], $tempholder)){
$tempholder[$i] = $r['year'];
echo "<option$selected>" . $r["year"] . "</option>";
}
}
unset($tempholder);
echo '</select>';
Попробуйте вот это:
echo '<select>';
$tempholder = array();
$rs = mysql_query("SELECT * FROM id ORDER BY year");
$nr = mysql_num_rows($rs);
for ($i=0; $i<$nr; $i++){
$r = mysql_fetch_array($rs);
if (!in_array($r['year'], $tempholder)){
$tempholder[$i] = $r['year'];
echo "<option".(($year==$r["year"])? ' selected="selected"' : '').">".$r["year"]."</option>";
}
}
unset($tempholder);
echo '</select>';
Он не сохраняет состояние в переменной, которую вы должны перезаписать.
И я думаю, что настоящей ошибкой был одиночный знак равенства в $year=$r["year"], а не в остальной части кода.