A ver si me centro ..
El cui_id necesitas pasarlo a tu script de proceso. Para ello crea un campo hidden de mismo estilo a los anteriores tipo array:
Código PHP:
echo "<input type=\"hidden\" name=\"cui_id[]\" value=\"$cat_id3\">";
esto debe ir en el bucle superior (el primer while ..)
En tu script de proceso .. deberias leer el bucle principal con un foro o foreach para obtener todos esos ID de cui_id que llegarán desde tu formulario (a todo esto suponemos que el formulario <form> y final </form> lo defines antes y despues del bucle superior ..?)
Código PHP:
foreach ($_POST['cui_id'] as $cui_id2){
for ($contador=0; $contador<count($_POST['cat_id2']); $contador++){
$sql_ins_datsalas = "INSERT INTO ${prefix}_movies_salas_datos VALUES (NULL, '$sid', '$cui_id2', '$_POST[cat_id2][$contador]', '$_POST[datos][$contador]', '$parentid')";
// resto ejecución consulta ...
} //cierre for
}// cierre foreach
Así hasta evitas esa consulta SQL en tu proceso de insercción cuando ya lo tenías en tu formulario. El resto de campos . ese $sid y demás variables junto con ese valor "NULL" para castdes_id (que supongo que será un campo autincremental?) no sé de donde provienen esos datos .. supongo que se generarán furea de esos bucles anidados que usas.
En el "transfondo" de todo esto .. no se si se habrá resuelto tu problema .. mas bien ahora que lo veo se habría "optimizado" .. El código que escribo es " al vuelo" .. no es lo mismo probarlo y tener datos de prueba para ello + observar como funciona y se comparta que dar "ideas" en un foro así que .. por mi parte lo que te comento igual funciona pero puede no funcionar.
Un saludo,