Biblioteca de libros de programación en español

Si hay una cosa importante para ser un buen desarrollador es conocer el inglés de tal manera que puedas leer documentación y manuales en la lengua de Shakespeare, pero si no es así o prefieres tener manuales en español, te convendría disfrutar de la biblioteca que se está montando en GitHub con todo tipo de recursos para la programación, tanto de lenguajes, PHP, Javascript, CSS, como metodología, bases de datos y algoritmos.

La iniciativa no solo esta en español, sino que dispone de de bastante idiomas, por supuesto en inglés, pero también alemán, italiano, portugués, ruso y otros muchos. Además esta abierta a las nuevas contribuciones, por lo que el número de recursos probablemente siga creciendo.

Podemos encontrar estos recursos en versión web, otros en PDF y por supuesto podremos adjuntar nuestra ayuda siguiendo las instrucciones convenientes para seguir aumentando esta comunidad.

A la par se está intentando crear una sección que incluya podcasts sobre programación, aunque actualmente solo está disponible en checo e inglés y no tienen mucho contenido, pero promete convertirse también en una referencia.

Podéis disfrutar de todos los recursos en inglés y español.

Publicado el

Multiselect, carga de combos anidados

Selects anidados

Una de las cosas más habituales cuando creamos una página web, es la inclusión de selects para ofrecer opciones a los usuarios. Normalmente, no solemos encontrar un solo select en una web, e incluso, los selects que tenemos incluídos entre el contenido suelen tener relación entre ellos, por eso, vamos a mostrar como crear un multiselect, o también llamados combos anidados, selects anidados

Lo primero de todo es cargar el primer select o select padre, que recibirán en mi caso los datos desde una base de datos, meteremos el select dentro de un formulario, tal y como se muestra en el archivo que llamaremos index.php:

<form action="wiki.php" method="POST">
  <select id="marcas" name="marcas" onchange="cargarModelos(this.value)">
    <option id="0">Seleccione una marca...</option>
	<?
    	  $consulta= mysql_query("SELECT * FROM marcas order by nombre");
	  while($fila=mysql_fetch_array($consulta))
	  {
          echo "<option value='".$fila["id"]."'>".$fila["name"]."</option>";
	  }
        ?>
  </select>
 
 <p id="txtHint"></p>
 <p><input type="submit" name="enviar" value="Ver movil"></p>
</form>

En el script de la página, index.php, debemos tener el siguiente texto, que lo que hará será cargar los datos del segundo select, mostrar el componente y llamar a la función que tendremos alojada en otro archivo:

<script type="text/javascript" src="jquery.js"></script>	
 <script type="text/javascript">
   function cargarModelos(str){
	if (str==""){
	 document.getElementById("txtHint").innerHTML="";
	 return;
	} 
        // código para IE7+, Firefox, Chrome, Opera, Safari
	if (window.XMLHttpRequest){
	 xmlhttp=new XMLHttpRequest();
        //código para IE6, IE5
	}else{
	 xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
	}
	xmlhttp.onreadystatechange=function(){
	  if (xmlhttp.readyState==4 && xmlhttp.status==200){
		document.getElementById("txtHint").innerHTML=xmlhttp.responseText;
		}
	}
	 xmlhttp.open('GET','carga.php?marca='+str,true);
	 xmlhttp.send();
   }
 </script>

A continuación procedemos a crear la función que tiene la carga de los datos como tal, es decir, carga.php, que es la que consulta los datos en la base de datos según los datos que le pasamos en el primer select:

$idMarca=$_GET["marca"];
include("functions.php");
conectar();
$sql="SELECT * FROM modelos WHERE id_marca = '".$idMarca."' order by titulo";
echo "<select id='modelo' name='modelo'>";
echo "<option>Seleccione modelo...</option>";
$result = mysql_query($sql);
while($row = mysql_fetch_array($result)){
  echo "<option value='".$row['ID']."'>".$row['titulo']."</option>";
}
echo "</select>";

Con estos sencillos pasos tendremos un par de selects anidados, por supuesto, no cabe ni decir que podremos repetir este proceso con todos los selects que queramos tener, simplemente ahí que cambiar las llamadas a las funciones del script y más tarde pasarle a la función carga los parámetros con los que queremos consultar las tablas.