Foros del Web » Programando para Internet » Javascript » Frameworks JS »

Select dependientes con Ajax

Estas en el tema de Select dependientes con Ajax en el foro de Frameworks JS en Foros del Web. Hola amigos del foro tengo un pequeño problemilla al tratar de ingresar un dato seleccionado con mi select dependiente a mi BD. Este es mi ...
  #1 (permalink)  
Antiguo 04/08/2008, 10:56
Avatar de Superlinux  
Fecha de Ingreso: octubre-2005
Ubicación: Colombia
Mensajes: 662
Antigüedad: 19 años, 1 mes
Puntos: 1
Pregunta Select dependientes con Ajax

Hola amigos del foro tengo un pequeño problemilla al tratar de ingresar un dato seleccionado con mi select dependiente a mi BD.

Este es mi fomulario donde selecciono donde hago uso del select

ModificarCcp.php
Código PHP:
<HTML>
<HEAD>
<script language="JavaScript" type="text/javascript" src="../AJAX/AjaxSelectDependientesCuentas.js">
/**************************************************************************** 
* LLAMA AL OBJETO AJAX
****************************************************************************/
</script>
</HEAD>
<BODY bgColor=#a2aace>
<?php
// Carga funcion de conexion a BD
require ("ConexionBD.php");
?>
<form name="nuevo_item_Ccp" action="" onSubmit="EnviarDatosDetalleCcp(); return false">
<tr valign="middle"> 
<td width="11%" height="24" class="punteado" id="fila_1"> 
<?php
include('ListaCuentaSelectDependientesConBD.php');
?>
</td>
<td width="89%" class="punteado" id="fila_2"><select class="combo" disabled="disabled" id="select_1" name="nomcuenta">
<option value="">Cuenta...</option>
</select></td></tr>
</form>
</body>
</html>
El objeto Ajax
AjaxSelectDependientesCuentas.js
Código PHP:
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"); 
    }
//Fin del try
    
catch(e)
    { 
        try
        { 
            
// Creacion del objet AJAX para IE 
            
xmlhttp=new ActiveXObject("Microsoft.XMLHTTP"); 
        }
//Fin del try
        
catch(E) { xmlhttp=false; }
    }
//Fin del catch(e) 
    
if (!xmlhttp && typeof XMLHttpRequest!='undefined') { xmlhttp=new XMLHttpRequest(); } 

    return 
xmlhttp
}
//Fin function nuevoAjax()


function cargaContenidoCuentas()
{
    var 
valor=document.getElementById("select_0").options[document.getElementById("select_0").selectedIndex].value;
    if(
valor==0)
    {
        
// Si el usuario eligio la opcion "Elige", no voy al servidor y pongo todo por defecto
        
combo=document.getElementById("select_1");
        
combo.length=0;
        var 
nuevaOpcion=document.createElement("option"); nuevaOpcion.value=0nuevaOpcion.innerHTML="Seleccione...";
        
combo.appendChild(nuevaOpcion);    combo.disabled=true;
    }
//Fin del if
    
else
    {
        
ajax=nuevoAjax();
        
ajax.open("GET""../PUBLIC/SelectDependientesProcesoCuentas.php?seleccionado="+valortrue);
        
ajax.onreadystatechange=function() 
        { 
            if (
ajax.readyState==1)
            {
                
// Mientras carga elimino la opcion "Elige pais" y pongo una que dice "Cargando"
                
combo=document.getElementById("select_1");
                
combo.length=0;
                var 
nuevaOpcion=document.createElement("option"); nuevaOpcion.value=0nuevaOpcion.innerHTML="Cargando...";
                
combo.appendChild(nuevaOpcion); combo.disabled=true;    
            }
//Fin del if
            
if (ajax.readyState==4)
            { 
                
document.getElementById("fila_2").innerHTML=ajax.responseText;
            }
//Fin del if
        
}//Fin function() 
        
ajax.send(null);
    }
//Fin del else
}//Fin function cargaContenido() 
SelectDependientesProcesoCuentas.php
Código PHP:
<?php
//conexion BD
include_once("DBManager.php");

function 
ValidaValor($parametro)
{
    return 
TRUE;
}
//Fin function validaValor($parametro)

$valor=$_GET["seleccionado"];

if(
ValidaValor($valor))
{
    
// Genero la consulta trayendo todos los estados que correspondan al codigo de pais elegido
    
$consulta=mysql_query("SELECT codcuenta FROM cuentas WHERE codcuenta='$valor'");

    
// Comienzo a imprimir el select
    
echo "<select class='combo' id='select_1' name='codcuenta'>";
    while(
$registro=mysql_fetch_row($consulta))
    {
        
// Paso a HTML acentors y ñ para su correcta visualizacion
        
$registro[1]=htmlentities($registro[1]);
        
// Imprimo las opciones del select
        
echo "<option value='".$registro[0]."'>".$registro[1]."</option>";
    }
//Fin del while            
    
echo "</select>";
}
//Fin del if
?>
La tabla ...

--
-- Estructura de tabla para la tabla `cuentas`
--

CREATE TABLE `cuentas` (
`codcuenta` varchar(8) NOT NULL default '',
`nomcuenta` varchar(40) NOT NULL default '',
`tasa` double NOT NULL default '0',
`destino` varchar(8) NOT NULL default '',
`tipodestino` char(2) default NULL,
PRIMARY KEY (`codcuenta`)
) TYPE=InnoDB;


NOTA: El campo seleccionado que deseo ingresar a mi la tabla contabilizacioncp es codcuenta ... el campo nomcuenta es solo informativo ...


... Gracias por la ayuda que me puedan brindar.
__________________
"La vida sigue su curso, tú toma parte de ella."
  #2 (permalink)  
Antiguo 04/08/2008, 13:46
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años, 5 meses
Puntos: 2135
Respuesta: Select dependientes con Ajax

Hola Superlinux,

No expones que problema tienes en concreto y si tienes algún mensaje de error.

Saludos.
  #3 (permalink)  
Antiguo 04/08/2008, 13:46
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años, 5 meses
Puntos: 2135
Respuesta: Select dependientes con Ajax

Hola Superlinux,

No expones que problema tienes en concreto y si tienes algún mensaje de error.

Saludos.
  #4 (permalink)  
Antiguo 05/08/2008, 02:15
Avatar de Superlinux  
Fecha de Ingreso: octubre-2005
Ubicación: Colombia
Mensajes: 662
Antigüedad: 19 años, 1 mes
Puntos: 1
Respuesta: Select dependientes con Ajax

mmm mensajes de error ninguno ...

solo que el dato contenido en el select

echo "<option value='".$registro[0]."'>".

no me lo ingresa en la tabla ...
__________________
"La vida sigue su curso, tú toma parte de ella."
  #5 (permalink)  
Antiguo 05/08/2008, 08:37
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años, 5 meses
Puntos: 2135
Respuesta: Select dependientes con Ajax

Haz comprobado que $registro tenga algún valor?

Te recomiendo que bajes la extensión Web Developer Toolbar de Firefox, con ella puedes usar el método View Generated Source para ver el HTML Generado y así puedes ver si la parte de value tiene algún valor.

Saludos.
  #6 (permalink)  
Antiguo 05/08/2008, 09:49
Avatar de Superlinux  
Fecha de Ingreso: octubre-2005
Ubicación: Colombia
Mensajes: 662
Antigüedad: 19 años, 1 mes
Puntos: 1
De acuerdo Respuesta: Select dependientes con Ajax

ok ... revisare y luego te cuento ... gracias.
__________________
"La vida sigue su curso, tú toma parte de ella."
  #7 (permalink)  
Antiguo 05/08/2008, 11:29
Avatar de Superlinux  
Fecha de Ingreso: octubre-2005
Ubicación: Colombia
Mensajes: 662
Antigüedad: 19 años, 1 mes
Puntos: 1
Respuesta: Select dependientes con Ajax

GatorV esta son las pruebas realizadas

Prueba.php
Código PHP:
<HTML><HEAD>
<script language="JavaScript">
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"); 
    }//Fin del try
    catch(e)
    { 
        try
        { 
            // Creacion del objet AJAX para IE 
            xmlhttp=new ActiveXObject("Microsoft.XMLHTTP"); 
        }//Fin del try
        catch(E) { xmlhttp=false; }
    }//Fin del catch(e) 
    if (!xmlhttp && typeof XMLHttpRequest!='undefined') { xmlhttp=new XMLHttpRequest(); } 

    return xmlhttp; 
}//Fin function nuevoAjax()


function cargaContenidoCuentas()
{
    var valor=document.getElementById("select_0").options[document.getElementById("select_0").selectedIndex].value;
    if(valor==0)
    {
        // Si el usuario eligio la opcion "Elige", no voy al servidor y pongo todo por defecto
        combo=document.getElementById("select_1");
        combo.length=0;
        var nuevaOpcion=document.createElement("option"); nuevaOpcion.value=0; nuevaOpcion.innerHTML="Seleccione...";
        combo.appendChild(nuevaOpcion);    combo.disabled=true;
    }//Fin del if
    else
    {
        ajax=nuevoAjax();
        ajax.open("GET", "../PUBLIC/SelectDependientesProcesoCuentas.php?seleccionado="+valor, true);
        ajax.onreadystatechange=function() 
        { 
            if (ajax.readyState==1)
            {
                // Mientras carga elimino la opcion "Elige codcuenta" y pongo una que dice "Cargando"
                combo=document.getElementById("select_1");
                combo.length=0;
                var nuevaOpcion=document.createElement("option"); nuevaOpcion.value=0; nuevaOpcion.innerHTML="Cargando...";
                combo.appendChild(nuevaOpcion); combo.disabled=true;    
            }//Fin del if
            if (ajax.readyState==4)
            { 
                document.getElementById("fila_2").innerHTML=ajax.responseText;
            }//Fin del if
        }//Fin function() 
        ajax.send(null);
    }//Fin del else
}//Fin function cargaContenido()
</script>
</HEAD>
<BODY bgColor=#a2aace>
<table border="1" width="23%" style="border-style:none;">
  <tr valign="middle"> 
    <td width="44%" height="44" class="punteado" id="fila_1"> 
     <?php
        
//conexion BD
        // +-----------------------------------------------------------------------------------------------------+
        // Funcion para conectarme a la Base de Datos Mysql
            
function conectar() { 
              if (!(
$link=mysql_connect("localhost","root","cenco"))) { 
                  echo 
"Error conectando a la base de datos."
                  exit(); 
               } 
//Fin del if
              
if (!mysql_select_db("sigdoc",$link)) { 
                  echo 
"Error seleccionando la base de datos."
                  exit(); 
               } 
//Fin del if 
               
return $link
             } 
//Fin funcion conectar
             
$link=conectar(); 
        
?>
        <?php
        $consulta
=mysql_query("SELECT * FROM cuentas order by codcuenta");
        
?>
        <select class='combo' id='select_0' name='codcuenta' onChange='cargaContenidoCuentas()' style="background:#ffffff" onFocus="encender(this)" onBlur="apagar(this)" validationhint="required" validationmsg="El campo Cuenta es de tipo obligatorio" onKeyPress="return tabular(event,this)">
        <?php
        
        
// Voy imprimiendo el primer select compuesto 
        
while($registro=mysql_fetch_row($consulta))
        {
            echo 
"<option value='".$registro[0]."'>".$registro[0]."</option>";
        }
//Fin del while
        
?>
        </select>
    </td>
    <td width="56%" class="punteado" id="fila_2"><select class="combo" disabled="disabled" id="select_1" name="nomcuenta">
        <option value="">Cuenta...</option>
      </select></td>
  </tr>
</table>
</body>
</html>
SelectDependientesProcesoCuentas.php
Código PHP:
<?php
//conexion BD
// +-----------------------------------------------------------------------------------------------------+
// Funcion para conectarme a la Base de Datos Mysql
function conectar() { 
  if (!(
$link=mysql_connect("localhost","root","cenco"))) { 
      echo 
"Error conectando a la base de datos."
      exit(); 
   } 
//Fin del if
  
if (!mysql_select_db("sigdoc",$link)) { 
      echo 
"Error seleccionando la base de datos."
      exit(); 
   } 
//Fin del if 
   
return $link
//Fin funcion conectar
$link=conectar(); 

// +-----------------------------------------------------------------------------------------------------+
function ValidaValor($parametro)
{
    return 
TRUE;
}
//Fin function validaValor($parametro)

$valor=$_GET["seleccionado"];

if(
ValidaValor($valor))
{
    
// Genero la consulta trayendo todos los nombres que correspondan al codigo de la cuenta elegida
    
$consulta=mysql_query("SELECT * FROM cuentas WHERE codcuenta='$valor'");

    
// Comienzo a imprimir el select
    
echo "<select class='combo' id='select_1' name='codcuenta'>";
    while(
$registro=mysql_fetch_row($consulta))
    {
        
// Paso a HTML acentors y ñ para su correcta visualizacion
        
$registro[0]=htmlentities($registro[1]);
        
// Imprimo las opciones del select
        
echo "<option value='".$registro[0]."'>".$registro[1]."</option>";
    }
//Fin del while            
    
echo "</select>";
}
//Fin del if
?>
al seleccionar el codcuenta 0 este me trae el valor ....

Código PHP:
<td class="punteado" id="fila_2" width="56%"><select class="combo" id="select_1" name="codcuenta"><option value="CAJA MENOR">CAJA MENOR</option></select></td
Pero necesito ingresar el mismo 0 del codcuenta seleccionado. Aunque no se que valor me trae SelectDependientesProcesoCuentas.php ...

Gracias po tu ayuda....
__________________
"La vida sigue su curso, tú toma parte de ella."
  #8 (permalink)  
Antiguo 05/08/2008, 12:19
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años, 5 meses
Puntos: 2135
Respuesta: Select dependientes con Ajax

Aqui tienes el problema:
Código PHP:
$registro[0]=htmlentities($registro[1]); 
Estas sobreescribiendo el valor por el de $registro[1], debes de quitar esa linea para que te imprima el id correcto en la opcion.

Saludos.
  #9 (permalink)  
Antiguo 05/08/2008, 14:25
Avatar de Superlinux  
Fecha de Ingreso: octubre-2005
Ubicación: Colombia
Mensajes: 662
Antigüedad: 19 años, 1 mes
Puntos: 1
Respuesta: Select dependientes con Ajax

Gracias GatorV por la ayuda ... pero aun tengo un pequeño error .. luego del cambio el valor que se ingresa en el campo de la tabla es

undefine ...

Teniendo presente el cambio que me sugeristes ... el View de Firefox visualiza

Código PHP:
<td class="punteado" id="fila_2" width="56%"><select class="combo" id="select_1" name="codcuenta"><option value="11051001">CAJA MENOR</option></select></td
....
__________________
"La vida sigue su curso, tú toma parte de ella."
  #10 (permalink)  
Antiguo 06/08/2008, 08:36
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años, 5 meses
Puntos: 2135
Respuesta: Select dependientes con Ajax

Hola superlinux,

Donde es que te muestra undefined, ya que eso parece ser ya en una ejecución de Javascript.

Saludos.
  #11 (permalink)  
Antiguo 10/08/2008, 18:30
Avatar de Superlinux  
Fecha de Ingreso: octubre-2005
Ubicación: Colombia
Mensajes: 662
Antigüedad: 19 años, 1 mes
Puntos: 1
Pregunta Respuesta: Select dependientes con Ajax

en el campo de mi BD --
campo codcuenta de mi tabla contabilizacioncp

CREATE TABLE `contabilizacioncp` (
`idcont` int(11) NOT NULL auto_increment,
`numdoc` int(5) NOT NULL default '0',
`codcuenta` varchar(8) collate latin1_general_ci NOT NULL default '',
`nitcontab` varchar(11) collate latin1_general_ci NOT NULL default '',
`indcucontab` char(2) collate latin1_general_ci NOT NULL default '',
`debito` double default NULL,
`credito` double default NULL,
`detacontab` text collate latin1_general_ci,
`vrbase` int(11) default NULL,
`naturaleza` char(1) collate latin1_general_ci default NULL,
PRIMARY KEY (`idcont`),
KEY `numdoc` (`numdoc`),
KEY `codcuenta` (`codcuenta`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci AUTO_INCREMENT=0 ;

Gracias nuevamente ....

__________________
"La vida sigue su curso, tú toma parte de ella."
  #12 (permalink)  
Antiguo 11/08/2008, 08:43
Avatar de Superlinux  
Fecha de Ingreso: octubre-2005
Ubicación: Colombia
Mensajes: 662
Antigüedad: 19 años, 1 mes
Puntos: 1
De acuerdo Respuesta: Select dependientes con Ajax

OK ... ya me dio perfecto ...

Gracias GatorV por la ayuda ...

__________________
"La vida sigue su curso, tú toma parte de ella."
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 19:01.