я не работал с DLE.но предположу,что:
1.запросы об изменении делаются не методом query с вызовом потом метода free,посмотрите как в движке реализованы изменения данных
2. "UPDATE _post set cat='{$cat}' where id='{$row[id]}'" ); это не правильно,здесь не указана таблица с которой вы работаете,название поле странное(_post set cat) https://ru.wikipedia.org/wiki/Update_(SQL)