我有这样的MySQL数据库表:
Id Value
1 Etc1
2 Etc2
3 Etc3
4 Etc4
我需要实现HTML列表,就像从上面的表中动态填充数据一样:
<select>
<option value="1">Etc1</option>
<option value="2">Etc2</option>
<option value="3">Etc3</option>
<option value="4">Etc4</option>
</select>
使用PHP我可以做类似的事情:
$sql = "SELECT Id, Value FROM Tbl";
$result = mysql_query($sql);
echo "<select>";
while ($row = mysql_fetch_array($result)) {
echo "<option value='" . $row['Id'] ."'>" . $row['Value'] ."</option>";
}
echo "</select>";
但是在这种情况下,我无法使用HTML扩展,这意味着我的网站地址将是:
www.mysite.com/something/index.php
而不是:
www.mysite.com/something/
也许这听起来很傻,但让用户访问PHP文件是一种好习惯吗?我认为更好的方法是当用户重定向到HTML文件时。 (我不知道如果重定向到PHP文件有任何真正的缺点,但在重定向到.../something/
而不是.../something/index.php
等HTML文件时效果会更好
或者我应该手动编写HTML下拉列表而无需访问数据库?
请提供正确的方法。
答案 0 :(得分:2)
从安全角度来看,允许用户访问PHP文件是不错的做法。
删除扩展程序可能更漂亮,但它与安全性无关。即使您通过.htaccess重写URL,或者如果您通过Ajax获取值,因为两者都已建议,您仍然可以访问PHP文件。
唯一的区别是上诉 - 如果这对你很重要,隐藏扩展,但你仍然会访问PHP文件 - 如果你想通过PHP获取选项值(没有什么不好的),没有办法解决它
答案 1 :(得分:1)
这里有两种情况
如果你想创建index.php
然后你可以使用htaccess来允许用户使用.html或domain for index.php
如果您要创建index.html
然后你可以使用ajax下拉。 (在这种情况下,如果你想允许用户输入index.php那么你必须遵循第一种方法)
答案 2 :(得分:1)
我对你究竟想要什么感到疑惑......但是,让我试着解释一下。
1 - 根据您的说法,如果网址为.html
,则表示它指向某个www.mysite.com/something/index.php
文件&amp;如果URL类似于www.mysite.com/something/
,则它指向PHP文件。
所以,我想在这里说... .htaccess
并不意味着它指向任何HTML文件。它也可以是PHP文件。您可以通过在button.title(for: .normal)
文件中进行更改来实现此目的。
2 - “允许用户访问PHP文件的良好做法”。
对于您正在访问的文件类型没有任何安全问题,无论是PHP还是HTML,它都不会产生任何安全问题。
3 - 关于动态或静态创建下拉菜单...这一切都取决于您的要求&amp;用例。如果这些下拉列表总是保持不变,那么也许你不需要将这些数据保存在DB&amp;从DB中获取以构建它。但是,如果它可以根据您的业务规则在不同的情况下更改..您可以从DB获取此信息将是正确的事情。通过这种方式,您可以避免自己在代码中进行任何类型的硬编码。
答案 3 :(得分:0)
如果要创建静态网站,则不使用数据库。但如果您正在进行动态网站,则必须使用数据库。在我看来,如果你是否显示php文件,这无关紧要。
<select name="..." >
<?php
$select = $db->query("SELECT * FROM table");
while($row=$select->fetch_assoc()):
?>
<option value="<?php echo $row['id']; ?>><?php echo $row['value']; ?></option>
<?php endwhile; ?>
</select>