Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/github/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 带有if语句的图片显示_Php - Fatal编程技术网

Php 带有if语句的图片显示

Php 带有if语句的图片显示,php,Php,我有一个数据库,它将我所有的库存物品存储在插槽中。项目的值范围为1-50。每个值表示存储在服务器上的图片。下面是我编写的代码,它将根据数据库中列出的值显示x图片。虽然这段代码有效,但我想知道是否有人能给我一个更好的方法来编写这段代码,因为如果我有50件物品,我将有超过6000行代码,这取决于有多少库存插槽可用 require_once 'includes/database.php'; $query = mysql_query("SELECT * FROM inventory WHERE user

我有一个数据库,它将我所有的库存物品存储在插槽中。项目的值范围为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);
}
我使用intval大约$inv1,因为我假设您只从数据库中获取整数

如果不是这样,请删除将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);
}

谢谢你的帮助,这工作很完美,节省了我分配的时间,是的,所有整数。很高兴知道,如果你只使用整数,那么使用intval。通过这种方式,您可以确保您只使用整数对字符串进行了变异。您能向我解释一下清理输出的含义吗?清理输出的意思是,您必须确保您在编写HTML页面或在代码的任何部分中使用的任何动态变量,你必须确保它是你所期望的。在您的例子中,$inv1只能是整数,所以通过在变量名周围使用intval,您可以确保$inv1只能是一个数字。这只是清理输入/输出的一种方法。如果您未能清理动态数据,特别是用户提供的数据,可能会导致灾难性事件,如SQL注入、XSS或在最好的情况下是纯错误如果您不太熟悉输入/输出清理,我强烈建议您从这里开始:filter_var是一条PHP指令,允许您清理电子邮件地址、URL、,数字、浮点数、ip地址等一目了然。