从MYSQL数据库中获取选定的值

时间:2015-01-19 15:33:07

标签: php mysql

我有一个简单的php表单并从数据库中获取值。会员类型(普通和黄金)有一个下拉框。我试图从数据库填充选定的下拉列表值。 (member_type value)

<?php
$sql = mysql_query("SELECT * FROM members");    
while($read = mysql_fetch_array($sql)) {

$MemName = $read['member_name'];
$MemType = $read['member_type'];

echo '<td><input type="text" name="mname" id="mname" value="'.$MemName.'"></td>
<td>
<select>
<option value="Normal">Normal</option>
<option value="Gold">Gold</option>
</select>
</td>
';
}
?>

3 个答案:

答案 0 :(得分:1)

<?php
$currentMembership = 'Gold';
$sql = mysql_query("SELECT * FROM members");    
while($read = mysql_fetch_array($sql)) {

    $MemName = $read['member_name'];
    $MemType = $read['member_type'];

    echo '<td><input type="text" name="mname" id="mname" value="'.$MemName.'"></td>
    <td>
    <select>
    <option value="Normal" ' . ($MemType == 'Normal' ? ' selected' : '') .'>Normal</option>
    <option value="Gold"' . ($MemType == 'Gold' ? ' selected' : '') .'>>Gold</option>
    </select>
    </td>
    ';
}
?>

答案 1 :(得分:1)

在我看来,两种当前的解决方案都可以改进:

<?php
$sql = mysql_query("SELECT * FROM members");        
?>

<?php while($read = mysql_fetch_array($sql)): ?>
    <td>
        <input
            type="text"
            name="mname"
            id="mname"
            value="<?php echo $read['member_name'] ?>"
        >
    </td>
    <td>
        <select>
            <option
                value="Normal"
                <?php echo $read['member_type'] == 'Normal' : 'selected' : '' ?>
            >Normal</option>
            <option
                value="Gold"
                <?php echo $read['member_type'] == 'Gold' : 'selected' : '' ?>
            >Gold</option>
        </select>
    </td>
<?php endwhile ?>

这里有什么不同?

  • 重要的是,HTML不会被困在echo语句中。看看阅读有多容易?您不必担心转义报价,也不必担心单引号和双引号之间的交替。
  • <select>菜单结构只添加一次 - 将代码多次添加到代码中效率相当低,每个都选择了不同的项目。想象一下,如果你有更多菜单项,维护是多么尴尬 - 每个菜单项都有一个额外的else条款!
  • HTML元素分布在多行上,如果这样可以使它们更具可读性。请注意,这一直是表达HTML的有效方式。
  • 仅为页面设置(前半部分)输入PHP模式,并且有动态内容呈现。
  • 变量的分配并没有真正添加任何东西,所以我使用了循环中分配的数组
  • 由于while循环可以说是模板层的一部分,我已经从大括号形式切换到冒号形式,这是一种流行的标准。我认为它更具可读性,因为在PHP标记内添加}在HTML中不是很明显。

Nota bene:

  • 如果$MemName来自用户输入(或者您呈现的任何数据),请确保使用htmlentities()将其转义,否则可能会引入XSS漏洞。
  • 变量名$sql可能不理想 - 查询函数的返回值是数据库结果 - SQL是输入。我建议在这里使用$result或类似的内容。

答案 2 :(得分:0)

将if放在你的MemType上

<?php
    $sql = mysql_query("SELECT * FROM members");    
    while($read = mysql_fetch_array($sql)) {

        $MemName = $read['member_name'];
        $MemType = $read['member_type'];

        echo '<td><input type="text" name="mname" id="mname" value="'.$MemName.'"></td><td>';
        if($MemType == 'Normal') {
            echo '<select>
            <option value="Normal" selected>Normal</option>
            <option value="Gold">Gold</option>
            </select>';
        }else if($MemType == 'Gold') {
            echo '<select>
            <option value="Normal">Normal</option>
            <option value="Gold" selected>Gold</option>
            </select>';
        } else {
            echo '<select>
            <option value="Normal">Normal</option>
            <option value="Gold">Gold</option>
            </select>';
        }
        echo '</td>';
    }
?>