我正在考虑使用我的PHP应用程序进行下一步并使选项字段动态化。这将为更多自动化打开大门。
我在整个项目中都有下拉菜单,它们用于选择特定用户,并在添加新用户时手动更新它们(这也是一个手动过程)。但是,如果我采取第一步并使这些下拉菜单由MySQL数据库填充,那么我可以继续进行动态用户创建。
我知道如何实现这一目标,但我对其他一些替代方案感到好奇(如果有的话)。
这是我要做的......
$query = ** MySQL Select * From Database Query **
echo '<select name="usernames">';
while($row == mysql_fetch_array($query))
{
echo '<option>' . $row['username'] . '</option>';
}
echo '</select>';
所以我的问题是,你会这样做吗?为什么?谢谢!
答案 0 :(得分:1)
你的方式很好,但有两件事需要改变:
- 在所有回显的HTML上运行htmlentities()或htmlspecialchars()以避免XSS。除非您已经在数据库输入时对其进行了清理,但我发现这种做法很愚蠢。 />
- 为每个value
标记添加<option>
属性,否则您将无法检索所选的用户名。我建议使用用户名的相应ID或该用户独有的其他内容。如果它是一个字符串,也可以使用htmlentities / htmlspecialchars。
答案 1 :(得分:1)
你正在做的事情会很好。我喜欢把它变成一个函数,这样如果我需要在另一个页面上下拉,我就不必再写很多代码了。
function userDD()
{
$query = ** MySQL Select * From Database Query **
$html = '<select name="usernames">';
while($row == mysql_fetch_array($query))
{
$html .= '<option>' . $row['username'] . '</option>';
}
$html .= '</select>';
return $html;
}
此代码完全符合您的代码所做的操作,但它确实使用了echo。相反,您使用变量($ html)来存储所有数据,然后在完成后返回它。
答案 2 :(得分:1)
$users = getUsers();
include('template.tpl');
<select name="username">
<?php foreach( $users as $user ): ?>
<li><?= e( $user['username'] ) ?></li>
<?php endforeach; ?>
</select>
e是一个逃避字符串以阻止xss攻击的函数
答案 3 :(得分:0)
我不会在与输出相同的文档中放置SQL查询...
我将在函数中创建一个包含所有SQL查询的文档,并包含该文件。只是为了让事情分开。