Как сделать <option selected = "selected"> установленным MySQL и PHP?

Как сделать <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>'; }