Bueno acorte tu codigo ya que no veo la utilidad de tanto if else, etc... agregue el inicio de session y un ob_start(); para que el header no moleste (este debe ir a inicio de tu codigo), SUERTE :D
Código PHP:
Ver original<?php
// ... más código
$sql = "SELECT * FROM usuarios WHERE dni='$usuario' AND (contrasenya='$contrasenya_encriptada' OR contrasenya='$contrasenya')";
//obtnemos el tipo de usuario
$tipo_usuario = $row["tipo_usuario"];
//guardamos el tipo de usuario en la session
$_SESSION['tipo'] = $tipo_usuario;
echo "tipo usuario = " .$tipo_usuario."<br>";
//nos evitamos todo el if y la parafernalia que tienes ya que es solo UNA variable que cambia
echo 'Bienvenid@ '.$row['nombre'].', puelse <a href="principal_'.$tipo_usuario.'.html">aquí</a> para acceder a la pagina principal como '.$tipo_usuario;
}