我有一个数据库,它将我所有的库存项目存储在#插槽中。项目的值在1-50之间。每个值表示存储在服务器上的图片。这是我写的代码,它将根据数据库中列出的值显示x图片。虽然这个代码有效,但我想知道是否有人能给我一个更好的方法来写这个代码,因为如果我有50件商品,根据可用的库存插槽数量,我将有6000多行代码。
require_once 'includes/database.php';
$query = mysql_query("SELECT * FROM inventory WHERE username '".$_SESSION['username']."'");
while($row = mysql_fetch_array($query))
$inv1 = $row["inv1"];
if($inv1 == 1) {
$inv1a = '<img src="images/armor/1.png">';
$smarty->assign('inv1a',$inv1a);
}
if($inv1 == 2) {
$inv1a = '<img src="images/armor/2.png">';
$smarty->assign('inv1a',$inv1a);
}
if($inv1 == 3) {
$inv1a = '<img src="images/armor/3.png">';
$smarty->assign('inv1a',$inv1a);
}
if($inv1 == 4) {
$inv1a = '<img src="images/armor/4.png">';
$smarty->assign('inv1a',$inv1a);
}
if($inv1 == 5) {
$inv1a = '<img src="images/armor/5.png">';
$smarty->assign('inv1a',$inv1a);
}
if($inv1 == 6) {
$inv1a = '<img src="images/armor/6.png">';
$smarty->assign('inv1a',$inv1a);
}
if($inv1 == 7) {
$inv1a = '<img src="images/armor/7.png">';
$smarty->assign('inv1a',$inv1a);
}
if($inv1 == 8) {
$inv1a = '<img src="images/armor/8.png">';
$smarty->assign('inv1a',$inv1a);
}
if($inv1 == 9) {
$inv1a = '<img src="images/armor/9.png">';
$smarty->assign('inv1a',$inv1a);
}
if($inv1 == 10) {
$inv1a = '<img src="images/armor/10.png">';
$smarty->assign('inv1a',$inv1a);
}
可能是这样的事情(实际上我甚至不知道你的代码应该做什么,这可能根本不起作用):
while ($row = mysql_fetch_array($query)) {
$inv1 = $row["inv1"];
$inv1a = '<img src="images/armor/'.$inv1.'.png">';
$smarty->assign('inv1a',$inv1a);
}
这样写:
require_once 'includes/database.php';
$query = mysql_query("SELECT * FROM inventory WHERE username '".$_SESSION['username']."'");
while($row = mysql_fetch_array($query)) {
$inv1 = $row["inv1"];
$inv1a = '<img src="images/armor/'. intval($inv1). '.png">';
$smarty->assign('inv1a', $inv1a);
}
我在$inv1左右使用intval,因为我假设您只从数据库中获取整数。
如果不是这样,请删除将intval($inv1)
更改为$inv1
函数intval
将输入强制转换为整数,这将防止可能的XSS攻击,例如故意命名为"index.php.png"的文件
每次你计划在网页中使用输出时,都要对其进行消毒,并确保你正在加载预期加载的内容。
您可以尝试以下操作:
while($row = mysql_fetch_array($query)){
$inv1 = $row["inv1"];
$inv1a = "<img src='images/armor/" . $inv1 . ".png'>";
$smarty->assign('inv1a',$inv1a);
}
该代码假设图像只能在armor目录中找到。然而,如果你需要在图像类型之间切换,你可以将其设置为一个变量,比如:
$itemType = "armor";
while($row = mysql_fetch_array($query)){
$inv1 = $row["inv1"];
$inv1a = "<img src='images/" . $itemType . "/" . $inv1 . ".png'>";
$smarty->assign('inv1a',$inv1a);
}