Programación Web y Scripting > PHP

 Listas Dependientes Con Php Y Mysql

(1/1)

Estefania:
Hola: Les escribo este mensaje para solicitarles me puedan ayudar.
Estoy tratando de realizar listas dependientes con PHP Y MySql.
Lo que quiero hacer es que en base a la selección de un elemento de la primera lista se carguen los elementos de una segunda. Pero esto lo puedo hacer, según he visto, solo con JavaScript.
Cómo puedo combinar javascript con php y Mysql?
El código que utilice fue el siguiente (que por cierto no funciona):

echo "<script language='JavaScript'>";
echo "function cambiarprofesor(){";
echo "var materia";
$materia = "form.materia[form.materia.selectedIndex].value";
echo $materia;
if($materia != 0){
$sql = "select en_materia_profesor.*,  en_carrera.*, en_materia.*
          from en_materia_profesor, en_carrera, en_materia
  WHERE en_materia.CodCarrera like '%".$HTTP_GET_VARS["carrera"]."%' AND
       en_carrera.CodCarrera = en_materia.CodCarrera AND
      en_materia.CodMateria like '%$materia%' AND
  en_materia_profesor.CodMateria = en_materia.CodMateria AND
  en_materia_profesor.CodCarrera = en_carrera.CodCarrera";

echo $sql;
$resultados = mysql_query($sql);
            
$num_resultado = mysql_num_rows($resultados);
   
$row2 = mysql_fetch_array($resultados);
               
if($num_resultado != 0){
echo "<select name='Profesor'>";
echo "<option>...";
do{
$codprof = $row["CodProfesor"];
$nombrep = $row["PNombre"];
echo "<option value='$codprof'> $nombrep";
}while($row2 = mysql_fetch_array($resultados));
echo "</select>";
}
}
echo "}";
echo "</script>";

Espero puedan ayudarme. Desde ya muchas gracias.

Estefanía  :o

Slimer:
Hola Estefania:

Aqui tienes un poco de información de lo que solicitas:

Un ejemplo sería el siguiente, siendo el primer Select, para el Pais, y el segundo select para la ciudad.



--- Código: Text ---  &#60;form name=&#34;f1&#34;&#62; &#60;select name=pais onchange=&#34;cambia_provincia()&#34;&#62; &#60;option value=&#34;0&#34; selected&#62;Seleccione... &#60;option value=&#34;1&#34;&#62;España &#60;option value=&#34;2&#34;&#62;Argentina &#60;option value=&#34;3&#34;&#62;Colombia &#60;option value=&#34;4&#34;&#62;Francia &#60;/select&#62;  &#60;select name=provincia&#62; &#60;option value=&#34;-&#34;&#62;- &#60;/select&#62; &#60;/form&#62;    
Hasta aqui hemos creado el primer Select



--- Código: Text --- var provincias_1=new Array(&#34;-&#34;,&#34;Andalucía&#34;,&#34;Asturias&#34;,&#34;Baleares&#34;,&#34;Canarias&#34;,&#34;Castilla y León&#34;,&#34;Castilla-La Mancha&#34;,&#34;...&#34;) var provincias_2=new Array(&#34;-&#34;,&#34;Salta&#34;,&#34;San Juan&#34;,&#34;San Luis&#34;,&#34;La Rioja&#34;,&#34;La Pampa&#34;,&#34;...&#34;) var provincias_3=new Array(&#34;-&#34;,&#34;Cali&#34;,&#34;Santamarta&#34;,&#34;Medellin&#34;,&#34;Cartagena&#34;,&#34;...&#34;) var provincias_4=new Array(&#34;-&#34;,&#34;Aisne&#34;,&#34;Creuse&#34;,&#34;Dordogne&#34;,&#34;Essonne&#34;,&#34;Gironde &#34;,&#34;...&#34;)    
Con esto creamos los arrays del segundo select



--- Código: Text ---  function cambia_provincia(){    var pais    pais = document.f1.pais[document.f1.pais.selectedIndex].value    if (pais != 0) {      mis_provincias=eval(&#34;provincias_&#34; + pais)       num_provincias = mis_provincias.length       document.f1.provincia.length = num_provincias        for(i=0;i&#60;num_provincias;i++){          document.f1.provincia.options[i].value=mis_provincias[i]          document.f1.provincia.options[i].text=mis_provincias[i]       }    }else{       document.f1.provincia.length = 1       document.f1.provincia.options[0].value = &#34;-&#34;       document.f1.provincia.options[0].text = &#34;-&#34;    }    document.f1.provincia.options[0].selected = true }    
Y con esto decimos que depende de lo que hayamos puesto en el primer select, tiene que aparecer en el segundo...

Esto es un ejemplo "simple" de como hacerlo. Si te das cuenta, los arrays los he introducido manualmente. Lo que tienes que hacer es una consulta a tu BD



--- Código: Text ---  &#60;?phpwhile(&#036;row = mysql_fetch_array(&#036;result)) { echo &#34;&#60;option value=&#34;.&#036;row[&#34;valor&#34;].&#34;&#62;&#34;.&#036;row[&#34;enunciado&#34;].&#34;&#60;/option&#62;&#34;; } ?&#62;    
Despues si no me equivoco, solo nos queda pasar la consulta de php a JavaScript
Para esto hay que "introducir" JavaScript dentro de PHP.




--- Código: Text --- &#60;?php&#036;javascript = &#34;&#60;script language=&#092;&#34;JavaScript&#092;&#34;&#62;&#092;n&#34;;&#036;javascript .= &#34;   var array_js = new Array();&#092;n&#34;; //aqui nos conectariamos a la base de datos,,, a tu gusto!!!!! Yo uso algo asi:include(&#34;conexion_bd.php&#34;);&#036;link=Conexion(); &#036;valores=mysql_query(&#34;select * from columna&#34;,&#036;link) or die (mysql_error()); &#036;contador = 0;while (&#036;elem = mysql_fetch_array(&#036;valores)) { &#036;javascript .=&#34;columna[&#34;.&#036;contador.&#34;] = &#34;.&#036;elem['columna2'].&#34;;&#092;n&#34;;    &#036;contador++;                                  }&#036;javascript .= &#34;&#60;/script&#62;&#092;n&#34;; echo &#036;javascript;?&#62;    
(Nota: Espero no haberme equivocado en nada!!!)


Bueno,,, creo que con esto tendrás una idea de como yo lo haria. (tambien te tengo que decir que soy amateur en esto de la programacion).

Por si no te ha quedado algo claro, aqui te pongo este link (mucho mas profesional que mi explicacion!!!  ;) .

http://www.desarrolloweb.com/articulos/1281.php


Espero que te sirva y que sea eso lo que necesites!!!!  Si tienes algun problema,,, por aqui estamos...

Un saludo

     Slimer

Estefania:
Hola:
Slimer te escribo nuevamente, primero para agradecer tu ayuda y segundo para seguir preguntando sobre mis dudas.
Aplique el código como me indicaste pero si bien no me da ningún error no hace  lo que deseo, o sea, precisamente no me muestra los elementos del segundo select.
A continuación esta el código que estoy utilizando.
Te agradeceré mucho si me puedes ayudar a que funcione.
Saludos.
Estefanía. :hola:

$result = mysql_query($query);
$num_results = mysql_num_rows($result);
$row = mysql_fetch_array($result);

if($num_results != 0){
echo "<select name='Materia' onChange=\'cambiarprofesor()'\>";
echo "<option>...";
do{
$codmat = $row["CodMateria"];
$nombre = $row["MNombre"];
echo "<option value='$codmat'> $nombre";
}while($row = mysql_fetch_array($result));
echo "</select>";
}

echo "<select name='Profesor'>";
echo "<option value="-">-";
echo "</select>";

<?php
$javascript .= "<script language=\"JavaScript\">\n";
$javascript .= "   var array_js = new Array();\n";
include("incluir.php");
$valores=mysql_query("select * from en_profesor") or die (mysql_error());
$contador = 0;
while ($elem = mysql_fetch_array($valores)) {
$javascript .="profesorN[".$contador."] = ".$elem['NProfesor'].";\n";  
$javascript .="profesorC[".$contador."] = ".$elem['CodProfesor'].";\n";  
$contador++;                            
}
$javascript .= "function cambiarprofesor(){\n";
$javascript .= "if (form.Materia.selectedIndex != 0)\n";
$javascript .= "{";
$javascript .= "num_profesores = profesor.length \n";
$javascript .= "form.Profesor.length = num_profesores \n";
$javascript .= "for(i=0;i<num_profesores;i++) \n";
$javascript .= "{ \n";
$javascript .= "form.Profesor.options.value=profesorC[".$contador."]";
$javascript .= "form.Profesor.options.text=profesorN[".$contador."]";
$javascript .= "}else \n";
$javascript .= "{ \n";
$javascript .= "form.Profesor.length = 1 \n";
$javascript .= "form.Profesor.options[0].value = '-' \n";
$javascript .= "form.Profesor.options[0].text = '-' \n";
$javascript .= "}\n";
$javascript .= "form.Profesor.options[0].selected = true \n";
$javascript .= "} \n";
$javascript .= "</script>\n";
echo $javascript;
?>

JuliusRisi:
Estoy con el mismo problema y no consigo solución.

Lo unico que quiero conseguir es que desde una llamada a la base de datos me de una variable array que la entienda javascript, osea:

Que me de este codigo

--- Código: Text ---var provincias_1=new Array(&#34;-&#34;,&#34;Andalucía&#34;,&#34;Asturias&#34;,&#34;Baleares&#34;,&#34;Canarias&#34;,&#34;Castilla y León&#34;,&#34;Castilla-La Mancha&#34;,&#34;...&#34;)  ya si poder usarlo como en el script mencionado.  :whistling:

Navegación

[0] Índice de Mensajes

Ir a la versión completa