В onclick делать event.preventDefault(), отправлять нужные данные себе аджаксом и вызывать самому location.href=url. По-честному отследить смену location не во фрейме нельзя.
qqignatqq: Это не очень хорошая идея. Нужно было сделать наоброт: во-первых, использовать уже существующее подключение в defrag.php, а не создавать новое. А во-вторых, после multi_query надо было считать результат, например, так: while (mysqli_next_result($q)) {;}, где $q — это то что вернуло multi_query.
Да. Я, правда, обычно оставляю user_fio в основной таблице, поскольку это поле нужно часто (почти во всех местах, где нужен юзер, выводится его имя). Можете еще создать view, являющийся джойном главной таблицы с дополнительной. И вы сможете просто использовать таблицу users или вьюшку users_extended в зависимости от того, что вам нужно. Но это уже по желанию.
qqignatqq: Я не понимаю: где код, который меняет значения переменных $frow, $price, $stoimost после вызова defrag.php? Если его нет, то почему вы рассчитываете, что if даст другой результат во второй раз?
Покажите код, который скрывается за комментарием "проверка данных". А так же файл defrag.php, можно без самого sql. Лучше выложите код, отрывок из которого приведён в вопросе, целиком.
Попробуйте вывести в консоль содержимое переменной content. Может быть там нету элемента .post-content, а есть тег script, в котором js, создающий этот блок.