codice:
if (substr($k,0,30)=="colonna_") {
Perche' metti 0,30 se devi cercare i campi che iniziano per "colonna_"? Prova:

codice:
if (substr($k,0,8)=="colonna_") {

E inoltre:

codice:
while ($row = mysql_fetch_assoc($Recordset1)) {
   echo "<tr>";
   foreach ($campi as $c) 
      echo $row[$c];
   echo "</tr>";
}
Occhio che qui non scrivi i <td>, quindi ti verrebbe una tabella sballata. Prova

codice:
[...]
echo "<td>".$row['$c']."</td>";
[...]
Quando dici:

Notice: Undefined index: colonna_****..... on line 208 cioè questa riga
Quel "colonna_****" corrisponde al vero nome della colonna, o ti da' un nome sballato?