Combos dinamicos + MySql

Que ni siquiera se si tiene solución. Paso a explicar. Tengo 2 combos (drop-down menu), y tanto los datos del primero como del segundo se deben tomar desde una base de datos MySQL corriendo en el servidor. Tanto el primer combo como el segundo se completan de manera automática usando un script en PHP (server-side). El problema comienza desde el momento en que me exigen que:
-Los datos del segundo combo, dependan de los datos del primero (por ejemplo, si en el primer combo tengo continentes, depende del continente que elija, los países que se mostrarán en el segundo; siendo ilógico, poder elegir a japón en América).
-Para realizar esta acción, no se refresque la página (es una aplicación, que no se debe refrescar, puedo que sirve para la atención telefónica, y debe ser ultrarápida)
He encontrado en parte la solución, utilizando código javascript, y fue de gran utilidad, hasta el momento en que necesito que los datos del combo salgan de una base de datos. En realidad, el problema se basa en que tengo una matriz en php que la debo pasar a javascript (por ejemplo, el contenido entero de la tabla con las relaciones), y no se como hacer para pasar dicha matriz. He probado:
<script>
variable=<? Print $variable;?>;
</script>
Eso funciona de maravilla, pero lamentablemente no es una variable la que tengo que pasar, sino una matriz, y el problema viene con los bucles, porque si el bucle lo hago en javascript, en php necesito una variable que se autoincremente (junto con la de javascript) para mantener los indices, por ejemplo m[j], el/los ciclos while en javascript funcionan de maravilla, pero no puedo usar esos autoincrementales para PHP, donde sería $matriz[$i][$j], teniendo $i y $j estáticos.
Bueno, espero se haya entendido la pregunta, sino volveré a hacer el intento de ser claro.
Respuesta
1
Claro que tiene solución, y es muy sencilla, o por decirlo de otro modo, casi estás en ella :)
Busca en mis respuestas que tengo por ahí el código que has de utilizar para que te funcionen los combos enlazados. Verás que trabaja con matrices (en javascript) por lo tanto, lo único que has de hacer desde php es "escribir" esas matrices.
Échale un vistazo y luego me cuentas.
El secreto está en escribirse una matriz con los valores del combo usando php :)
Ya verás como te sale. Para cualquier aclaración o duda, ya sabes.
Iv.
Calculo que el ejemplo del cual hablás es el siguiente:
<script>
<!--
var groups=document.doublecombo.example.options.length
var group=new Array(groups)
for (i=0; i<groups; i++)
group=new Array()
group[0][0]=new Option("Website Abstraction","http://wsabstract.com")
group[0][1]=new Option("News.com","http://www.news.com")
group[0][2]=new Option("Wired News","http://www.wired.com")
group[1][0]=new Option("CNN","http://www.cnn.com")
group[1][1]=new Option("ABC News","http://www.abcnews.com")
group[2][0]=new Option("Hotbot","http://www.hotbot.com")
group[2][1]=new Option("Infoseek","http://www.infoseek.com")
group[2][2]=new Option("Excite","http://www.excite.com")
group[2][3]=new Option("Lycos","http://www.lycos.com")
var temp=document.doublecombo.stage2
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=new Option(group[x].text,group[x].value)
}
temp.options[0].selected=true
}
function go(){
location=temp.options[temp.selectedIndex].value
}
//-->
</script>
<form name="doublecombo">
<p><select name="example" size="1" onChange="redirect(this.options.selectedIndex)">
<option>Technology Sites</option>
<option>News Sites</option>
<option>Search Engines</option>
</select>
<select name="stage2" size="1">
<option value="http://wsabstract.com">Website Abstraction</option>
<option value="http://www.news.com">News.com</option>
<option value="http://www.wired.com">Wired News</option>
</select>
<input type="button" name="test" value="Go!"
onClick="go()">
</p>
</form>
Bueno, si bien eso funciona bien, el problema lo estoy teniendo, en que la matriz la tengo en php, y la tengo que "clonar" a javascript. Si me podes orientar como hacer un script en javascript, que yo teniendo de antemano toda la matriz en php, la cargue en js.
Vamos a hacerlo más sencillo, el siguiente es un ejemplo con países y continentes, no es mi caso, pero va a servir para que entiendas mi problema:
<?
$conexion=mysql_connect("host","user","pass");
mysql_select_db("nombre");
$query=mysql_query("select pais,continente from paises");
$x=0;
$max=mysql_num_rows($query);
where($row=mysql_fetch_row($query))
{
$m[$x][0]=$row[0];
$m[$x][1]=$row[1];
$x++;
}
mysql_free_result($query);
mysql_close($conexion);
?>
Bien, ahora, en el header, entre los tags <script></script>, voy a incluir mi código javascript, donde necesito pasar la matriz $m[$max][2], a javascript, que en tu caso sería group[][].
Bueno, esa "clonacion" como dije antes, es la que me esta trayendo los problemas, sólo necesito ese pequeño script, si es que se puede hacer.
Espero hayas entendido la pregunta, te agradezco infinitamente por el tiempo perdido.
Omar
A ver, mi problema es que estoy pez con el php... pero te cuento
No sé muy bien cómo se hace el "print" en php, pero precisamente, lo único que tienes que hacer es recorrer el recordset, e ir haciendo "echos" con los valores.
<script>
var groups=document.doublecombo.example.options.length
var group=new Array(groups)
for (i=0; i<groups; i++)
group=new Array()
<?
conexion
while !(rs.eof)
echo "group[1][" & i & "]=" & rs.field("campo") & ";"
?>
Bueno, no sé la sintaxis php, pero debes hacer una conexión por cada combo que tengas.
El primer índice te indica el combo, el segundo el elemento. ¿Comprendes?
En caso que te siga fallando, mándame el error Javascript que te sale, o el código de la página y me lo miro, ¿ok? Doy por hecho que el código php está correcto, en caso que el problema esté en él, no creo que pueda ayudarte mucho... lo siento.
Pero estoy convencido que lo sacarás.
Adelante!
Para cualquier cosa, ya sabes. Iv.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas