Ok, so habe ich mir das gedacht.. Entscheidend ist das hier:
while($row=$GLOBALS['TYPO3_DB']->sql_fetch_assoc($res))
{
if(t3lib_div::_GP('absenden')=='Spracherkennung')
{
$test = t3lib_div::_GP('check');
if(count($test) > 0)
{
$haus = '';
for($i=0 ; $i < count($test); $i++)
{
if ($row['uid']==$test[$i])
{
$haus.=$row['code'].' <br>';
}
}
header("Content-Type: application/force-download");
header("Content-Disposition: attachment; filename=\"licence.txt\"");
header("Content-Length: ". strlen($haus));
echo $haus;
exit();
}
}
//hier kommen dann noch mehr Marker
}
Alles anzeigen
Bedeutet bei Dir also, der geht in den ersten Durchlauf von while(). Wenn er dann in den "if(count($test) > 0)" kommen sollte, dann sendet er nach dem for() auch den Header und geht auch nochmals in den exit(). Alle anderen while danach sind egal, exit war schon da.
Bei Deinem normalen "echo" würde er den Wert einfach echoen und die while weiter machen. Deine Modifikation geht in den exit. Ohne Exit geht es aber so auch nicht, da er beim ersten "match" den Header senden wurde und kurz darauf den "echo" ausführt. Selbst wenn das while dann weiter läuft, ein zweiter header kann dann nicht mehr gesendet werden.
Das heißt, Du musst innerhalb der for() das $haus zusammensetzen, so wie bisher. Dann musst Du aber auch den eigentlichen Output der kompletten while zusammensetzen, dafür lässt Du das echo vom Original weg.
Außerhalb der while() kommen dann die Header und der Output von allen Werten.