Bienvenido a datoweb.com!! En este foro podrás encontrar ayuda sobre diseño y desarrollo web en general. Si quieres formar parte de esta comunidad para pedir ayuda o colaborar ayudando a otros usuarios del foro solo tienes que registrarte desde el siguiente enlace: Registrarse en el Foro

Combo dependientes

Hola como estan?

Miren tengo este script :
<?php 
    //////////// CATEGORIAS ///////////
mysql_select_db($database_config, $config);
$query_cat = "SELECT hs_categorias.id, hs_categorias.categorias, subcategorias.sub, subcategorias.id FROM hs_categorias, subcategorias WHERE subcategorias.idcat = hs_categorias.id";
$cat = mysql_query($query_cat, $config) or die(mysql_error());
$row_cat = mysql_fetch_assoc($cat);
$totalRows_cat = mysql_num_rows($cat);
?>

el cual funciona excelente, junto con su otra parte :
<select id="categoria" name="categoria" onChange="categoria_reload(this)">
                              <option selected>categoria</option>
                            </select>
                            <select id="subcategoria" name="subcategoria" onChange="categoria_reload(this)">
                              <option selected>subcategoria</option>
                            </select></p>        
que tambien funciona excelente!!

Ahora el tema es yo quiero que sea dependiente de una sola base de datos que tenga todos los datos y que cuando elijo una categoria aparezca la subcategoria..

algo asi :
<script language="JavaScript">
categoria_contents=new Array();
categoria_tempArray=new Array();
categoria_counter=0;
categoria_isDataOrdered=1;
function categoria_addContent(str){
    categoria_contents[categoria_counter]=str;
    categoria_counter++;
}
function categoria_split(){
    categoria_arrayValues = new Array();
    for(i=0;i<categoria_contents.length;i++){
        categoria_arrayValues[i]=categoria_contents[i].split(separator);
        categoria_tempArray[0]=categoria_arrayValues;
    }
}
function categoria_makeSelValueGroup(){
    categoria_selValueGroup=new Array();
    var args=categoria_makeSelValueGroup.arguments;
    for(i=0;i<args.length;i++){
        categoria_selValueGroup[i]=args[i];
        categoria_tempArray[i]=new Array();
    }
}
function categoria_makeComboGroup(){
    categoria_comboGroup=new Array();
    var args=categoria_makeComboGroup.arguments;
    for(i=0;i<args.length;i++) categoria_comboGroup[i]=findObj(args[i]);
}
function categoria_setDefault(){
    for (i=categoria_selValueGroup.length-1;i>=0;i--){
        if(categoria_selValueGroup[i]!=""){
            for(j=0;j<categoria_contents.length;j++){
                if(categoria_arrayValues[j][(i*2)+1]==categoria_selValueGroup[i]){
                    for(k=i;k>=0;k--){
                        if(categoria_selValueGroup[k]=="") categoria_selValueGroup[k]=categoria_arrayValues[j][(k*2)+1];
                    }
                }
            }
        }
    }
}
function categoria_loadMenu(daIndex){
var selectionMade=false;
daArray=categoria_tempArray[daIndex];
categoria_comboGroup[daIndex].options.length=1;
var categoria_cur_daArrayValue="";
if(categoria_isDataOrdered==1){
    for(i=0;i<daArray.length;i++){
        if(categoria_cur_daArrayValue!=daArray[i][(daIndex*2)+1]){
            categoria_comboGroup[daIndex].options[categoria_comboGroup[daIndex].options.length]=new Option(daArray[i][daIndex*2],daArray[i][(daIndex*2)+1]);
            categoria_cur_daArrayValue=daArray[i][(daIndex*2)+1];
        }
    }
}else{
    for(i=0;i<daArray.length;i++){
        existe=false;
        for(j=0;j<categoria_comboGroup[daIndex].options.length;j++){
            if(daArray[i][(daIndex*2)+1]==categoria_comboGroup[daIndex].options[j].value) existe=true;
        }
        if(existe==false){
            lastValue=categoria_comboGroup[daIndex].options.length;
            categoria_comboGroup[daIndex].options[categoria_comboGroup[daIndex].options.length]=new Option(daArray[i][daIndex*2],daArray[i][(daIndex*2)+1]);
            if(categoria_selValueGroup[daIndex]==categoria_comboGroup[daIndex].options[lastValue].value){
                categoria_comboGroup[daIndex].options[lastValue].selected=true;
                selectionMade=true;
            }
        }
    }
}
if(selectionMade==false) categoria_comboGroup[daIndex].options[0].selected=true;
}
function categoria_reload(from){
    if(!from){
        categoria_split();
        categoria_setDefault();
        categoria_loadMenu(0);
        categoria_reload(categoria_comboGroup[0]);
    }else{
        for(j=0; j<categoria_comboGroup.length; j++){
            if(categoria_comboGroup[j]==from) index=j+1;
        }
        if(index<categoria_comboGroup.length){
            categoria_tempArray[index].length=0;
            for(i=0;i<categoria_comboGroup[index-1].options.length;i++){
                if(categoria_comboGroup[index-1].options[i].selected==true){
                    for(j=0;j<categoria_tempArray[index-1].length;j++){
                        if(categoria_comboGroup[index-1].options[i].value==categoria_tempArray[index-1][j][(index*2)-1]) categoria_tempArray[index][categoria_tempArray[index].length]=categoria_tempArray[index-1][j];
                    }
                }
            }
        categoria_loadMenu(index);
        categoria_reload(categoria_comboGroup[index]);
        }
    }
}
function findObj(n, d) { //v4.01
  var p,i,x;  if(!d) d=document; if((p=n.indexOf("?"))>0&&parent.frames.length) {
    d=parent.frames[n.substring(p+1)].document; n=n.substring(0,p);}
  if(!(x=d[n])&&d.all) x=d.all[n]; for (i=0;!x&&i<d.forms.length;i++) x=d.forms[i][n];
  for(i=0;!x&&d.layers&&i<d.layers.length;i++) x=findObj(n,d.layers[i].document);
  if(!x && d.getElementById) x=d.getElementById(n); return x;
}
categoria_makeSelValueGroup("","");
categoria_makeComboGroup("categoria","subcategoria");
 var separator="+#+";
<?php do{?>
categoria_addContent("<?php echo $row_cat['categorias']; ?>+#+<?php echo $row_cat['id']; ?>+#+<?php echo $row_cat['sub']; ?>+#+<?php echo $row_cat['id']; ?>");
<?php } while ($row_cat= mysql_fetch_assoc($cat)); ?>
categoria_reload();

                            </script>
Hasta acá todo bien, pero cuando lo pruebo me sale repetido barias veces la misma categoria y una sola subcategoria.


en la categoria aparece varias veces casa y jardin y en la subcategoria una sola




Editado
0
Puntos
388
Visitas
1
Resp
Por fernandoury hace 21 meses
Principiante Sitio web
Respuesta #1
Lo arregle !!!

Lo dejo para alguno que le sirva!!

en esta parte del codigo :
<?php 
    //////////// CATEGORIAS ///////////
mysql_select_db($database_config, $config);


$query_cat = "SELECT    hs_categorias.id, hs_categorias.categorias, 

 hs_categorias.id, esto lo cambie por esto hs_categorias.valor

subcategorias.sub, subcategorias.id FROM hs_categorias, subcategorias WHERE subcategorias.idcat = hs_categorias.id";
$cat = mysql_query($query_cat, $config) or die(mysql_error());
$row_cat = mysql_fetch_assoc($cat);
$totalRows_cat = mysql_num_rows($cat);
?>

quedaria así :
<?php 
mysql_select_db($database_config, $config);

$query_cat = "SELECT hs_categorias.valor, hs_categorias.categorias, 

subcategorias.sub, subcategorias.id FROM hs_categorias, subcategorias WHERE subcategorias.idcat = hs_categorias.id";
$cat = mysql_query($query_cat, $config) or die(mysql_error());
$row_cat = mysql_fetch_assoc($cat);
$totalRows_cat = mysql_num_rows($cat);
 ?>

quedo marchando !!
1
Puntos
Por fernandoury hace 21 meses
Principiante Sitio web
Compartir en facebook
Compartir en twitter
Compartir
Para comentar Inicia sesión o Registrate