我有以下代码,几乎一直都是相同的(大约50次):
if ($product=='product1' || $product=='product1 + extra')
{
mysqli_query($GLOBALS["___mysqli_ston"], "INSERT INTO downloads (key, file, expires)VALUES ('{$strKey}', 'test.zip', '".(time()+(60*60*24*7))."')");
}
else if ($product=='product2' || $product=='product2 + extra')
{
mysqli_query($GLOBALS["___mysqli_ston"], "INSERT INTO downloads (key, file, expires)VALUES ('{$strKey}', 'test2.zip', '".(time()+(60*60*24*7))."')");
}
//else if () {}
唯一改变的是产品和文件名(product1,product2,ecc .. + test.zip,test2.zip,ecc ......)。
所以我考虑使用产品名称和文件名制作两个数组,然后循环遍历这些数组,但我不知道它是否可行以及如何正确更改代码。
有人知道一个好的解决方案吗?
感谢您的帮助和对不起我的英语,这并不完美。
修改
product1,product2,ecc,test1.zip,test2.zip,ecc。只是正在变化的真实姓名的占位符,它们总是不同的。
product1,product2来自$ _POST,它是通过某些选项从用户中选择的。
答案 0 :(得分:2)
大概你想要的东西如下......
$count = 50;//This should be set using something such as count() on an object.
$i = 0;
while ($i<$count)
{
if ($product=='product'.$i || $product=='product'.$i.' + extra')
{
$filename1 = strrev($product);
$file = explode('.',$filename,2);
$file_name = mysqli_real_escape_string($GLOBALS["___mysqli_ston"],strrev($file[1]));
$file_ext = mysqli_real_escape_string($GLOBALS["___mysqli_ston"],strrev($file[0]));
mysqli_query($GLOBALS["___mysqli_ston"], "INSERT INTO downloads (key, file, expires) VALUES ('{$strKey}', $file_name.$i.'.'.$file_ext, '".(time()+(60*60*24*7))."')");
}
$i++;
}
您必须确保将$count
分配给确定您要处理的项目数量的内容。同时确保while
循环迭代尽可能多的项目(有些人最终想知道为什么最后一项没有处理。如果你提供了更多的代码,我能够给你虽然我认为您可以从此处处理此问题,但请确保您在INSERT
次查询中转发数据,同样您只提供了有限的数量虽然确保您的代码安全非常重要,但您可能已经 转义代码。最后,您可能需要将$i
更改为1而不是0更主观你的编号方案。
答案 1 :(得分:1)
我找到了自己的解决方案:
$files = array(
'product1' => 'test.zip',
'product2' => 'test2.zip'
//other products and files
);
创建数组后,创建一个像
这样的循环就足够了foreach($files as $file => $name){
if($product == $file || $product == $file . ' + extra' ){
mysqli_query($GLOBALS["___mysqli_ston"], "INSERT INTO downloads (key, file, expires) VALUES ('{$strKey}', '$name', '".(time()+(60*60*24*7))."')");
}
};