Много ми хареса въпроса ти - " Как да дебъгна кода си". Малко хора си дават сметка, че без да умееш да дебъгваш , няма как да се научиш да пишеш дори и прости приложения.
Затова призовам всички чакалчета - научетете се сами да правите логиката в приложенията си и сами да откривате грешките в тях.
В случая при теб, проблема идва от туй, че не влизат желаните стойности от базата в масива, който мислиш че си създал или масива не е такъв какъвто трябва да бъде

1. Допускам, че "run_q" e функция написана и извикана коректно от 'functions.php' файла.
2.Този урок аз не съм го гледал, ще напиша кода до foreach и искам да постнеш резултата.
3.Задал съм две основни дебъг логики, както и дефинирам "$groups", като празен масив в началото - (не е необходимо в случая, но в много други ситуации е препоръчително )
4. Научи се също така да коментираш кода си (за предпочитане на английски), по този начин следиш логиката и става четим за останалите.
[code]
include 'functions.php';
my_header('Начало');
db_init();
$rs=run_q('SELECT name,group_cat_id FROM group_cat WHERE active=1');
if(!$rs) {
}
{
$groups=$row;
}
die('$goups is not array'); }
foreach ($groups as $key => $value) {
echo "Key is: <strong>".$key."</strong> Value is:<strong>".$value."</strong><br />";
}