PHP-Code:
$user $_POST["user"];
$passwort $_POST["passwort"]; 
Wozu dieses sinnlose Variablenschaukeln? Effektivität im negativen Bereich.

PHP-Code:
isset($_POST["user"]) && isset($_POST["passwort"]) 
Es geht auch einfacher:
PHP-Code:
isset($_POST["user"],$_POST["passwort"]) 
Warum der von dir beschriebene Fehler auftritt ist mir leider unklar, zumal du alles richtig Verschachtelt hast (an der Einrückung kannst du aber noch arbeiten).

Ich nehme an, dass die foreach-Schleife mehrmals ausschlägt. Da innerhalb dieser kein $ok = false; am Anfang steht wird das $ok = true; vom ersten Durchlauf weiterhin verwendet, während die erneute Prüfung (hochwahrscheinlich eine Leerzeile o.ä. in der Textdatei) statt $ok = true; eben den Fehler ausgibt.