Foros del Web » Programando para Internet » Javascript »

[SOLUCIONADO] Reporte con filtros

Estas en el tema de Reporte con filtros en el foro de Javascript en Foros del Web. Hola a todos hoy les traigo un ajax que me permite cargar datos de una tabla mediante un select, el problema que tengo es que ...
  #1 (permalink)  
Antiguo 03/09/2014, 11:29
 
Fecha de Ingreso: abril-2014
Mensajes: 51
Antigüedad: 10 años
Puntos: 1
Reporte con filtros

Hola a todos hoy les traigo un ajax que me permite cargar datos de una tabla mediante un select, el problema que tengo es que solo puedo hacer que funcione con un select y necesito que sea con dos, les presento el codigo.

<script>
function mostrarInfo(cod){
if (window.XMLHttpRequest)
{// code for IE7+, Firefox, Chrome, Opera, Safari
xmlhttp=new XMLHttpRequest();
}
else
{// code for IE6, IE5
xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
}
xmlhttp.onreadystatechange=function()
{
if (xmlhttp.readyState==4 && xmlhttp.status==200)
{
document.getElementById("datos").innerHTML=xmlhttp .responseText;
}else{
document.getElementById("datos").innerHTML='Cargan do...';
}
}
xmlhttp.open("POST","conexion/cons_report.php",true);
xmlhttp.setRequestHeader("Content-type","application/x-www-form-urlencoded");
xmlhttp.send("cod_banda="+cod);
}

</script>


El select esta formado de la siguiente manera

<SELECT name="tipo" onchange="mostrarInfo(this.value)">
<OPTION value="Compra de Servicio">Compra de Servicio</OPTION>
<OPTION value="Compra de Inventario">Compra de Inventario</OPTION>
<OPTION value="Compra de Herramientas">Compra de Herramientas</OPTION>
</SELECT>


y por ultimo cons_report.php es donde hago la consulta donde tomo cod_banda para llamar e imprimir los datos de mysql.

Como ven es un poco simple pero a la vez me complica la vida
  #2 (permalink)  
Antiguo 03/09/2014, 13:16
Avatar de Alexis88
Philosopher
 
Fecha de Ingreso: noviembre-2011
Ubicación: Tacna, Perú
Mensajes: 5.552
Antigüedad: 12 años, 6 meses
Puntos: 977
Respuesta: Reporte con filtros

Si dices que necesitas que funcione con dos elementos <select>, ¿por qué no creas otro y en el evento onchange invocas a la misma función? Incluso podrías trabajar con más parámetros para que personalices el resultado por cada combo.

Saludos
__________________
«Juro por mi vida y mi amor por ella, que jamás viviré para el provecho de otro hombre, ni le pediré a otro hombre que viva para el mío».

Ayn Rand
  #3 (permalink)  
Antiguo 03/09/2014, 14:06
 
Fecha de Ingreso: abril-2014
Mensajes: 51
Antigüedad: 10 años
Puntos: 1
Respuesta: Reporte con filtros

Créeme que lo intente, soy nuevo en esto y vengo empezando, mi intento por hacer que tome dos "Select" fue fallido, cree dos select pero no se como hacer para diferenciar uno del otro si al comienzo de la función solo toma uno.


Intente lo siguiente, colocar dos parametros (cod,cod2)
y enviarlos al final pero nada :(
<script>
function mostrarInfo(cod,cod2){
if (window.XMLHttpRequest)
{// code for IE7+, Firefox, Chrome, Opera, Safari
xmlhttp=new XMLHttpRequest();
}
else
{// code for IE6, IE5
xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
}
xmlhttp.onreadystatechange=function()
{
if (xmlhttp.readyState==4 && xmlhttp.status==200)
{
document.getElementById("datos").innerHTML=xmlhttp .responseText;
}else{
document.getElementById("datos").innerHTML='Cargan do...';
}
}
xmlhttp.open("POST","conexion/cons_report.php",true);
xmlhttp.setRequestHeader("Content-type","application/x-www-form-urlencoded");
xmlhttp.send("cod_banda="+cod);
xmlhttp.send("cod_banda2="+cod2);

}

</script>
  #4 (permalink)  
Antiguo 03/09/2014, 15:35
Avatar de Alexis88
Philosopher
 
Fecha de Ingreso: noviembre-2011
Ubicación: Tacna, Perú
Mensajes: 5.552
Antigüedad: 12 años, 6 meses
Puntos: 977
Respuesta: Reporte con filtros

¿Y si a la función le pasas el nombre de la variable que quieres que vaya?

Código HTML:
Ver original
  1. <select name="tipo" onchange="mostrarInfo('cod_banda', this.value)">
  2.     <!-- Opciones -->
  3.  
  4. <select name="tipo2" onchange="mostrarInfo('cod_banda2', this.value)">
  5.     <!-- Opciones -->

Código Javascript:
Ver original
  1. function mostrarInfo(variable, cod){
  2.     if (window.XMLHttpRequest){// code for IE7+, Firefox, Chrome, Opera, Safari
  3.         xmlhttp = new XMLHttpRequest();
  4.     }
  5.     else{// code for IE6, IE5
  6.         xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
  7.     }
  8.  
  9.     xmlhttp.onreadystatechange = function(){
  10.         if (xmlhttp.readyState == 4 && xmlhttp.status == 200){
  11.             document.getElementById("datos").innerHTML = xmlhttp.responseText;
  12.         }else{
  13.             document.getElementById("datos").innerHTML = 'Cargando...';
  14.         }
  15.     };
  16.  
  17.     xmlhttp.open("POST", "conexion/cons_report.php", true);
  18.     xmlhttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
  19.     xmlhttp.send(variable + "=" + cod);
  20. }

Por eso te decía que podías pasar más parámetros para personalizar el resultado.

Saludos
__________________
«Juro por mi vida y mi amor por ella, que jamás viviré para el provecho de otro hombre, ni le pediré a otro hombre que viva para el mío».

Ayn Rand
  #5 (permalink)  
Antiguo 03/09/2014, 16:08
 
Fecha de Ingreso: abril-2014
Mensajes: 51
Antigüedad: 10 años
Puntos: 1
Respuesta: Reporte con filtros

Genial si funciona , pero solo acepta un dato a la vez, no pasa los dos al mismo tiempo, cuando selecciono algun dato de la segunda variable elimina el primero aun que este ya seleccionado, por que sera?
  #6 (permalink)  
Antiguo 03/09/2014, 21:19
Avatar de Alexis88
Philosopher
 
Fecha de Ingreso: noviembre-2011
Ubicación: Tacna, Perú
Mensajes: 5.552
Antigüedad: 12 años, 6 meses
Puntos: 977
Respuesta: Reporte con filtros

No pasa los dos datos al mismo tiempo porque solo envías uno. También debes de tener en cuenta que el resultado del cambio de opción en cualquiera de los combos, siempre se verá reflejado en el elemento de id 'datos'. Si buscas que los resultados se vean por separado, tendrás que asignarlos a elementos distintos, para lo cual podrías enviar el id del elemento en cuestión del mismo modo en que envías el nombre de la variable.

Saludos
__________________
«Juro por mi vida y mi amor por ella, que jamás viviré para el provecho de otro hombre, ni le pediré a otro hombre que viva para el mío».

Ayn Rand
  #7 (permalink)  
Antiguo 03/09/2014, 21:45
 
Fecha de Ingreso: abril-2014
Mensajes: 51
Antigüedad: 10 años
Puntos: 1
Respuesta: Reporte con filtros

Entiendo el problema pero no la solución, al dale el nombre de

<select name="tipo1" onchange="mostrarInfo('cod_banda1', this.value)">
<select name="tipo2" onchange="mostrarInfo('cod_banda2', this.value)">

no estoy diferenciando cada uno?
  #8 (permalink)  
Antiguo 03/09/2014, 21:49
Avatar de Alexis88
Philosopher
 
Fecha de Ingreso: noviembre-2011
Ubicación: Tacna, Perú
Mensajes: 5.552
Antigüedad: 12 años, 6 meses
Puntos: 977
Respuesta: Reporte con filtros

¿Te refieres a que no está llegando this.value? Si fuera así y solo por si a caso, asígnale un id distinto a cada combo.

Saludos
__________________
«Juro por mi vida y mi amor por ella, que jamás viviré para el provecho de otro hombre, ni le pediré a otro hombre que viva para el mío».

Ayn Rand
  #9 (permalink)  
Antiguo 03/09/2014, 21:57
 
Fecha de Ingreso: abril-2014
Mensajes: 51
Antigüedad: 10 años
Puntos: 1
Respuesta: Reporte con filtros

si llega el this.value, y si tienen "id" distintos cada select, lo que no entiendo es como
reflejar el elemento de id en 'datos' para que los tome por separado.
  #10 (permalink)  
Antiguo 03/09/2014, 22:02
Avatar de Alexis88
Philosopher
 
Fecha de Ingreso: noviembre-2011
Ubicación: Tacna, Perú
Mensajes: 5.552
Antigüedad: 12 años, 6 meses
Puntos: 977
Respuesta: Reporte con filtros

¿Quieres que se muestren los resultados del cambio de opción en ambos combos? Es decir, suponiendo que cambiando una opción en el combo uno se genera por respuesta 'foo' y al hacer el mismo proceso con el segundo combo, la respuesta es 'bar', ¿deseas que en el elemento de id 'datos' se muestren 'foo' y 'bar' o qué es lo que pretendes?
__________________
«Juro por mi vida y mi amor por ella, que jamás viviré para el provecho de otro hombre, ni le pediré a otro hombre que viva para el mío».

Ayn Rand
  #11 (permalink)  
Antiguo 03/09/2014, 22:12
 
Fecha de Ingreso: abril-2014
Mensajes: 51
Antigüedad: 10 años
Puntos: 1
Respuesta: Reporte con filtros

La idea es tener dos o mas combos,

en "combo 1" seleccionamos un alumno
en "combo 2" seleccionamos una materia (matemáticas,español,etc)

si solo selecciono un nombre en "combo 1" uno mostrara las materias de ese alumno

el caso de seleccionar los dos solo mostrara el alumno y la materia selecciona, asi solo quedaría un registro, filtro los datos

caso contrario que solo selecciono "el combo 2" mostraría la materia seleccionada con todos los alumnos
  #12 (permalink)  
Antiguo 03/09/2014, 22:16
Avatar de Alexis88
Philosopher
 
Fecha de Ingreso: noviembre-2011
Ubicación: Tacna, Perú
Mensajes: 5.552
Antigüedad: 12 años, 6 meses
Puntos: 977
Respuesta: Reporte con filtros

Para añadir información, te va a tocar concatenarla con lo que ya exista.

Código Javascript:
Ver original
  1. document.getElementById("datos").innerHTML += xmlhttp.responseText;

Ese símbolo + antes del signo de igualdad actúa como elemento de concatenación, uniendo así el contenido actual con el nuevo.

Saludos
__________________
«Juro por mi vida y mi amor por ella, que jamás viviré para el provecho de otro hombre, ni le pediré a otro hombre que viva para el mío».

Ayn Rand
  #13 (permalink)  
Antiguo 03/09/2014, 22:31
 
Fecha de Ingreso: abril-2014
Mensajes: 51
Antigüedad: 10 años
Puntos: 1
Respuesta: Reporte con filtros

Realice el cambio pero al parecer queda igual, no sera mejor enviar todos los select por medio de un form, que la función se efectué por medio de un submit?
  #14 (permalink)  
Antiguo 03/09/2014, 22:43
Avatar de Alexis88
Philosopher
 
Fecha de Ingreso: noviembre-2011
Ubicación: Tacna, Perú
Mensajes: 5.552
Antigüedad: 12 años, 6 meses
Puntos: 977
Respuesta: Reporte con filtros

Es otra opción, aunque me parece raro que la concatenación no te esté funcionando, a menos que la estés realizando de la manera incorrecta. Muéstranos el código actualizado para ver si estás cometiendo alguna falla.
__________________
«Juro por mi vida y mi amor por ella, que jamás viviré para el provecho de otro hombre, ni le pediré a otro hombre que viva para el mío».

Ayn Rand
  #15 (permalink)  
Antiguo 03/09/2014, 22:51
 
Fecha de Ingreso: abril-2014
Mensajes: 51
Antigüedad: 10 años
Puntos: 1
Respuesta: Reporte con filtros

Bueno el codigo es este

<script>

function mostrarInfo(variable, cod){
if (window.XMLHttpRequest)
{// code for IE7+, Firefox, Chrome, Opera, Safari
xmlhttp=new XMLHttpRequest();
}
else
{// code for IE6, IE5
xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
}
xmlhttp.onreadystatechange=function()
{
if (xmlhttp.readyState==4 && xmlhttp.status==200)
{
document.getElementById("datos").innerHTML+=xmlhtt p.responseText;
}else{
document.getElementById("datos").innerHTML='Cargan do...';
}
}
xmlhttp.open("POST","conexion/cons_report2.php",true);
xmlhttp.setRequestHeader("Content-type","application/x-www-form-urlencoded");
xmlhttp.send(variable + "=" + cod);
}

</script>

Y los select son los siguientes

<SELECT name="sol" id="sol" onchange="mostrarInfo('cod_banda1',this.value)">
<OPTION value="edy argueta">Edy Argueta</OPTION>
<OPTION value="Oscar Bueso">Oscar Bueso</OPTION>
</SELECT>


<SELECT name="tipo" id="materia" onchange="mostrarInfo('cod_banda2',this.value,)">
<OPTION value="matematicas">Matematicas</OPTION>
<OPTION value="espanol">Español</OPTION>
<OPTION value="ciencias">Ciencias</OPTION>
</SELECT>


y el cons_report2.php solo tengo para comprobar que las variables lleguen

$dato2=$_POST['cod_banda2'];
$dato1=$_POST['cod_banda1'];

echo $dato2;
echo $dato1;
  #16 (permalink)  
Antiguo 03/09/2014, 23:13
Avatar de Alexis88
Philosopher
 
Fecha de Ingreso: noviembre-2011
Ubicación: Tacna, Perú
Mensajes: 5.552
Antigüedad: 12 años, 6 meses
Puntos: 977
Respuesta: Reporte con filtros

Para que no tengas la necesidad de enviar el dato ya sea del combo uno o dos luego de haberlo hecho previamente, podrías almacenar los datos en variables de sesión y así podrías realizar acciones con los datos almacenados.

Código PHP:
Ver original
  1.  
  2. if (isset($_POST['cod_banda1'])) $_SESSION['cod_banda1'] = $_POST['cod_banda1'];
  3. if (isset($_POST['cod_banda2'])) $_SESSION['cod_banda2'] = $_POST['cod_banda2'];

Entonces, suponiendo que inicialmente solo enviaste el dato del combo uno o dos, este quedará almacenado en la variable de sesión, luego, al enviar el dato del otro combo (sea el uno o dos), tendrás a ambos datos y así podrás realizar la búsqueda en la BD.

Otra forma sería tomando los datos de ambos combos en la función, aunque para no enviar un dato nulo, tendrías que validar que este exista.

Saludos
__________________
«Juro por mi vida y mi amor por ella, que jamás viviré para el provecho de otro hombre, ni le pediré a otro hombre que viva para el mío».

Ayn Rand
  #17 (permalink)  
Antiguo 04/09/2014, 10:13
 
Fecha de Ingreso: abril-2014
Mensajes: 51
Antigüedad: 10 años
Puntos: 1
Respuesta: Reporte con filtros

Antes que todo Alexis88 gracias por tu ayuda, fuiste de gran ayuda para poder llegar a concluir, al fin pude hacer tal como quería el reporte y te dejo la solución.

ARCHIVO reporte.PHP, coloco solo el form para hacerlo mas corto

En head declaro el archivo java
<script type="text/javascript" src="js/repor_java.js"></script>

Luego el Form
<form name="datos">

<SELECT name="nombre" id="nombre" onchange="enviar()">
<OPTION value="edy argueta">Edy Argueta</OPTION>
<OPTION value="Oscar Bueso">Oscar Bueso</OPTION>
<OPTION selected value="1">Todos</OPTION>
</SELECT>


<SELECT name="materia" id="materia" onchange="enviar()">
<OPTION value="mate">Matemáticas</OPTION>
<OPTION value="espanol">Español</OPTION>
<OPTION value="ingles">Ingles</OPTION>
<OPTION selected value="1">Todos</OPTION>
</SELECT>

</form>

ARCHIVO repor_java.js
Cambie por completo la función a la siguiente:

function creaObjetoAjax () { //Mayoría de navegadores
var obj;
if (window.XMLHttpRequest) {
obj=new XMLHttpRequest();
}
else { //para IE 5 y IE 6
obj=new ActiveXObject(Microsoft.XMLHTTP);
}
return obj;
}
function enviar() {
//Recoger datos del formulario:
nombre=document.datos.nombre.value;
materia=document.datos.materia.value;
//datos para el envio por POST:
misdatos="nombre="+nombre+"&materia="+materia;
//Objeto XMLHttpRequest creado por la función.
objetoAjax=creaObjetoAjax();
//Preparar el envio con Open
objetoAjax.open("POST","conexion/cons_report.php",true);
//Enviar cabeceras para que acepte POST:
objetoAjax.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
objetoAjax.setRequestHeader("Content-length", misdatos.length);
objetoAjax.setRequestHeader("Connection", "close");
objetoAjax.onreadystatechange=recogeDatos;
objetoAjax.send(misdatos);
}
function recogeDatos() {
if (objetoAjax.readyState==4 && objetoAjax.status==200) {
miTexto=objetoAjax.responseText;
document.getElementById("comp").innerHTML=miTexto;
}
}

Por ultimo el PHP que carga los datos "cons_report.php" son condiciones como la siguiente:

if(($nombre==1)&&($materia==1)){
$res=mysql_query("select * from solicitud",$con);
}else{
if ($materia==1){
$res=mysql_query("select * from solicitud where nombre='$nombre'",$con);
}}}}
// El valor 1 es equivalente a mostrar todo en la condición

Y asi hasta cumplir con todas las posibilidades de selección..

Etiquetas: ajax
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 12:30.