Господа, прошу помощи, не могу понять почему приведенный ниже скрипт срабатывает не так, как ожидается.
Что он делает - принимает на вход через $_REQUEST два параметра, "ID" - айдишник элемента и "action" - равен либо 1 либо 2.
Забирает из базы элемент с полученным айди, и проверяет, если у него свойство UF_RATING_TYPE не равно полученному в параметре action - меняет значение этого свойства на полученное. Если свойство равно параметру - выводит сообщение на экран.
Но все это дело начинает работать немного странно. Например если запустить скрипт с параметром action=1 и потом сразу action=2, при UF_RATING_TYPE изначально равному 1, он оба раза выведет на экран сообщение already voted, но при втором вызове с action=2 успешно поменяет значение UF_RATING_TYPE на 2. Собственно чего я не могу понять - как при втором вызове одновременно может выполнится и код выводящий сообщение и $hl_review_ratings_entity_data_class::update, не смотря на то, что они находятся во взаимо исключающих местах конструкции if-else.
Что он делает - принимает на вход через $_REQUEST два параметра, "ID" - айдишник элемента и "action" - равен либо 1 либо 2.
Забирает из базы элемент с полученным айди, и проверяет, если у него свойство UF_RATING_TYPE не равно полученному в параметре action - меняет значение этого свойства на полученное. Если свойство равно параметру - выводит сообщение на экран.
Но все это дело начинает работать немного странно. Например если запустить скрипт с параметром action=1 и потом сразу action=2, при UF_RATING_TYPE изначально равному 1, он оба раза выведет на экран сообщение already voted, но при втором вызове с action=2 успешно поменяет значение UF_RATING_TYPE на 2. Собственно чего я не могу понять - как при втором вызове одновременно может выполнится и код выводящий сообщение и $hl_review_ratings_entity_data_class::update, не смотря на то, что они находятся во взаимо исключающих местах конструкции if-else.
Код |
---|
use Bitrix\Highloadblock as HL; use Bitrix\Main\Entity; $hl_review_ratings = HL\HighloadBlockTable::getById($arParams["REVIEW_RATINGS_HL_ID"])->fetch(); $hl_review_ratings_entity = HL\HighloadBlockTable::compileEntity($hl_review_ratings); $hl_review_ratings_entity_data_class = $hl_review_ratings_entity->getDataClass(); $hl_review_ratings_query_requests = new Entity\Query($hl_review_ratings_entity_data_class); $hl_review_ratings_query_requests->setSelect(Array( "UF_RATING_TYPE", "ID" )); $hl_review_ratings_query_requests->setFilter(Array( "UF_COMMENT" => $_REQUEST["id"], "UF_USERID" => $USER->GetId() )); $hl_review_ratings_result = $hl_review_ratings_query_requests->exec(); $hl_review_ratings_result = new CDBResult($hl_review_ratings_result); $row = $hl_review_ratings_result->GetNext(); if($row["UF_RATING_TYPE"] != $_REQUEST["action"]){ $hl_review_ratings_entity_data_class::update($row["ID"], Array( "UF_RATING_TYPE" => $_REQUEST["action"] )); } else{ echo "already voted " . $_REQUEST["action"]; } |