Цикл foreach не выполняет то, что должен выглядеть - или, возможно, он вызывается функцией? PHP - PullRequest
0 голосов
/ 10 апреля 2011

У меня есть довольно простая функция, которая удаляет личное сообщение из поля ввода или отправки пользователя:

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 и тому подобное, все они хороши, поэтому циклы должны получать правильные входные данные. Кто-нибудь может увидеть, где сбой? Спасибо.

1 Ответ

0 голосов
/ 10 апреля 2011

Неважно, я понял это.Это было очень просто, мне просто нужно было удалить то же значение из массива, который я удалял из базы данных - оно всегда работало с одним и тем же объектом, так что переменная никогда не менялась, и каждый последующий вызов снова видел ранее удаленные сообщения как допустимые сообщения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...