5

如何<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>';
4

4 回答 4

6

试试这个:

    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"] 中的单个等号,而不是其余代码。

于 2010-06-03T21:28:38.143 回答
5

除了修复=/ ==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 模板中包含的任何纯文本进行 HTML 转义。您可以定义一个名称较短的函数echo htmlspecialchars来减少打字。)

于 2010-06-03T21:47:24.740 回答
2

您必须$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>';
于 2010-06-03T21:10:21.120 回答
1

在这里为后代添加一个新答案,因为旧代码虽然在当时是正确的(实际上mysqli确实存在,但许多主机不支持 PHP 5),但不幸的是使用了已弃用的代码。除了使用mysql_扩展之外,这是一种使用面向对象的方法来处理它的方法,该方法适用于mysqli_连接:

这是数据库连接

$conn = new mysqli($host, $username, $password, $dbname);

if  ($conn->connect_error) {
    die("Connection failed: " . $conn->connect_error);
}

假设$year变量来自一个表单(尽管它可以从GETSESSION或任何地方使用)

$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>';
    }
于 2015-05-25T14:44:57.023 回答