2013-07-24 66 views
0

我有清單中的汽車列表,每個列表最多可以有12張照片。如果我願意,我可以成功擦除汽車,而我遇到的問題是擦除圖片。PHP清除for循環中的文件

所以我可以查詢是這樣的:

$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中的字段不爲空,就從數據創建這些文件路徑的數組,並循環遍歷數組,使用unlink()擦除它們?

迄今方案的工作,但需要改進?]

if (isset($_POST['delete']) === true) 
{ 

    $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")); 
    $a = 1; 
    while ($a <= 12) 
    { 
     $picturepath = $data['picture'.$a]; 
     if (empty($picturepath) !== true) 
     { 
      unlink('../../' . $picturepath); 
     } 
     $a++; 
    } 

    mysql_query("DELETE FROM `auto` WHERE `auto_id` = $autoid"); 
    header('Location: ../../admin.php?manage_vehicles'); 
    exit(); 
} 
+0

我把它的字段(列)picture1,pcture2等包含圖片文件的路徑名? –

+0

我的解決方案是否包含任何不良的php? –

回答

0

你可以for循環做,附加循環索引值的字符串「圖像」,然後用它來訪問$數據[]元素。 何苦儘管當你可以簡單地這樣做:

foreach ($data as $picname) { 
    if (file_exists($picname) && is_file($picname)) unlink($picname); 
} 

容易。

好吧,讓我們來看看: 這是一個小問題,但我更喜歡使用array_key_exists而不是isset,如果不使用foreach,我會使用for循環並保存自己不得不規定圖片[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(); 
} 
+0

非常感謝這真的很好,我其實有點不同,請查看我的新代碼,將您的答案與我的工作解決方案相結合的任何建議@ArthurNicoll –

0

查詢後添加foreach循環。

foreach($data AS $photo) 
    { 
     if (!empty($photo) && file_exists($photo)) unlink($photo); 
    } 

更新的答案,加入file_exists()

+0

非常感謝:) –

+0

我假設$照片將是照片的網址。可能想要使用file_exists()來檢查文件是否存在 –