У меня есть довольно простая функция, которая удаляет личное сообщение из поля ввода или отправки пользователя:
public function delete($messageID) {
$type = $this->findType($messageID);
if ($type == 'in') {
foreach ($this->inArr as $key => $value) {
if ($this->inArr[$key]->messageID != $messageID)
$implodeData[$key] = $this->inArr[$key]->messageID;
}
if (!isset($implodeData))
$imploded = '0';
else
$imploded = implode(',', $implodeData);
$result = $this->_database->updatePMUser('inArr', $imploded, 'UID', $this->UID);
$result2 = $this->_database->deletePM('messageID', $messageID);
return;
}
else {
foreach ($this->sentArr as $key => $value) {
if ($this->sentArr[$key]->messageID != $messageID)
$implodeData[$key] = $this->sentArr[$key]->messageID;
}
if (!isset($implodeData))
$imploded = '0';
else
$imploded = implode(',', $implodeData);
$result = $this->_database->updatePMUser('sentArr', $imploded, 'UID', $this->UID);
$result2 = $this->_database->deletePM('messageID', $messageID);
return;
}
}
Я понимаю, что могу уменьшить этот код вдвое, работая с переменной типа, я собираюсь это сделать, но сейчас это не проблема. Моя проблема в том, что эта функция прекрасно работает, когда она вызывается только один раз функцией удаления в нижней части страницы просмотра сообщения, но когда она вызывается несколько раз подряд циклом foreach, который удаляет «проверенное» сообщение прямо из in или отправленный ящик - он делает странные вещи. Если я проверяю одно сообщение за раз и удаляю, проблем не возникает - если я проверяю два или более, оно полностью работает с первым удаляемым сообщением, а с последующими удаляет только фактическое сообщение (вызов deletePM) но он не удаляет значение messageID из строки базы данных пользователя (что и делает весь первый раздел, это вызов updatePMUser).
Сначала я подумал, что это проблема с кэшированием, но я решил ее и до сих пор не могу. Он должен делать все точно так же, как флажок удаляет работу в цикле foreach в другом классе - все входы одинаковы, он просто вызывается несколько раз один за другим, полностью возвращается, а затем зацикливается. Вот код вызывающего метода:
private function _processSelectedSent() {
$pmObj = unserialize(base64_decode($_POST['pmObj']));
$i=1;
foreach ($_POST as $key => $value) {
if ($value == 'marked') {
$checkedArray[$i] = $key;
$i++;
}
}
if ($_POST['submitter'] == 'Delete Selected') {
if (is_array($checkedArray)) {
foreach ($checkedArray as $key => $value)
$pmObj->delete($value);
}
else
$pmObj->delete($checkedArray[1]);
header("Location: ".HOME_PAGE.PM_PAGE."?view=sentbox&nocache=".time());
}
}
Существует один из них для обработки sentbox и один для обработки входящих сообщений, оба функционально идентичны для наших целей и задач. О, и я var_dumped значения checkedArray и тому подобное, все они хороши, поэтому циклы должны получать правильные входные данные. Кто-нибудь может увидеть, где сбой? Спасибо.