lo que pasa es que te faltana las etiquetas form estas en cierran cada campo, ya sea input, select, textarea, etc. es como decir que captura los campos los empaqueta y los envia, todo esto claro tu no lo ves.
aqui te dejo un ejemplo:
Código HTML:
<html>
<body>
<?=$txt_cambiarIdioma?>
<form>
<select onchange="document.location = '<?=$_SERVER['PHP_SELF']?>?idioma=' + this.value">
<option><?=$txt_idiomas?>
<option value="ca"><?=$txt_catalan?>
<option value="es"><?=$txt_espanol?>
<option value="en"><?=$txt_ingles?>
</select>
</form>
</body>
</html>