A sua explicação não foi muito esclarecedora para mim mas acho que pelo pouco que entendi dá pra começar a dar uma luz:
Se eu tenho muitas opções possíveis de escolha eu costumo ir filtrando na própria página via Javascript (que é a forma mais rápida)
tipo, ao selecionar um item uso os eventos onChange ou onBlur para ir mudando os valores dos itens como selects, checkboxes, etc.
Se as opções não são tantas e se for possível ir de forma linear até o fim do preenchimento, dá pra usar o PHP para ir criando as páginas subsequentes de forma dinâmica usando os enventos onChange="document.GetElementById('seuform').submit();"
dos itens, mas prefiro usar no onBlur (quando um item perde o foco) em alguns casos para que seja possível ao usuário alterar o item escolhido em caso de erro.
Segue um exemplo
<form action="mascara.php" method="post" name="meuForm">
<?
if (getenv("REQUEST_METHOD")=="POST")
{
if ($Pessoas) // foi requisitada o tipo de pessoa
{
echo '<p>SubItem de '.$Pessoas.' : <p><input type="checkbox" name="prop" value="proprietario"> Proprietário</p>
<p><input type="checkbox" name="captador" value="captador">
Captador</p><p><input type="checkbox" name="outros" value="outros"> Outros</p>';
}
}
else
{
echo '
<fieldset>
<p>
<label>
<input type="radio" name="Pessoas" value="juridica" onChange="submit();">
Pessoa Jurídica</label>
<br>
<label>
<input type="radio" name="Pessoas" value="fisica" onChange="submit();">
Pessoa Física</label>
<br>
<label>
<input type="radio" name="Pessoas" value="comum" onChange="submit(this);">
Pessoa Comum</label>
<br>
<input type="submit" name="Submit" value="Enviar">
</p>
</fieldset>
';
}
?>
</form>