Site icon RibosoMatic

Drag Drop con script.aculo.us, PHP y MySQL – Parte 2

En el artículo anterior vimos que es posible capturar todos los elementos de los bloques div y su ubicación mediante la función JavaScript obtenerElementos(). Entonces nos toca ahora enviar esa cadena de valores a un script PHP para que se encargue de cortarlos en los fragmentos correspondientes a los nombres de los empleados (contratados y despedidos) y guardalos en la base de datos.

Pero antes de eso vamos a modificar la funcion obtenerElementos() para que solo envie la cadena de valores y divida a los elementos de cada bloque por un slash ( / ), esa cadena obtenida la pasamos a una función EnviarDatos() que explicaremos luego. La idea es que la funcion obtenerElementos() envie este tipo de cadena: empleado_1_grupo_1, empleado2_grupo_1 / empleado_1_grupo2, empleado_2_grupo_2

function obtenerElementos() {
 var secciones = document.getElementsByClassName('seccion');
 var alerttext = '';
 var separador = '';
 secciones.each(function(seccion) {
  alerttext += separador + Sortable.sequence(seccion);
  separador = "/";
 });
 EnviarDatos(alerttext);
 return false;
}

Veamos ahora la función EnviarDatos() junto con la función que nos permitirá usar el objeto XMLHttpRequest. En nuestro caso separamos estás funciones en un archivo al que llamamos ajax.js

function Ajax(){
 var xmlhttp=false;
 try {
  xmlhttp = new ActiveXObject("Msxml2.XMLHTTP");
 }catch(e){
  try {
   xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
  }catch(E){
   xmlhttp = false;
  }
 }
 if (!xmlhttp && typeof XMLHttpRequest!='undefined') {
  xmlhttp = new XMLHttpRequest();
 }
 return xmlhttp;
}
function EnviarDatos(cadena){
 ajax.Ajax();
 ajax.open("POST", "guardar.php",true);
 ajax.onreadystatechange=function(){
  if (ajax.readyState==4) {
   alert(ajax.responseText);
  }
 }
 ajax.setRequestHeader("Content-Type","application/x-www-form-urlencoded");
 ajax.send("cadena="+cadena)
}

Bueno la función Ajax es la que siempre usamos para crear el objeto XMLHttpRequest. Nos enfocamos en EnviarDatos(), este recibe la cadena que la función obtenerElementos() le paso y lo envia mediante método POST al archivo guardar.php. Cuando el archivo guardar.php acabe su proceso entonces aparecerá un mensaje en un alert.

El archivo que realizará el proceso de guardar, o mas bien dicho modificar las dos tablas es guardar.php, veamos su código:

<?php
 require('conexion.php');
 function ElementosEnBlanco(){
  mysql_query("DELETE FROM contratado");
  mysql_query("DELETE FROM despedido");
 }
 $cadena=$_POST['cadena'];
 $cadenas=explode('/',$cadena);
 $nro_cadenas=count($cadenas);
 $i=0;
 ElementosEnBlanco();
 while($i<$nro_cadenas){
  $elementos=explode(',',$cadenas[$i]);
  $nro_elementos=count($elementos);
  $j=0;
  while($j<$nro_elementos){
   if($elementos[$j]!=""){
    switch($i){
     case 0:
      mysql_query("INSERT INTO contratado(nombre_contratado) VALUES ('$elementos[$j]')",$con);
     break;
     case 1:
      mysql_query("INSERT INTO despedido(nombre_despedido) VALUES ('$elementos[$j]')",$con);
     break;
    }
   }
   $j++;
  }
  $i++;
 }
 echo "Cambios OK";
?>

Veamos lentamente el código mientras explicamos. La idea del proceso es eliminar todos los elementos de las dos tablas y luego volverlas a llenar con los nombres de los empleados en las dos tablas en el orden en que son enviadas. Recuerde que la funcion JavaScript envia una cadena de este formato: elemento1, elemento2 / elemento3, elemento4, elemento5, para grabar cada uno, debe de cortarlos primero por el caracter slash ( / ) y luego por las comas ( , ). Veamos los pasos principales:

No es nada del otro mundo, con un poco de ingenio y las herramientas que abundan en la web, como el script.aculo.us y demás librerías, se pueden hacer aplicaciones interesantes y agregarle un valor adicional a nuestro trabajos web. Proximamente estaremos viendo mas sobre script.culo.us así que atentos a los movimientos del blog…

[Ver Ejemplo] [Descargar]