pero ya eso lo estas haciendo sin necesidad del hidden
haber te explico primero que todo si el hidden no lo metes dentro del WHILE obvio su valor no va a cambiar a medida que selecciones, osea si quieres que ese campo cambie de dato cuando el usuario seleccione una categoria debe estar dentro del while, por segundo tu ya tienes una variable donde capturar
haber en tu select tienes esto:
entpnces dentro de <option></option> tenemos el texto que vera el usuaro es decir el nombre de la categoria, y en la opcion VALUE, tenemos cual es el valor que tomara el SELECT con cada opcion que seleccione el usuario, entonces tu select tiene el nombre de categories
en el form 2 recoges el valor por POST ($_POST['categories']), prueba haber porque yo hice algo similar a lo que estas haciendo y lo trabaje igual....