Código PHP:
<?php
//conexión a mysql
include('connect.php');
//seleccionamos las opciones del select principal
$sql = "SELECT id_cat,categoria FROM tutscat ORDER BY id_cat";
$res = mysql_query($sql);
//obtenemos el número de registros
$num = mysql_num_rows($res);
?>
<form name="form1" method="post">
<!--Combo principal-->
<select name="categoria" onChange="redirect(this.options.selectedIndex)" style="width: 160px;">
<option selected value="0">Categoría</option>
<?php
for($i=0;$i<$num;$i++) {
$idcat[$i] = mysql_result($res,$i,0);
$categoria[$i] = mysql_result($res,$i,1);
echo "<option value='$categoria[$i]'>$categoria[$i]</option>";
}
?>
</select>
<!--Combo dinámico-->
<select name="titulo" style="width: 160px;">
<option selected value="0">Titulo</option>
</select>
</form>
<?php
echo "<script><!--";
echo "var groups=".$num;
echo "var group=new Array(groups)";
//Crea tantos arrays como valores hay en el combo principal
echo "for (i=0; i<groups; i++) group[i]=new Array()";
//Opciones cuando no se ha hecho ninguna selección en el combo principal-->
echo "group[0][0]=new Option('Titulo','0');";
for($i=0;$i<$num;$i++) {
$sql = "SELECT id_tuto, titulo, categoria FROM tutoriales WHERE categoria='".$categoria[$i]."'";
$res = mysql_query($sql);
//Obtenemos el número de articulos para esa categoria
$num2 = mysql_num_rows($res);
for($j=0;$j<$num2;$j++) {
$idtuto = mysql_result($res,$j,0);
$titulo = mysql_result($res,$j,1);
//Opciones para la opción $i del combo principal
echo "group[$num][$j]=new Option('$titulo','$idtuto')";
}
}
?>
var temp=document.form1.titulo
function redirect(x){
for (m=temp.options.length-1;m>0;m--)
temp.options[m]=null
for (i=0;i<group[x].length;i++){
temp.options[i]=new Option(group[x][i].text,group[x][i].value)
}
temp.options[0].selected=true
}
//-->
</script>
Saludos.