Podrias probar esto analizarlo y ver si te puede servir. Es todo un solo codigo.
Debes crear un archivo php para probarlo.
Lee los comentarios del script.
Código PHP:
<?php
session_start();
//si el boton no fue precionado y algun select seleccionado
if(isset($_POST['genero']) != "" && !isset($_POST['clik'])){
$_SESSION['ses_select']=$_POST['genero'];
}
$s=$_SESSION['ses_select'];
echo "Seleccionado: ".$s;
?>
<form action="" method="post">
<select name="genero" onChange="this.form.submit()">
<option value=""></option>
<option value="valor1" <?=($s == "valor1") ? "selected=selected": ""?> >Valor1</option>
<option value="valor2" <?=($s == "valor2") ? "selected=selected": ""?> >Valor2</option>
<option value="valor3" <?=($s == "valor3") ? "selected=selected": ""?> >Valor3</option>
<option value="valor4" <?=($s == "valor4") ? "selected=selected": ""?> >Valor4</option>
</select>
<br /><input type="submit" name="clik" value="Enviar">
</form>
<?php
//luego si se oprime el boton, recien se envian los valores
//y el select se conserba en lo que se ha seleccionado
if(isset($_POST['clik']) && isset($_POST['genero'])){
echo "Valor enviado: ".$_POST['genero'];
//Esta variable de sesion puede ser vaciada una vez que fue usada y enviado el formulario
$_SESSION['ses_select']='';
}
?>
Esto es un condicional ternario embebido en html. Hara que si se cumple tal condicion, ese select aparezca seleccionado.
<?=($s == "valor1") ? "selected=selected": ""?>
Suerte...!