我的库存中有一系列汽车,每张最多可以有12张照片。如果我愿意,我可以成功擦除汽车,我遇到的麻烦也是擦除图片。
所以我可以查询这样的内容:
$pictures = "picture1, picture2, picture3, picture4, picture5, picture6, picture7, picture8, picture9, picture10, picture11, picture12";
$data = mysql_fetch_assoc(mysql_query("SELECT $pictures FROM `auto` WHERE `auto_id` = $autoid"));
使用$data
变量,我可以访问图片的名称,如echo $data['picture1'];
我正在尝试使循环遍历每张图片,只要db中的字段不为空,从数据创建这些文件路径的数组并循环遍历使用{{1}的数组擦除它们}?
SO FAR SOLUTION [有效但需要改进吗?]
unlink()
答案 0 :(得分:0)
在查询后添加一个foreach循环。
foreach($data AS $photo)
{
if (!empty($photo) && file_exists($photo)) unlink($photo);
}
更新了答案,添加了file_exists()
答案 1 :(得分:0)
你可以做一个for循环,将循环索引值附加到字符串' picture'然后使用它来访问$ data []元素。 为什么你只能做一些像:
这样的事情foreach ($data as $picname) {
if (file_exists($picname) && is_file($picname)) unlink($picname);
}
容易。
好的,让我们来看看: 这是一个小问题,但我更喜欢使用array_key_exists而不是isset。如果不使用foreach,我会使用for循环并保存自己必须在查询字符串中规定picture [n]列。那怎么样:
if (array_key_exists('delete',$_POST))
{
// not needed
// $pictures = "picture1, picture2, picture3, picture4, picture5, picture6, picture7,
// picture8, picture9, picture10, picture11, picture12";
// if $autoid is an integer, you can reduce the risk of sql injection by intval()
// otherwise look at using preg_replace or using mysqli functions with prepare and bind_params
$autoid=intval($autoid);
$res=mysql_query("SELECT * FROM `auto` WHERE `auto_id` = $autoid"));
if (!($res===false))
{
$data = mysql_fetch_assoc($res);
if (!($data===false))
{
for ($i=0; $i<=12; $i++)
{
$pic_col="picture$i";
if (!array_key_exists("$pic_col",$data) || !strcmp(trim($data["$pic_col"]))) continue;
$picname = '../../'.trim($data["$pic_col"]);
if (file_exists($picname) && is_file($picname)) unlink($picname);
}
}
}
mysql_query("DELETE FROM `auto` WHERE `auto_id` = $autoid");
header('Location: ../../admin.php?manage_vehicles');
exit();
}