Foros del Web » Programando para Internet » PHP »

NOVATO: Problemas filtrando una tabla con dos variables GET

Estas en el tema de NOVATO: Problemas filtrando una tabla con dos variables GET en el foro de PHP en Foros del Web. Muy buenos días gente de Foros del Web soy nuevo aquí intentaré ir al grano (soy malo resumiendo jaja), tengo este código (es algo extenso ...
  #1 (permalink)  
Antiguo 09/11/2015, 08:41
 
Fecha de Ingreso: agosto-2015
Ubicación: Colombilandia
Mensajes: 10
Antigüedad: 8 años, 8 meses
Puntos: 0
Pregunta NOVATO: Problemas filtrando una tabla con dos variables GET

Muy buenos días gente de Foros del Web soy nuevo aquí intentaré ir al grano (soy malo resumiendo jaja), tengo este código (es algo extenso pero simple):

Código PHP:
<?php 

echo '<form action="" method="get" name="ver_prog">
  <div class="form-group">
    <input autofocus name="fecha" type="date" class="form-control" id="exampleInputEmail2" >
  </div>
  <div>
      <input type="submit" value="filtrar">
  </div>    
</form>
<br/>
<div class="row">'
//hasta aquí envío $fecha a esta misma página

if (!empty($_GET['fecha'])) {
    
$fecha $_GET['fecha'];
}else{
    
$fecha date("d-m-Y");
//si no he recibido $fecha que me coloque la fecha de hoy

function mostrarselect2($fecha,) //la función que filtra la tabla recibe $fecha
  
{
    echo 
"
    <div class='table-responsive'>
    <table class='table table-bordered table-condensed' border='1px'>
        <tr>
            <!--<th>ID</th>
            <th>Fecha orig</th>
            <th>Reprog?</th>
            <th>Fecha reprog</th>-->
            <th>#</th>
            <th><a href='?set=cc'>CC</a></th>
            <th><a href='?set=cv'>CV</a></th>
            <th><a href='?set=cl'>Cliente</a></th>
            <th><a href='?set=pd'>Pedido</a></th>
            <th><a href='?set=idp'>ID PROD</a></th>
            <th>Observaciones</th>
            <th><a href='?set=nu'>Copias</a></th>
            <th><a href='?set=fab'>Fabricandose?</a></th>
            <th><a href='?set=fin'>Finalizado?</a></th>
            <th><a href='?set=dfin'>Fecha finalizado</a></th>
            <th><img src='img/edit.png'></th>
            <th><img src='img/delete.png'></th>
        </tr><tr><td colspan='18'></td></tr>"
//en cada table head creo un get para luego organizar por columna

    
include("_conexion.php");
    
$query "SELECT * FROM tab_produccion WHERE date_prod_final = '".$fecha."'";


    if (isset(
$_GET['set']) && !empty($_GET['set']))
    {
        if (
$_GET['set'] == 'cc')
        {
            
$query .= " ORDER BY id_cliente";
        }
        elseif (
$_GET['set'] == 'cv')
        {
            
$query .= " ORDER BY id_vendedor";
        }
        elseif (
$_GET['set'] == 'cl')
        {
            
$query .= " ORDER BY nom_cliente";
        }
        elseif(
$_GET['set'] == 'pd')
        {
            
$query .= " ORDER BY id_pedido";
        }
        elseif(
$_GET['set'] == 'idp')
        {
            
$query .= " ORDER BY cod_prod";
        }
        elseif(
$_GET['set'] == 'nu')
        {
            
$query .= " ORDER BY copias DESC";
        }
        elseif(
$_GET['set'] == 'fab')
        {
            
$query .= " ORDER BY bol_enviada";
        }
        elseif(
$_GET['set'] == 'fin')
        {
            
$query .= " ORDER BY bol_realizada";
        }
        elseif(
$_GET['set'] == 'dfin')
        {
            
$query .= " ORDER BY date_realizada";
        } 
//aqui estan las opciones del GET para poder filtrar cada columna de acuerdo a la opción
    
}
    
//------>>>> Al terminar la inclusion de el get para el set se procede a consultar
    
$produccion pg_query($conexion,$query) or die('La consulta falló: '.pg_last_error());

    while (
$produccion_f pg_fetch_array($produccion)) {
Disculpen subir este código tan extenso pero como dije es simple:

EXPLICACIÓN DEL CÓDIGO:
1. Por GET le digo a la tabla que me filtre X fecha de una consulta SQL.
Luego esta variable de fecha me activa o modifica la funcion() php que muestra la tabla filtrada por fecha.
2. Por otro GET directamente en cada <th> (table head) intento organizar otra clausula por SQL GROUP BY para short a esa tabla que vemos por php.
EL PROBLEMA:
Puedo filtrar o puedo hacer short by, pero no las dos al mismo tiempo.
EL RESULTADO DE ESE PROBLEMA:
Cuando mando el segundo GET que me short by alguna de las columnas, se pierde la primera variable que es la de la fecha lo cual no quiero que suceda.
QUE SOLUCIONES HE INTENTADO:
Intente incluso al final guardar $fecha en una variable $_SESSION['fecha'], pero no me la almacena, simplemente al hacer cualquier GET para el short by se pierde automaticamente la variable $fecha o $_SESSION...

Agradezco sus ayudas, a proposito he mirado otros temas aqui en Foros del Web, pero ninguno ha dado un ejemplo lo mas cercano posible a mi problema.
  #2 (permalink)  
Antiguo 09/11/2015, 10:49
 
Fecha de Ingreso: agosto-2015
Ubicación: Colombilandia
Mensajes: 10
Antigüedad: 8 años, 8 meses
Puntos: 0
Respuesta: NOVATO: Problemas filtrando una tabla con dos variables GET

>Por fa pregunten si no entienden algo, se que el código es muy extenso para leerlo todo.. pero en serio deseo resolver mi problema que ya he intentado de vrias formas de acuerdo a mi conocimiento que apenas estoy formando en php.
  #3 (permalink)  
Antiguo 09/11/2015, 12:32
Avatar de xfxstudios  
Fecha de Ingreso: junio-2015
Ubicación: Valencia - Venezuela
Mensajes: 2.448
Antigüedad: 8 años, 10 meses
Puntos: 263
Respuesta: NOVATO: Problemas filtrando una tabla con dos variables GET

bueno podria pasar rato preguntando que se suponbe que es todo eso,

primero donde esta el select???

Segundo: que es esto: a href='?set=fin (como juego esto en codigo),

esto otro de aqui o es chicha o es limonada, es decir si la fecha biene vacia que le asigne la fecha que viene vacia o en tal caso que le asigne la fecha actual????

Código PHP:
Ver original
  1. if (!empty($_GET['fecha'])) {
  2.     $fecha = $_GET['fecha'];
  3. }else{
  4.     $fecha = date("d-m-Y");
  5. }

en todo caso deberia de ser asi:

Código PHP:
Ver original
  1. if (!empty($_GET['fecha'])) {
  2.     $fecha =date("d-m-Y");
  3. }

es decir no entendi nada amiguito, lo podrias hacer con ajax al crear un select y enviar la consulta a un php aparte, de esa manera este te regresa la respuesta y la muestra sin recargar la pagina y se ve mucho mejor, mas o menos asi:

El script que va a procesar el formulario sin recargar la pagina:
Código Javascript:
Ver original
  1. function objetoAjax(){
  2.     var xmlhttp=false;
  3.     try {
  4.         xmlhttp = new ActiveXObject("Msxml2.XMLHTTP");
  5.     } catch (e) {
  6.         try {
  7.            xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
  8.         } catch (E) {
  9.             xmlhttp = false;
  10.         }
  11.     }
  12.  
  13.     if (!xmlhttp && typeof XMLHttpRequest!='undefined') {
  14.         xmlhttp = new XMLHttpRequest();
  15.     }
  16.     return xmlhttp;
  17. }
  18.  
  19. functionenviar(){
  20.     //donde se mostrará el resultado
  21.     divResultado = document.getElementById('resultado');
  22.  
  23.     //tomamos el valor de la lista desplegable
  24.     fecha=document.ver_prog.fecha.value;
  25.     filtro=document.ver_prog.filtro.value;
  26.  
  27.     //instanciamos el objetoAjax
  28.     ajax=objetoAjax();
  29.  
  30.     //usamos el medoto POST
  31.     //archivo que realizará la operacion
  32.    
  33.     ajax.open("POST", "busca.php",true);
  34.     ajax.onreadystatechange=function() {
  35.         if (ajax.readyState==4) {
  36.             //mostrar resultados en esta capa
  37.             divResultado.innerHTML = ajax.responseText
  38.         }
  39.     }
  40.     ajax.setRequestHeader("Content-Type","application/x-www-form-urlencoded");
  41.     //enviando los valores
  42.     ajax.send("fecha="+fecha+"&filtro="+filtro)
  43. }

Código HTML:
Ver original
  1. <form action="" method="post" name="ver_prog"  onSubmit="enviar()">
  2.   <div class="form-group">
  3. <label>Fecha</label>    
  4. <input autofocus name="fecha" type="date" class="form-control" id="exampleInputEmail2" >
  5. <br>
  6. <label>Filtro</label>
  7. <select name="filtro">
  8. <option selected disabled>Seleccione</option>
  9. <option value="cc">CC</option>
  10. <option value="cv">CV</option>
  11. <option value="cl">Cliente</option>
  12. <option value="pd">Pedido</option>
  13. <option value="idp">ID Prod</option>
  14. <option disabled>Observaciones</option>
  15. <option value="nu">Copias</option>
  16. <option value="fab">Fabricandose</option>
  17. <option value="fin">Finalizado</option>
  18.   </div>
  19.   <div>
  20.       <input type="submit" value="filtrar">
  21.   </div>    
  22. </form>
  23.  
  24. <!--AQUI SE VA A MOSTRAR EL RESULTADO DE LA CONSULTA-->
  25. <div id="resultado"></div>

el php:

Código PHP:
Ver original
  1. //usando mysqli
  2.  
  3. $fecha = $_post['fecha'];
  4. $filtro = $_post['filtro'];
  5.  
  6. //no le veo mucho sentido a esta consulta pero te la coloco igual
  7. $busca = $db->query("select * from tab_produccion where date_prod_final = '$fecha' order by '$filtro'");
  8.  
  9. while($row = $busca->fetch_array()){
  10.  
  11. echo "AQUI VA LA ESTRUCTURA QUE VAS A MOSTRAR EN EL DIV DE RESULTADOS"
  12.  
  13. } else{
  14. echo "No se encontraron coincidencias en esa fecha";
  15. }

funciona porque la uso en mis aplicacion vara varios modulos, asi que adaptala a tus necesitas y es mas sencillo asi, espero te sirva
__________________
[email protected]
HITCEL
  #4 (permalink)  
Antiguo 09/11/2015, 12:34
Avatar de xfxstudios  
Fecha de Ingreso: junio-2015
Ubicación: Valencia - Venezuela
Mensajes: 2.448
Antigüedad: 8 años, 10 meses
Puntos: 263
Respuesta: NOVATO: Problemas filtrando una tabla con dos variables GET

por cierto hay unos cuantos
Cita:
viene
mal escritos por alli jajaja saludos
__________________
[email protected]
HITCEL
  #5 (permalink)  
Antiguo 09/11/2015, 12:46
 
Fecha de Ingreso: agosto-2015
Ubicación: Colombilandia
Mensajes: 10
Antigüedad: 8 años, 8 meses
Puntos: 0
Respuesta: NOVATO: Problemas filtrando una tabla con dos variables GET

Primero: El select esta dentro de la función() luego de los encabezados de la tabla...
Segundo: El a href='?set=fin es para que luego en el if (isset($_GET['set']) && !empty($_GET['set'])) me le agregue el GROUP BY de acuerdo al que le de clic.
Tercero: Esto:
if (!empty($_GET['fecha'])) {
$fecha = $_GET['fecha'];
}else{
$fecha = date("d-m-Y");
}
Es para que al recibir el GET de la fecha me filtre la tabla por fecha pero si GET fecha esta vacio (osea cuando abres la página por primera vez) me muestre la tabla con los resultados de hoy sentencia date() por eso lo necesito así ese if en especial.

Bueno luego de explicar todo, la verdad no soy el experto en ajax y javascript, de hecho no se nada de javascript :( y para ajax debo conocer javascript. Por eso intento que las dos sentencias las pueda aplicar con php de alguna forma que no he logrado. :(
Apenas tengo un conocimiento básico en DHTML.
  #6 (permalink)  
Antiguo 09/11/2015, 12:51
Avatar de xfxstudios  
Fecha de Ingreso: junio-2015
Ubicación: Valencia - Venezuela
Mensajes: 2.448
Antigüedad: 8 años, 10 meses
Puntos: 263
Respuesta: NOVATO: Problemas filtrando una tabla con dos variables GET

bueno ve si te sirve el codigo que te coloque que haria que la consulta se vea mas limpia
__________________
[email protected]
HITCEL
  #7 (permalink)  
Antiguo 10/11/2015, 00:19
Avatar de mortiprogramador
Colaborador
 
Fecha de Ingreso: septiembre-2009
Ubicación: mortuoria
Mensajes: 3.805
Antigüedad: 14 años, 7 meses
Puntos: 214
Respuesta: NOVATO: Problemas filtrando una tabla con dos variables GET

Saludo

Pues revisando el código, en la definición de la función, hay una , de más.

Por otra parte, al tener la condición de la fecha, sí no se ha digitado fecha,
se tendrá la fecha actual, eso probablemente no de registros sí
el día actual no tiene info cargada en la tabla aún.

Podrías cambiar ese funcionamiento por un LIMIT en la consulta,
e implementar paginación para pasar a los demás registros.
(Aquí en los foros encontrarás varios ejemplos)

Pero volviendo al tema, intenta enviar en cada href que usas el parámetro
de la fecha.

Ej
Código PHP:
Ver original
  1. <th><a href='?set=cc&fecha=".$fecha."'>CC</a></th>

Con eso, ordenaría y mantendría el filtro de fechas.
__________________
"Si consigues ser algo más que un hombre, si te entregas a un ideal, si nadie puede detenerte, te conviertes en algo muy diferente."
Visita piggypon.com

Etiquetas: filtrar, tablas, variables
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 17:56.