Я пытаюсь удалить массив идентификаторов, и когда он удаляется, я хочу, чтобы связанный с ним загруженный рис также удалялся с помощью 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; } }
У вас есть несколько проблем в вашем коде:
$uploadedfile
никогда не объявляется, но используется для поиска пути к файлу. Я предполагаю, что это то же самое, что и $getdeleted
. deleteGreetings
принимает весь массив. Вы должны удалить этот вызов функции из своего цикла, иначе он будет вызываться каждый для каждого элемента массива. Вы только хотите вызвать это один раз. Я бы сделал что-то вроде этого:
$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 ); } } }