удалить загруженный файл из массива id, когда они делятся в joomla?

Я пытаюсь удалить массив идентификаторов, и когда он удаляется, я хочу, чтобы связанный с ним загруженный рис также удалялся с помощью unlink. Я использую joomla и mysql для компонента admin mvc в joomla.

Мой код для контроллера в remove:

function remove() { $arrayIDs = JRequest::getVar ( 'cid', null, 'default', 'array' ); //Reads cid as an array $model = & $this->getModel ( 'greetings' ); jimport ( 'joomla.filesystem.file' ); if (is_array ( $arrayIDs ) && count ( $arrayIDs ) > 0) { foreach ( $arrayIDs as $k => $id ) { $del = $model->deleteGreetings ( $arrayIDs ); if ($del) { $getdeleted = $model->getUploadpic ( $id ); $deletefile = JPATH_COMPONENT . DS . "uploads" . DS . $uploadedfile; unlink ( $deletefile ); } } } if ($arrayIDs === null) { //Make sure the cid parameter was in the request JError::raiseError ( 500, 'cid parameter missing from the request' ); } $redirectTo = JRoute::_ ( 'index.php?option=' . JRequest::getVar ( 'option' ) ); $this->setRedirect ( $redirectTo, 'Deleted...' ); } 

… и для модели мой код:

  function deleteGreetings($arrayIDs) { $query = "DELETE FROM #__greetings WHERE id IN (" . implode ( ',', $arrayIDs ) . ")"; $db = $this->getDBO (); $db->setQuery ( $query ); if (! $db->query ()) { $errorMessage = $this->getDBO ()->getErrorMsg (); JError::raiseError ( 500, 'Error deleting greetings: ' . $errorMessage ); } else { return TRUE; } } 

У вас есть несколько проблем в вашем коде:

  1. $uploadedfile никогда не объявляется, но используется для поиска пути к файлу. Я предполагаю, что это то же самое, что и $getdeleted .
  2. У вас есть цикл foreach вокруг элементов в вашем массиве, который будет забирать каждый элемент по очереди. Однако вы моделируете функцию deleteGreetings принимает весь массив. Вы должны удалить этот вызов функции из своего цикла, иначе он будет вызываться каждый для каждого элемента массива. Вы только хотите вызвать это один раз.
  3. Только в конце вашего контроллера вы проверяете, является ли ваш параметр cid нулевым … в чем смысл? Вы должны сначала проверить это, прежде чем пытаться запустить любой другой код.

Я бы сделал что-то вроде этого:

 $arrayIDs = JRequest::getVar ( 'cid', null, 'default', 'array' ); if ($arrayIDs === null) { //Make sure the cid parameter was in the request JError::raiseError ( 500, 'cid parameter missing from the request' ); } $model = & $this->getModel ( 'greetings' ); jimport ( 'joomla.filesystem.file' ); if (is_array ( $arrayIDs ) && count ( $arrayIDs ) > 0) { $del = $model->deleteGreetings ( $arrayIDs ); // check this outside the loop, if it is inside you are checking it for // each element in the array. Here we check once and then go forward. if ($del) { foreach ( $arrayIDs as $k => $id ) { $uploadedfile = $model->getUploadpic ( $id ); $deletefile = JPATH_COMPONENT . DS . "uploads" . DS . $uploadedfile; JFile::delete($deletefile); //unlink ( $deletefile ); } } }