Buenos días demonfire.
le he echado un ojo a tu código y he visto donde está la parte que te impide construir usuarios y passwords de mas de un caracter.
Cuando recorres el bucle for, lo recorres al revés, es decir, si introduces usuario: demonfire lo vas recorriendo desde la e hasta la d.
Por consiguiente, cuando haces
$char = substr($_POST['username'], $i, 1); Te va a sacar la letra e (la primera vez, las siguientes veces seguirá hacia atrás).
Después cuando concatenas
$c = $c . strtoupper($char); o el lower. Podrás deducir que la primera vez te va a pillar la letra e que luego concatenará con la r después con la i...
Es decir, que al final esta variable contendrá el usuario pero al revés.
Espero haber sido claro, un saludo