Как сделать <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>';
с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>';
В дополнение к исправлению =
/ ==
gotcha, вы можете сэкономить на поиске массива и сделать код проще, попросив базу данных каждый год возвращаться только один раз в запросе:
<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-escape любого простого текста, который вы включаете в шаблон HTML. Вы можете определить функцию с более коротким именем, чтобы сделать echo htmlspecialchars
для сокращения при вводе текста.)
Попробуй это:
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>';
с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"], а не остальная часть кода.
Вы должны каждый раз определять $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++){ 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>';
Добавление нового ответа здесь для потомков, поскольку старый код, который в то время корректен (на самом деле mysqli
существует, но многие хосты не поддерживают PHP 5), к сожалению, использует устаревший код. Вместо использования mysql_
расширений, это способ обработать его с использованием объектно-ориентированного подхода, который будет работать с соединениями mysqli_
:
Вот соединение с базой данных
$conn = new mysqli($host, $username, $password, $dbname); if ($conn->connect_error) { die("Connection failed: " . $conn->connect_error); }
Предполагая, что переменная $year
исходит из формы (хотя она может использоваться из GET
или SESSION
или где угодно)
$year = $_POST['year'];
Вот запрос для кнопки опции (я ее разбил на разные строки, чтобы сделать ее немного легче читать):
$result=$conn->query($sql); while($row = $result->fetch_assoc()) { if ($row['year']==$year) { $selected = 'selected="selected"'; } else { $selected = ''; } echo '<option value="'.$row['year'].'" '. $selected . '>"' . $row['year'] .'</option>'; }