Ver Mensaje Individual
  #1 (permalink)  
Antiguo 23/05/2011, 03:49
jccomven
 
Fecha de Ingreso: mayo-2011
Mensajes: 36
Antigüedad: 13 años, 5 meses
Puntos: 0
Problema al recuperar datos de dos combos en ajax

Buenos dias tengo en un formulario dos combox que se cargan mediante ajax. Todo funciona correctamente, pero el problema es a la hora de darle al boton enviar datos, pues a la base de datos no me pasa el valor del combo que es por ejemplo "No funciona ordenador", me pasa el valor del ID del registro(1,2,3..).
No se como solucionarlo soy navato en ajax y la verdad que me cuesta mucho... A ver si me mandáis una solucion. Lo que quiero es que en el formulario el usuario seleccione el valor que queira de los combox y despues pase a otro formulario confirmando los valores seleccionados, que es donde me aparece el valor del id del registro de esa fila.


Os paso codigo a ver si veis algo:

formulario recoge datos:
<tr>
<td height="21" colspan="2" align="right" valign="bottom" class="lbls12">Incidencia</td>
<td colspan="2" align="left" valign="bottom" class="txtnuevainciadmin"><?php generainci(); ?></td>
</tr>
<tr>
<td height="21" colspan="2" align="right" valign="bottom" class="lbls12">Tipo Incidencia:</td>
<td colspan="2" align="left" valign="bottom" class="txtnuevainciadmin">
<select disabled="disabled" name="cmbtipoincidencia" id="cmbtipoincidencia" class="txt3d">
<option>Seleccione tipo incidencia...</option>
</select></td>
</tr>
funcion que genera el combo:
function generainci()
{
include ("conectar_bd.php");// hay que conectar con la base de datos
$consulta=mysql_query("SELECT id, opcion FROM listainci");
// Voy imprimiendo el primer select compuesto por los paises
echo "<select name='cmbincidencia' id='cmbincidencia' class='txt3d'onChange='cargaContenido(this.id)'>";
while($registro=mysql_fetch_row($consulta))
{
echo "<option value='".$registro[0]."'>".$registro[1]."</option>";
}
echo "</select>";
}?>
pagina .js:
function nuevoAjax()
{
/* Crea el objeto AJAX. Esta funcion es generica para cualquier utilidad de este tipo, por
lo que se puede copiar tal como esta aqui */
var xmlhttp=false;
try
{
// Creacion del objeto AJAX para navegadores no IE
xmlhttp=new ActiveXObject("Msxml2.XMLHTTP");
}
catch(e)
{
try
{
// Creacion del objet AJAX para IE
xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
}
catch(E)
{
if (!xmlhttp && typeof XMLHttpRequest!='undefined') xmlhttp=new XMLHttpRequest();
}
}
return xmlhttp;
}

// Declaro los selects que componen el documento HTML. Su atributo ID debe figurar aqui.
var listadoSelects=new Array();
listadoSelects[0]="cmbincidencias";
listadoSelects[1]="cmbtipoincidencia";

function buscarEnArray(array, dato)
{
// Retorna el indice de la posicion donde se encuentra el elemento en el array o null si no se encuentra
var x=0;
while(array[x])
{
if(array[x]==dato) return x;
x++;
}
return null;
}

function cargaContenido(idSelectOrigen)
{
// Obtengo la posicion que ocupa el select que debe ser cargado en el array declarado mas arriba
var posicionSelectDestino=buscarEnArray(listadoSelects , idSelectOrigen)+1;
// Obtengo el select que el usuario modifico
var selectOrigen=document.getElementById(idSelectOrige n);
// Obtengo la opcion que el usuario selecciono
var opcionSeleccionada=selectOrigen.options[selectOrigen.selectedIndex].value;
// Si el usuario eligio la opcion "Elige", no voy al servidor y pongo los selects siguientes en estado "Selecciona opcion..."
if(opcionSeleccionada==0)
{
var x=posicionSelectDestino, selectActual=null;
// Busco todos los selects siguientes al que inicio el evento onChange y les cambio el estado y deshabilito
while(listadoSelects[x])
{
selectActual=document.getElementById(listadoSelect s[x]);
selectActual.length=0;

var nuevaOpcion=document.createElement("option"); nuevaOpcion.value=0; nuevaOpcion.innerHTML="Selecciona Opci&oacute;n...";
selectActual.appendChild(nuevaOpcion); selectActual.disabled=true;
x++;
}
}
// Compruebo que el select modificado no sea el ultimo de la cadena
else if(idSelectOrigen!=listadoSelects[listadoSelects.length-1])
{
// Obtengo el elemento del select que debo cargar
var idSelectDestino=listadoSelects[posicionSelectDestino];
var selectDestino=document.getElementById(idSelectDest ino);
// Creo el nuevo objeto AJAX y envio al servidor el ID del select a cargar y la opcion seleccionada del select origen
var ajax=nuevoAjax();
ajax.open("GET", "comboinci_select_proceso.php?select="+idSelectDes tino+"&opcion="+opcionSeleccionada, true);
ajax.onreadystatechange=function()
{
if (ajax.readyState==1)
{
// Mientras carga elimino la opcion "Selecciona Opcion..." y pongo una que dice "Cargando..."
selectDestino.length=0;
var nuevaOpcion=document.createElement("option"); nuevaOpcion.value=0; nuevaOpcion.innerHTML="Cargando...";
selectDestino.appendChild(nuevaOpcion); selectDestino.disabled=true;
}
if (ajax.readyState==4)
{
selectDestino.parentNode.innerHTML=ajax.responseTe xt;
}
}
ajax.send(null);
}
}
proceso que genera en php:
<?php
// Array que vincula los IDs de los selects declarados en el HTML con el nombre de la tabla donde se encuentra su contenido
$listadoSelects=array(
"cmbincidencia"=>"listainci",
"cmbtipoincidencia"=>"listatipoinci"
);

function validaSelect($selectDestino)
{
// Se valida que el select enviado via GET exista
global $listadoSelects;
if(isset($listadoSelects[$selectDestino])) return true;
else return false;
}

function validaOpcion($opcionSeleccionada)
{
//Se valida que la opcion seleccionada por el usuario en el select tenga un valor numerico
if(is_numeric($opcionSeleccionada)) return true;
else return false;
}

$selectDestino=$_GET["select"];
$opcionSeleccionada=$_GET["opcion"];

if(validaSelect($selectDestino) && validaOpcion($opcionSeleccionada))
{
$tabla=$listadoSelects[$selectDestino];
include ("conectar_bd.php");// hay que conectar con la base de datos
$consulta=mysql_query("SELECT id, opcion FROM $tabla WHERE relacion='$opcionSeleccionada'") or die(mysql_error());

// Comienzo a imprimir el select
echo "<select name='".$selectDestino."' id='".$selectDestino."' class='txt3d' onChange='cargaContenido(this.id)'>";
echo "<option value='0'>Seleccione tipo incidencia...</option>";
while($registro=mysql_fetch_row($consulta))
{
// Convierto los caracteres conflictivos a sus entidades HTML correspondientes para su correcta visualizacion
$registro[1]=htmlentities($registro[1]);
// Imprimo las opciones del select
echo "<option value='".$registro[0]."'>".$registro[1]."</option>";
}
echo "</select>";
//value='".$registro[0]."
}
?>