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

[PHP] Select con valores de tabla Mysql que dependa del valor seleccionado en la 1ra

Estas en el tema de [PHP] Select con valores de tabla Mysql que dependa del valor seleccionado en la 1ra en el foro de Frameworks JS en Foros del Web. Hola Primero que nada muy feliz año a todos. Necesito una lista desplegable (<select>) con valores de una tabla Mysql que dependa del valor seleccionado ...
  #1 (permalink)  
Antiguo 01/01/2006, 15:33
 
Fecha de Ingreso: noviembre-2003
Mensajes: 798
Antigüedad: 21 años
Puntos: 8
[PHP] Select con valores de tabla Mysql que dependa del valor seleccionado en la 1ra

Hola

Primero que nada muy feliz año a todos.

Necesito una lista desplegable (<select>) con valores de una tabla Mysql que dependa del valor seleccionado en la primera, con AJAX, PHP Y Mysql, para que no recarge la pagina.

Necesito algo parecido al ejemplo 5 de ésta pagina pero solo con las listas despegables (nada mas).


gracias y salu2


zsamer
  #2 (permalink)  
Antiguo 03/01/2006, 08:13
 
Fecha de Ingreso: julio-2003
Mensajes: 71
Antigüedad: 21 años, 4 meses
Puntos: 0
hola y feliz año...

Si lo que deseas hacer es lo que e hecho aqui... hace ya algun tiempo .... http://www.whatsthepoint.com.ar/demo_ajax/

debes hacer lo sigiuente....

en principio..... dentro del <body> ... publicas los combos.... el 1ro.., si lo deseas, cargale el contenido de la Tabla Marcas
ej:
<select size="8" width="130" name="combo" id="combo" onChange="onChange_Combo_Marcas( this.selectedIndex ); return false;" style="width:120"></select>
y luego el 2do. combo..

<select size="8" width="130" name="combo1" id="combo1" style="width:120">
</select>

Debes tener en cuenta que los combos llevan ID para luego referenciarlos desde javascript.

ahora... vamos al javascript... que seria lo mas engorroso.

<script type="text/javascript" language="JavaScript1.2">

var url = "accion.php?param=";
var http = getHTTPObject(); // We create the HTTP Object

//---------------------------------------------------
//-- Genera xmlHttpRequest
//---------------------------------------------------

function getHTTPObject() {
var xmlhttp;
/*@cc_on
@if (@_jscript_version >= 5)
try {
xmlhttp = new ActiveXObject("Msxml2.XMLHTTP");
} catch (e) {
try {
xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
} catch (E) {
xmlhttp = false;
}
}
@else
xmlhttp = false;
@end @*/
if (!xmlhttp && typeof XMLHttpRequest != 'undefined') {
try {
xmlhttp = new XMLHttpRequest();
} catch (e) {
xmlhttp = false;
}
}
return xmlhttp;
}


//---------------------------------------------------
//-- Acciona sobre Click del Combo MARCAS
//---------------------------------------------------

function onChange_Combo_Marcas() {

var selObj = document.getElementById('combo');
var selIndex = selObj.selectedIndex;
var marca = selObj.options[selIndex].value;

document.getElementById('combo1').options.length = 0;


http.open("GET", url + escape(marca) , true);

http.onreadystatechange = handleHttpResponse_cbx_modelo;

http.send(null);



}


como veras... esta ultima funcion ejerce la accion sobre cuando cambia la seleccion del 1er combo en el formulario...
y el http.open("GET", url + escape(marca) , true); lo que hace es llamar a tu script PHP, que es donde realizas la query a la tabla de modelos y publicas el XML para luego tomarlo desde la funcion handleHttpResponse_cbx_modelo() que detallo a continuacion.

//*---------------------------------------------------------------
//-- Carga COMBO de Modelos
//----------------------------------------------------------------

function handleHttpResponse_cbx_modelo() {


if (http.readyState == 4) {

var i;

var total = http.responseXML.getElementsByTagName('LINEA').len gth;

//var total = http.getElementsByTagName('LINEA').length;

// alert( total );

// results = http.responseText;

// alert(results);


for(i=0;i<total;i++){

//document.getElementById('combo1').options[i]= new Option(results[i],i+1);
//colxxx = http.responseXML.getElementsByTagName('col1')[i].firstChild.data;
document.getElementById('combo1').options[i]= new Option( http.responseXML.getElementsByTagName('COL1')[i].firstChild.data ,http.responseXML.getElementsByTagName('COL2')[i]);
}

window.status = '';

return false;

}

}


</script>

esto es todo el javascript que intervendria para cargar los combos dinamicamente...

dime que no entiendes hasta aqui... y luego te explico que iria en el PHP....

salu2.
  #3 (permalink)  
Antiguo 04/01/2006, 04:06
 
Fecha de Ingreso: diciembre-2004
Ubicación: Pamplona
Mensajes: 71
Antigüedad: 19 años, 11 meses
Puntos: 0
Creo que llego tarde

Me parecece que el POST que e puesto un poco más arriba utilizando la librería XAJAX se ejusta perfectamente a lo que estás buscando, mira los detalles en Detalles
Posiblemente te surjan 5000 dudas porque me explico fatal, pero no dudes en preguntarme lo que sea, estaré encantado de ayudarte, un saludo desde Pamplona;

Spielberg
__________________
"Durante toda mi vida, mi padre habló de abandonar el pequeño pueblo en el que había nacido por una gran ciudad, porque, como él decía, no quería ser "un gran pez en una pequeña pecera".

Big Fish
  #4 (permalink)  
Antiguo 04/01/2006, 09:56
 
Fecha de Ingreso: noviembre-2003
Mensajes: 798
Antigüedad: 21 años
Puntos: 8
Cita:
Iniciado por Spielberg
Me parecece que el POST que e puesto un poco más arriba utilizando la librería XAJAX se ejusta perfectamente a lo que estás buscando, mira los detalles en Detalles
Posiblemente te surjan 5000 dudas porque me explico fatal, pero no dudes en preguntarme lo que sea, estaré encantado de ayudarte, un saludo desde Pamplona;

Spielberg
Hola,

Es justo lo que necesito, pero tengo dudas, me descargue el xajax_0.2_stable de la página oficial.

Código PHP:
echo "<script language=\"JavaScript\" src=\"ejemplo1.js\"></script>";//Archivo que lleva las funciones javascript
include_once("components/com_personalizado/server1.server.php"); //servidor para XAJAX
$xajax->printJavascript();//Algo que hay que poner 
echo "";//Llamada a la otra función javascript que es la que \"retroalimenta\" todo. 
Mis dudas son las siguientes:

1
donde encuentro el archivo components/com_personalizado/server1.server.php , no lo encuentro en la libreria de xajax.

2 hay un echo en el codigo: a que funcion llama?, cual?
Código PHP:
echo "";//Llamada a la otra función javascript que es la que \"retroalimenta\" todo. 
3 cual es el archivo ejemplo1.js. (que funciones contiene)

es posible que postees el script funcionando? porfavor

gracias y salu2

zsamer
  #5 (permalink)  
Antiguo 04/01/2006, 10:45
 
Fecha de Ingreso: diciembre-2004
Ubicación: Pamplona
Mensajes: 71
Antigüedad: 19 años, 11 meses
Puntos: 0
Si la verdad es que me xplico fatal

He estado releyendo lo que escribí en mi blog y no me entero ni yo de lo que contiene. Voy a intentar enmendar mi error.
1.- El script funcionando lo tienes aqui;
Puedes comprobar su funcionamiento seleccionando cualquier municipio (el único que tiene barrios es Pamplona).
2.- El archivo "server1server.php" es un que tienes que hacer que contendrá lo siguiente;
Código PHP:
//CONTIENE FUNCIONES PHP QUE SON LLAMADAS DIRECTAMENTE DESDE AJAX PARA QUE HAGAN COSAS
require("xajax.inc.php");//Incluimos la libreria xajax
require("bd.php");//Incluimos una conexion a la base de datos

function actualizar($muni){//Funcion que llamaremos desde el primer select para crear el segundo
     
$conexion = new arquitecto("qai625");//Conexion a la base de datos
     
$sql "SELECT * FROM `barrio` ORDER BY Valor";
     
$result mysql_query$sql );
    if (
mysql_affected_rows() != 0){
        
$resultado "<select  class=\"inputbox\" name=\"VALORES[Barrio]\">";
        
$resultado .= "<option value=''>Todos los barrios</option> \n";
        while ( 
$arr_asoc mysql_fetch_array$result ) ) {
            
$resultado .= "<option value='" $arr_asoc['ID_Barrio'] . "'>" $arr_asoc['Valor'] . " (" $arr_asoc['count(*)'] . ")</option> \n";
            }
        
$resultado .= "</select>";
    
$resultado tildes$resultado );
    }else{
        
$resultado "Municipio sin barrios";
    }    
//Como ves todo lo ponemos dentro de una variable tipo cadena que se llama \$resultado lo pasamos por la funcion tildes() para convertir las tildes 
    
$respuesta = new xajaxResponse();//Creamos un nuevo objeto xajax
    
$respuesta->addAssign("barrio","innerHTML",$resultado);//Función importante que se le pasan tres parametros 1.- donde pintar, 2.- Como: "innerHTML" por defecto y 3.- Que: $resultado.
    
return $respuesta->getXML();    
    }

function 
limpiar(){//Funcion que se emplea apara que explorer no haga cosas raras
    
$respuesta = new xajaxResponse();
    
$respuesta->addAssign("barrio","innerHTML","");
    return 
$respuesta->getXML();
    }

function 
tildes($string){
    
$array = array("á" => "a""é" => "e""í" => "i""ó" => "o""ú" => "u");
    foreach ( 
$array as $aguja_vieja => $aguja_nueva){
        
$string str_replace $aguja_vieja$aguja_nueva$string );
        }
    return 
$string;
    }

$xajax = new xajax("ruta_completa_a_tu_archivo/server1.server.php","xajax_",false);
$xajax->registerFunction("actualizar");//Declaramos las funciones de PHP o javascript que no harán falta para que xajax sepa que existen
$xajax->registerFunction("limpiar");
$xajax->registerFunction("menu_barrio");
$xajax->processRequests();//Lo pones y ya esta 
El código del archivo js es tal que;
Código PHP:
function actu(){//Funcion que es llamada continuamente
    
xajax_menu_barrio;
    
setTimeout("menu_barrio;",1000);
    }
    
function 
menu_barrio(cual){//Funcion que es llamada al selecionar uno de los elementos del primer select
    
str_guardar document.getElementById(cual).value;//Recojo el valor del select
    
xajax_actualizar(str_guardar);//Llamo a la funcion actualizar del server1.server.php con el prefijo xajax y pasandole como argumento el pueblo seleccionado
    
document.getElementById("barrio").className ="normal";//Le aplico el estilo que me de la gana al nuevo select
    

Y ya está, no sé site servirá, creo que mejor que antes ya lo he hecho no? un saludo

Spielberg
__________________
"Durante toda mi vida, mi padre habló de abandonar el pequeño pueblo en el que había nacido por una gran ciudad, porque, como él decía, no quería ser "un gran pez en una pequeña pecera".

Big Fish
  #6 (permalink)  
Antiguo 04/01/2006, 12:52
 
Fecha de Ingreso: noviembre-2003
Mensajes: 798
Antigüedad: 21 años
Puntos: 8
no me funciona , no se como ejecutar el escript, ¿que tengo que poner para hacerlo funcionar en el archivo principal?
como invocar las funciones para que aparesca el form select(se ejecute el script)?

gracias, disculpa la ignorancia.


salu2

zsamer
  #7 (permalink)  
Antiguo 04/01/2006, 14:17
 
Fecha de Ingreso: diciembre-2004
Ubicación: Pamplona
Mensajes: 71
Antigüedad: 19 años, 11 meses
Puntos: 0
Cita:
Iniciado por zsamer
no me funciona , no se como ejecutar el escript, ¿que tengo que poner para hacerlo funcionar en el archivo principal?
como invocar las funciones para que aparesca el form select(se ejecute el script)?

gracias, disculpa la ignorancia.


salu2

zsamer
En la página principal tienes que poner al comienzo:
Código HTML:
<?php
	include_once("server1.server.php"); #servidor para XAJAX
	$xajax->printJavascript(); 
?>
</head>
<body onload="actu();"> 
y allí donde quieres que se cague el menu:
Código HTML:
<div id="barrio" class="visible"></div> 
Cómo que el from select??invocas a la función con el evento onChange que tiene el primer select.
__________________
"Durante toda mi vida, mi padre habló de abandonar el pequeño pueblo en el que había nacido por una gran ciudad, porque, como él decía, no quería ser "un gran pez en una pequeña pecera".

Big Fish
  #8 (permalink)  
Antiguo 04/01/2006, 15:24
 
Fecha de Ingreso: noviembre-2003
Mensajes: 798
Antigüedad: 21 años
Puntos: 8
No funciona para nada, me muestra la página en blanco.
  #9 (permalink)  
Antiguo 05/01/2006, 13:56
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 10 meses
Puntos: 129
Un "tip" para que no tengan problemas con los acentos, dieresis, ñ (eñe) .. o las ' (comilllas simples) y demás caracteres ..

Xajax por defecto codifica en "utf-8" ... Sólo tienes que codificar en utf-8 el dato que representas en tus "select":

Código PHP:
while ( $arr_asoc mysql_fetch_array$result ) ) { 
            
            
// Codificar a UTF-8 y añadir "escapes" caracters que den problemas.
            
$valor  addslashes($arr_asoc['Valor']);
            
$valor .= utf8_encode($valor);

            
$resultado .= "<option value='" $arr_asoc['ID_Barrio'] . "'>" $valor " (" $arr_asoc['count(*)'] . ")</option> \n"
            } 
Y así con el resto de datos que usemos ...

Por lo menos con eso no he tenido problemas.. Sin la codificación .. tenía problemas cuando representaba tablas con datos con acentos .. o ñ .. o comillas (O'Higgins .. etc ..). Pensé como la propuesta de:

function tildes($string){
$array = array("á" => "a", "é" => "e", "í" => "i", "ó" => "o", "ú" => "u");
foreach ( $array as $aguja_vieja => $aguja_nueva){
$string = str_replace ( $aguja_vieja, $aguja_nueva, $string );
}
return $string;
}

en eliminar los acentos .. pero realmente el problema está en que hay que codificarlos correctamente.

PD: Spielberg dejé un comentario en tu Blog al respecto.

Un saludo,

Última edición por Cluster; 05/01/2006 a las 14:06
  #10 (permalink)  
Antiguo 05/01/2006, 14:12
 
Fecha de Ingreso: noviembre-2003
Mensajes: 798
Antigüedad: 21 años
Puntos: 8
Cita:
Iniciado por Cluster
Un "tip" para que no tengan problemas con los acentos, dieresis, ñ (eñe) .. o las ' (comilllas simples) y demás caracteres ..

Xajax por defecto codifica en "utf-8" ... Sólo tienes que codificar en utf-8 el dato que representas en tus "select":

Código PHP:
while ( $arr_asoc mysql_fetch_array$result ) ) { 
            
            
// Codificar a UTF-8 y añadir "escapes" caracters que den problemas.
            
$valor  addslashes($arr_asoc['Valor']);
            
$valor .= utf8_encode($valor);

            
$resultado .= "<option value='" $arr_asoc['ID_Barrio'] . "'>" $valor " (" $arr_asoc['count(*)'] . ")</option> \n"
            } 
Y así con el resto de datos que usemos ...

Por lo menos con eso no he tenido problemas.. Sin la codificación .. tenía problemas cuando representaba tablas con datos con acentos .. o ñ .. o comillas (O'Higgins .. etc ..). Pensé como la propuesta de:

function tildes($string){
$array = array("á" => "a", "é" => "e", "í" => "i", "ó" => "o", "ú" => "u");
foreach ( $array as $aguja_vieja => $aguja_nueva){
$string = str_replace ( $aguja_vieja, $aguja_nueva, $string );
}
return $string;
}

en eliminar los acentos .. pero realmente el problema está en que hay que codificarlos correctamente.

PD: Spielberg dejé un comentario en tu Blog al respecto.

Un saludo,
sigue sin funcionar, me muestra la página en blanco

alguna ayuda!!!


gracias
  #11 (permalink)  
Antiguo 05/01/2006, 14:28
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 10 meses
Puntos: 129
zsamer

Mi comentario sólo era para mejorar el script en cuestión y para solventar problemas que probablemente tengas (si trabajas con datos con esas características de caracteres especiales).

Sobre tu problema:

Yo uso XAjax con un código muyyy similar (no lo indico por que en su base es igual al que te han planteado, uso capas de abstracción de BD que podrían liar más el tema .. por eso no pongo "mi" ejemplo) .. La persona que te colaboró con el código dice que funciona y lo puedes ver en el link que te dejó ...

Sé que es complicado evaluar un problema cuando se usa Ajax (es dificil capturar sus mensajes de error cuando vienen del lado del servidor o se originan en el lado del cliente.

Algunos tips para que veas errores:

* Intenta hacer pruebas en IE y Firefox por si hay algún problema de incompatibildad con otros navegadores.

* Necesitas ver en tu navegador (el que uses) los errores de javascript que se peudan estar produciendo (en IE a la izquierda abajo veras un triangulo amarillo de precaución (!) si hay problemas "del lado del cliente"). Fijate bien si aparecen errores cuando ejecutas el código.

* La classe XAJAX tiene un buen método para "debugg" interno:
$xajax->debugOn();
Usalo despues de instanciar al objeto Xajax ($xajax = new xajax();)

Ahí se te irá informando del proceso Ajax que se está haciendo:
inico de Xajax, la instancia del objeto .. el envio de los datos y la recepción de lo que generes en el lado del servidor ..

Todo esto en el caso de que Xajax en general lo tengas bien configurado y funcionando: ¿probastes por curiosidad alguna demo de los que trae o los "tests"? .. eso sería fundamental para asegurar que "XAJAX" está bien instalado y configurado. (sobre todo con la reciente 0.2 versión que debes indicar las rutas de donde tienes tus JS que XAJAX genera y las própias classes de XAJAX.

Fijate -bien- en caso de que el debug te mustre el proceso, por qué por ahí podrías ver algún "error" que es originado por ejemplo por tu script PHP (proceso PHP) .. una mala conexión a tus BD .. algún error de ese estilo .. sólo veras en modo "debug" como para capturar su error.

Un saludo,
  #12 (permalink)  
Antiguo 05/01/2006, 15:15
 
Fecha de Ingreso: noviembre-2003
Mensajes: 798
Antigüedad: 21 años
Puntos: 8
Hola cluster, error de js no tengo ya que no aparece el signo (!)amarillo, el punto es que no aparece nada en la pagina sale todo en blanco.
y como estoy re100 tratando de meterme en esto de ajax, no entiendo mucho y lo pero es que no me arroja ningun error.

bueno aqui te dejo mis archivos que estan dentro de la carpeta de la libreria xajax.

ojalas me puedan ayudar a entender mas ajax.

salu2

archivo index.php
Código PHP:
echo "<script language=\"JavaScript\" src=\"ejemplo1.js\"></script>";//Archivo que lleva las funciones javascript
include_once("server1.server.php"); #servidor para XAJAX
$xajax->printJavascript(); 
?>

<body onload="actu();">
<div id="barrio" class="visible"></div>
</body> 
archivo ejemplo1.js
Código PHP:
function actu(){//Funcion que es llamada continuamente 
    
xajax_menu_barrio
    
setTimeout("menu_barrio;",1000); 
    } 
     
function 
menu_barrio(cual){//Funcion que es llamada al selecionar uno de los elementos del primer select 
    
str_guardar document.getElementById(cual).value;//Recojo el valor del select 
    
xajax_actualizar(str_guardar);//Llamo a la funcion actualizar del server1.server.php con el prefijo xajax y pasandole como argumento el pueblo seleccionado 
    
document.getElementById("barrio").className ="normal";//Le aplico el estilo que me de la gana al nuevo select 
    

archivo server1.server.php
Código PHP:
<?php

//CONTIENE FUNCIONES PHP QUE SON LLAMADAS DIRECTAMENTE DESDE AJAX PARA QUE HAGAN COSAS 
require("xajax.inc.php");//Incluimos la libreria xajax 

// Servidor de la Base de Datos 
$servidorBD="localhost"
// Usuario de la Base de Datos 
$usuarioBD="root"
// Contraseña de la Base de Datos 
$passBD=""
// Nombre de la Base de Datos 
$nombreBD="zsamer";

// Conecto con la base de datos 
$conectar mysql_connect($servidorBD,$usuarioBD,$passBD) or die ("Imposible conectar con la base de datos"); 
// Selecciono la BBDD 
mysql_select_db($nombreBD,$conectar) or die ("Imposible conectar con la base de datos"); 

function 
actualizar($muni){//Funcion que llamaremos desde el primer select para crear el segundo 
     
$sql "SELECT * FROM `barrio` ORDER BY Valor"
     
$result mysql_query$sql ) or die (mysql_error());  
    if (
mysql_affected_rows() != 0){ 
        
$resultado "<select  class=\"inputbox\" name=\"VALORES[Barrio]\">"
        
$resultado .= "<option value=''>Todos los barrios</option> \n"
        while ( 
$arr_asoc mysql_fetch_array$result ) ) {  
             
            
// Codificar a UTF-8 y añadir "escapes" caracters que den problemas. 
            
$valor  addslashes($arr_asoc['Valor']); 
            
$valor .= utf8_encode($valor); 

            
$resultado .= "<option value='" $arr_asoc['ID_Barrio'] . "'>" $valor " (" $arr_asoc['count(*)'] . ")</option> \n";  
            }  
        
$resultado .= "</select>"
    
$resultado tildes$resultado ); 
    }else{ 
        
$resultado "Municipio sin barrios"
    }    
//Como ves todo lo ponemos dentro de una variable tipo cadena que se llama \$resultado lo pasamos por la funcion tildes() para convertir las tildes  
    
$respuesta = new xajaxResponse();//Creamos un nuevo objeto xajax 
    
$respuesta->addAssign("barrio","innerHTML",$resultado);//Función importante que se le pasan tres parametros 1.- donde pintar, 2.- Como: "innerHTML" por defecto y 3.- Que: $resultado. 
    
return $respuesta->getXML();     
    } 

function 
limpiar(){//Funcion que se emplea apara que explorer no haga cosas raras 
    
$respuesta = new xajaxResponse(); 
    
$respuesta->addAssign("barrio","innerHTML",""); 
    return 
$respuesta->getXML(); 
    } 
        
function 
tildes($string){ 
$array = array("á" => "a""é" => "e""í" => "i""ó" => "o""ú" => "u"); 
foreach ( 
$array as $aguja_vieja => $aguja_nueva){ 
$string str_replace $aguja_vieja$aguja_nueva$string ); 

return 
$string


//FUNCION MENU_MUNI_COND
function menu_muni_cond$prov$estilo ) {
        
$cons "SELECT * FROM municipio ORDER BY Valor";
        
$resultado mysql_query$cons ) or die (mysql_error());
        echo 
"<select id=\"muni\" name=\"VALORES[Municipio]\" class=\"$estilo\" onchange=\"menu_barrio('muni')\"><option selected=\"true\"> Municipios </option><option>".$arr_asoc['Valor'].")</option></select>";
        }

$xajax = new xajax("server1server.php","xajax_",false); 
$xajax->registerFunction("actualizar");//Declaramos las funciones de PHP o javascript que no harán falta para que xajax sepa que existen 
$xajax->registerFunction("limpiar"); 
$xajax->registerFunction("menu_barrio"); 
$xajax->processRequests();//Lo pones y ya esta  
?>
  #13 (permalink)  
Antiguo 06/01/2006, 05:06
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 10 meses
Puntos: 129
Y probastes a usar:

Código PHP:
$xajax->debugOn(); 
como te mencioné?

Te recuerdo una vez más que al usar las técnicas de "Ajax" se hace muy complicado ver algún mensaje de error .. Pero la classe que usas (XAJAX) por suerte implementa sus própios sistemas para que veas como va funcionando tu aplicación.

Un saludo,
  #14 (permalink)  
Antiguo 06/01/2006, 06:18
 
Fecha de Ingreso: noviembre-2003
Mensajes: 798
Antigüedad: 21 años
Puntos: 8
con $xajax->debugOn(); sigue sin mostrar mensajes de errores
  #15 (permalink)  
Antiguo 06/01/2006, 06:33
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 10 meses
Puntos: 129
zsamer

Empieza por lo básico:
Olvidate de tu probleam puntual (que ya tienes una solución usando una de tantas librerías como es XAJAX).

Toma "XAJAX" com tal .. y prueba sus "demos" o sus "tests" .. haz primero que funcionen estos y .. cuando eso lo tengas claro (que "Xajax" lo tienes bien instalado y funciona en tus condiciones) .. entonces prueba el código de ejemplo que te han dado por aquí.

Un saludo,
  #16 (permalink)  
Antiguo 06/01/2006, 07:20
 
Fecha de Ingreso: noviembre-2003
Mensajes: 798
Antigüedad: 21 años
Puntos: 8
cluster

ya probe los ejemplos que trae y funciona perfecto, yo creo que el ejemplo que me pasaron le faltan algunas cosas para que funcione.


Saludos
  #17 (permalink)  
Antiguo 06/01/2006, 10:25
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 10 meses
Puntos: 129
Ok, -gracias- por confirmar eso.

Te pongo el ejemplo que te comenté mio .. No puedo asesorate mucho si no te funciona o para adaptarlo a tus necesidades .. intenta entenderlo .. por lo menos está todo en un sólo script.

Código PHP:
<?
require ('../classes/ajax/xajax.inc.php');
include_once 
"../classes/ez_sql.php";

function 
opcion($region){
global 
$db;

$sql "SELECT id_comuna,nombre_comuna FROM comunas WHERE id_region_comunas='".$region."' ORDER BY nombre_comuna";

$comunas_resultado=$db->get_results($sql);

$opcion "<select id=\"comuna\" name=\"comuna\" onChange=\"xajax_opcion2(document.getElementById('region').value,document.getElementById('comuna').value);\">";     
if (!
$comunas_resultado){
    
$opcion .="<option value=\"\">No hay comunas</option>";   
} else {
    
$opcion .="<option value=\"\">-- Seleccione --</option>";
    foreach (
$comunas_resultado as $comuna){
           
$comuna_s=addslashes($comuna->nombre_comuna);
           
$comuna_s=utf8_encode($comuna_s);
        
$opcion .="<option value=\"".$comuna->id_comuna."\">".$comuna_s."</option>";        
       }
}
$opcion .= "</select>";

$objResponse = new XajaxResponse();
$objResponse->addAssign("divcomuna""innerHTML"$opcion);
return 
$objResponse;
//return $objResponse->getXML();
}


function 
opcion2($region,$comuna){
global 
$db;

$sql "SELECT id_calle_comuna,nombre_calle_comuna FROM calles_comuna_region WHERE id_region='".$region."' AND id_comuna='".$comuna."' ORDER BY nombre_calle_comuna";
$calles_resultado=$db->get_results($sql);

$opcion "<select id=\"calle\" name=\"calle\">";
if (!
$calles_resultado){
    
$opcion .="<option value=\"\">No hay calles</option>";
} else {    
    
$opcion .="<option value=\"\">-- Seleccione --</option>";
    foreach (
$calles_resultado as $calle){ 
           
$calles_s=addslashes($calle->nombre_calle_comuna);
           
$calles_s=utf8_encode($calles_s);
        
$opcion .="<option value=\"".$calle->id_calle."\">".$calles_s."</option>";  
    }    
}
$opcion .= "</select>"

$objResponse = new XajaxResponse(); 
$objResponse->addAssign("divcalle""innerHTML"$opcion);  
return 
$objResponse;
}

$xajax = new xajax(); 
$xajax->debugOn(); // Uncomment this line to turn debugging on
$xajax->statusMessagesOn ();

$xajax->registerFunction("opcion",XAJAX_GET);
$xajax->registerFunction("opcion2",XAJAX_GET);
$xajax->processRequests();
?>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>Documento sin t&iacute;tulo</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<?php $xajax->printJavascript("../classes/ajax/"); // indica la ruta donde tengas instalado Xajax ... ?>
</head>
<body onLoad="xajax_opcion(0);xajax_opcion2(0,0);">
<?
echo "variables:<br>";
print_r($_POST);
?>
<form name="formulario" action="direccion2.php" method="POST"> 
<?php

// directamente muestro el primer "combo" .. el "padre" y en base a ese armo "dinámicamente" en XAJAX el resto.

$sql "SELECT id_region,nombre_region FROM regiones";
$consulta_region $db->get_results($sql);

if (
$consulta_region) {
?>
  <select name="region" id="region" onChange="xajax_opcion(document.getElementById('region').value);xajax_opcion2(document.getElementById('region').value,0);">";     
if (!$comunas_resultado){"> 
    <option>---Seleccione una Opción---</option> 
<?
   
foreach($consulta_region as $regiones){ 
        echo 
"<option value=\"".$regiones->id_region."\">".$regiones->nombre_region."</option>\n"
    }
?> 
  </select> 
<?

?>
<div id="divcomuna"></div>
<div id="divcalle"></div>

  <input type="submit" name="Submit" value="Enviar">
</form>
</body>
</html>
Como te comenté .. usa una capa de abastracción de BBDD .. no es muy complicado adaptarlo a uso de "mysql_query()" y demás .. eso creo que es lo de menos.

Un saludo,

Última edición por Cluster; 06/01/2006 a las 14:21
  #18 (permalink)  
Antiguo 06/01/2006, 11:07
 
Fecha de Ingreso: noviembre-2003
Mensajes: 798
Antigüedad: 21 años
Puntos: 8
muschas gracias cluster, te pasaste, voy a ver tu ejemplo y investigar mas sobre xajax


Salu2

zsamer.
  #19 (permalink)  
Antiguo 06/01/2006, 14:24
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 10 meses
Puntos: 129
Se me olvidó un detalle:

En mi ejemplo uso:
$objResponse = new myXajaxResponse();

Deberías usar para tus pruebas:
$objResponse = new XajaxResponse();

"myXajaxResponse" es una classe que puse que extiende a "XajaxResponse". (Ahora no la uso, y si la usan tal cual algún error maracará por ahí por qué la classe no existe si se usa Xajax con sus classes originales .. La usé para probar el método que menciona en el wiki:
http://wiki.xajaxproject.org/Tips_an...ponse_Commands)

Un saludo,
  #20 (permalink)  
Antiguo 06/01/2006, 14:38
 
Fecha de Ingreso: noviembre-2003
Mensajes: 798
Antigüedad: 21 años
Puntos: 8
una duda,

en el <body> el
Código PHP:
onLoad="xajax_opcion(0);xajax_opcion2(0,0);" 
carga funciónes javascript o php (opcion(), opcion2()) que esta en tu script?
  #21 (permalink)  
Antiguo 06/01/2006, 14:50
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 10 meses
Puntos: 129
LLaman a ejecutar a las funciones "AJAX" que ahí se definen para iniciarlizarlas (o para pre-definir valores iniciales que puedas propagar por el URL/otros a ese script)

Toda función que sea de "XAJAX" tiene de prefijo xajax_ (o el que tu definas .. pero dejo el "por defecto" para que se diferencie bien claro). NO uso más funciones javascript definidas por mi ..

Cada función "xajax_" tiene su equivalente en el script PHP (lado del servidor) como el nombre de la función en sí .. Por eso está un opcion() en PHP como función y otra en "javascript" que es xajax_opcion() .. (esta función javascript se crea dinámicamente y esa es la "gracia" de la classe: XAJAX)

La función de PHP que tu creas en PHP (lado del servidor) y registras en XAJAX ($xajax->registerFunction("nombre_funcion");) quedará disponible para interactuar con ella vía Ajax.

Es bien simple esta forma básica de poner una función clasica PHP puro a funcionar en "ajax" bajo esta classe Xajax con estos métodos. Y más o menos claro de seguir el código con ayuda de los "pre-fijos" de los nombres de funciones y demás.

Un saludo,
  #22 (permalink)  
Antiguo 06/01/2006, 16:21
 
Fecha de Ingreso: noviembre-2003
Mensajes: 798
Antigüedad: 21 años
Puntos: 8
gracias cluster por la explicacion me quedo más claro ahora.

saludos
  #23 (permalink)  
Antiguo 19/01/2006, 11:53
 
Fecha de Ingreso: agosto-2004
Mensajes: 50
Antigüedad: 20 años, 3 meses
Puntos: 0
Hola a todos, tengo siempre problemas con AJAX, en todos los ejemplos que encuentro en la web sale error en la pagina, se requiere objeto.
Tambien me baje turboDBAdmin y tapoco no carga por el mismo problema alguien me puede ayudar????
  #24 (permalink)  
Antiguo 23/11/2009, 08:02
 
Fecha de Ingreso: marzo-2007
Mensajes: 12
Antigüedad: 17 años, 7 meses
Puntos: 0
De acuerdo Respuesta: [PHP] Select con valores de tabla Mysql que dependa del valor seleccionado

Cita:
Iniciado por Cluster Ver Mensaje
Ok, -gracias- por confirmar eso.

Te pongo el ejemplo que te comenté mio .. No puedo asesorate mucho si no te funciona o para adaptarlo a tus necesidades .. intenta entenderlo .. por lo menos está todo en un sólo script.

Código PHP:
<?
require ('../classes/ajax/xajax.inc.php');
include_once 
"../classes/ez_sql.php";

function 
opcion($region){
global 
$db;

$sql "SELECT id_comuna,nombre_comuna FROM comunas WHERE id_region_comunas='".$region."' ORDER BY nombre_comuna";

$comunas_resultado=$db->get_results($sql);

$opcion "<select id=\"comuna\" name=\"comuna\" onChange=\"xajax_opcion2(document.getElementById('region').value,document.getElementById('comuna').value);\">";     
if (!
$comunas_resultado){
    
$opcion .="<option value=\"\">No hay comunas</option>";   
} else {
    
$opcion .="<option value=\"\">-- Seleccione --</option>";
    foreach (
$comunas_resultado as $comuna){
           
$comuna_s=addslashes($comuna->nombre_comuna);
           
$comuna_s=utf8_encode($comuna_s);
        
$opcion .="<option value=\"".$comuna->id_comuna."\">".$comuna_s."</option>";        
       }
}
$opcion .= "</select>";

$objResponse = new XajaxResponse();
$objResponse->addAssign("divcomuna""innerHTML"$opcion);
return 
$objResponse;
//return $objResponse->getXML();
}


function 
opcion2($region,$comuna){
global 
$db;

$sql "SELECT id_calle_comuna,nombre_calle_comuna FROM calles_comuna_region WHERE id_region='".$region."' AND id_comuna='".$comuna."' ORDER BY nombre_calle_comuna";
$calles_resultado=$db->get_results($sql);

$opcion "<select id=\"calle\" name=\"calle\">";
if (!
$calles_resultado){
    
$opcion .="<option value=\"\">No hay calles</option>";
} else {    
    
$opcion .="<option value=\"\">-- Seleccione --</option>";
    foreach (
$calles_resultado as $calle){ 
           
$calles_s=addslashes($calle->nombre_calle_comuna);
           
$calles_s=utf8_encode($calles_s);
        
$opcion .="<option value=\"".$calle->id_calle."\">".$calles_s."</option>";  
    }    
}
$opcion .= "</select>"

$objResponse = new XajaxResponse(); 
$objResponse->addAssign("divcalle""innerHTML"$opcion);  
return 
$objResponse;
}

$xajax = new xajax(); 
$xajax->debugOn(); // Uncomment this line to turn debugging on
$xajax->statusMessagesOn ();

$xajax->registerFunction("opcion",XAJAX_GET);
$xajax->registerFunction("opcion2",XAJAX_GET);
$xajax->processRequests();
?>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>Documento sin t&iacute;tulo</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<?php $xajax->printJavascript("../classes/ajax/"); // indica la ruta donde tengas instalado Xajax ... ?>
</head>
<body onLoad="xajax_opcion(0);xajax_opcion2(0,0);">
<?
echo "variables:<br>";
print_r($_POST);
?>
<form name="formulario" action="direccion2.php" method="POST"> 
<?php

// directamente muestro el primer "combo" .. el "padre" y en base a ese armo "dinámicamente" en XAJAX el resto.

$sql "SELECT id_region,nombre_region FROM regiones";
$consulta_region $db->get_results($sql);

if (
$consulta_region) {
?>
  <select name="region" id="region" onChange="xajax_opcion(document.getElementById('region').value);xajax_opcion2(document.getElementById('region').value,0);">";     
if (!$comunas_resultado){"> 
    <option>---Seleccione una Opción---</option> 
<?
   
foreach($consulta_region as $regiones){ 
        echo 
"<option value=\"".$regiones->id_region."\">".$regiones->nombre_region."</option>\n"
    }
?> 
  </select> 
<?

?>
<div id="divcomuna"></div>
<div id="divcalle"></div>

  <input type="submit" name="Submit" value="Enviar">
</form>
</body>
</html>
Como te comenté .. usa una capa de abastracción de BBDD .. no es muy complicado adaptarlo a uso de "mysql_query()" y demás .. eso creo que es lo de menos.

Un saludo,
-----------------------------------------------
Saludos QUOTE,

Estuve analizando un poco el script que publicaste y a simple vista se ve que funciona. Surge en mi una duda: cuando refieres a la instruccion (include_once "../classes/ez_sql.php";), puedes, por favor, decirme qué función cumple ese script?
  #25 (permalink)  
Antiguo 23/11/2009, 08:11
 
Fecha de Ingreso: septiembre-2009
Mensajes: 81
Antigüedad: 15 años, 1 mes
Puntos: 1
Respuesta: [PHP] Select con valores de tabla Mysql que dependa del valor seleccionado

Tio acabas de revivir un post del 2006... Dejando eso de lado supongo k en ese archivo esta la conexion a la base de datos y la funcion get_results para poder hacer:
Código:
$db->get_results($sql);
  #26 (permalink)  
Antiguo 23/11/2009, 08:16
 
Fecha de Ingreso: marzo-2007
Mensajes: 12
Antigüedad: 17 años, 7 meses
Puntos: 0
De acuerdo Respuesta: [PHP] Select con valores de tabla Mysql que dependa del valor seleccionado

Cita:
Iniciado por catalon Ver Mensaje
Tio acabas de revivir un post del 2006... Dejando eso de lado supongo k en ese archivo esta la conexion a la base de datos y la funcion get_results para poder hacer:
Código:
$db->get_results($sql);
Ok, gracias por la aclaratoria. Eso mismo pensé; y bueno revivo este post porque tengo poco tiempo incursionando en XAJAX y como todo novato; busco información de todos lados.

Feliz día.
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 01:35.