Я бы начал с поиска дубликатов.Я вижу 6 очень похожих вхождений строки запроса:
$topic_query = "UPDATE forum_topics SET status = 'unlocked' WHERE topic_id = '{$topic_id}'";
$topic_query = "UPDATE forum_topics SET status = 'locked' WHERE topic_id = '{$topic_id}'";
$topic_query = "UPDATE forum_topics SET topic_type = 1 WHERE topic_id = '{$topic_id}'";
$topic_query = "UPDATE forum_topics SET topic_type = 2 WHERE topic_id = '{$topic_id}'";
$topic_query = "UPDATE forum_topics SET topic_type = 1 WHERE topic_id = '{$topic_id}'";
$topic_query = "UPDATE forum_topics SET topic_type = 3 WHERE topic_id = '{$topic_id}'";
Каждое из них сопровождается выполнением запроса.Так как насчет метода?
function setField($topic_id, $field, $value) {
$topic_query = "UPDATE forum_topics SET '{$field}' = '{$value}' WHERE topic_id = '{$topic_id}'";
doQuery($topic_query);
}
Теперь первый бит вашего оператора switch выглядит так:
switch ($action) {
case 1:
if ($locked_count > 0) {
setField($topic_id, 'status', 'unlocked');
} else {
setField($topic_id, 'status', 'locked');
}
break;
case 2:
if ($announcement_count > 0) {
setField($topic_id, 'topic_type', 1);
} else {
setField($topic_id, 'topic_type', 2);
}
break;
case 3:
if ($sticky_count > 0) {
setField($topic_id, 'topic_type', 1);
} else {
setField($topic_id, 'topic_type', 3);
}
break;
Но я вижу, что облажался - иногда полестрока, а иногда и int - и случаи int - это topic_type.Так что сделайте так:
switch ($action) {
case 1:
if ($locked_count > 0) {
setField($topic_id, 'status', 'unlocked');
} else {
setField($topic_id, 'status', 'locked');
}
break;
case 2:
if ($announcement_count > 0) {
setTopicType($topic_id, 1);
} else {
setTopicType($topic_id, 2);
}
break;
case 3:
if ($sticky_count > 0) {
setTopicType($topic_id, 1);
} else {
setTopicType($topic_id, 3);
}
break;
Продолжайте в том же духе, и вы можете обнаружить, что скоро вы будете намного счастливее с состоянием своего кода.