Foros del Web » Programando para Internet » PHP »

Filtrar datos de resultados

Estas en el tema de Filtrar datos de resultados en el foro de PHP en Foros del Web. Hola Gente, los molesto, y seguire insistiendo hasta que puedan ayudarme o darme una manito Bueno, mi problema es el siguiente. Tengo un Formulario de ...
  #1 (permalink)  
Antiguo 27/09/2009, 11:22
Avatar de loncho_rojas
Colaborador
 
Fecha de Ingreso: octubre-2008
Ubicación: En el mejor lugar del mundo
Mensajes: 2.704
Antigüedad: 15 años, 6 meses
Puntos: 175
Filtrar datos de resultados

Hola Gente, los molesto, y seguire insistiendo hasta que puedan ayudarme o darme una manito

Bueno, mi problema es el siguiente.

Tengo un Formulario de busqueda, y tengo mi script de resultados.

Necesito filtrar los datos que el usuario introduce y limitarlos, pero de una manera poco convencional.

Siendo mas explicito, tengo 3 campos de ejemplo, dentro del form, 1 de Nombre, 1 de Ciudad y 1 de Edad y necesito combinar ciertos campos para hacer una especia de busqueda avanzada.

Es decir, que el usuario pueda buscar solo por 2 parámetros ya establecidos
Ej: Nombre + Ciudad o Nombre + Edad

Me gustaria hacer algo un tanto complejo, pero necesito un poco de luz (mas que luz, un reflector de estadio)

La cosa es que mediante un Javascript logre que si el usuario ha seleccionado la opcion 1 a traves de un form.radio solo habilite el campo de NOMBRE y el campo de CIUDAD, y ha seleccionado la opcion 2 habilite solo el campo de NOMBRE y el campo de EDAD.. esto ya lo logre.. ahora vienen los problemas.

Problema 1
Me gustaria que al enviar el formulario, solo envie los datos de cuyos campos fueron habilitados, y el que quedo disabled o inabilitado, no sea tenido en cuenta. Si alguien me puede ayudar con un javascript, o hay una manera PHP de hacer esto.


Problema 2

Dependiendo de que datos fueron enviados,( en el filtro PHP-mysql que recibe dichos datos) pueda ejecutar una sentencia SQL A o una sentencia SQL B..

O sea, si son enviados los datos de Nombre y Ciudad, y no de EDAD, que se cree una sentencia SQL para seleccionar datos filtrados... si solo se recibieron datos de NOmbre y Edad, y no de ciudad, pueda filtrarlos con otra sentencia muy distinta.


Problema 3

Si llegare a filtrar efectivamente esas sentencias SQL que remarqué, necesitaría mostrar datos de resultados dependiendo de que sentencias fueron ejecutadas. y eso no se me ocurre como.. hice algo en el script de php, pero es solo para una sentencia. espero se den cuenta en el script remarque esa parte.


OK, agradeceria aportes graficados de posibles ideas, y espero que tambien sirva para alguien más.

CONTINUA----
__________________
Ayudo con lo que puedo en el foro, y solo en el foro.. NO MENSAJES PRIVADOS.. NO EMAILS NI SKYPE u OTROS.

Antes de hacer un TOPICO piensa si puedes hallarlo en Google o en el Buscador del Foro...
  #2 (permalink)  
Antiguo 27/09/2009, 11:23
Avatar de loncho_rojas
Colaborador
 
Fecha de Ingreso: octubre-2008
Ubicación: En el mejor lugar del mundo
Mensajes: 2.704
Antigüedad: 15 años, 6 meses
Puntos: 175
Respuesta: Filtrar datos de resultados

A continuacion muestro los codigos que ya tengo, y que pueden usarlo de referecia para los aportes... favor, es muy importante.


Formulario de busqueda.html:

Código HTML:
<html>
	<head>

		<title>Buscar Avanzado</title>

		<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">

	</head>
     <script type="text/javascript">
		function bloqueados(){
				
				document.form1.nombre.disabled = true
				document.form1.ciudad.disabled = true
				document.form1.edad.disabled = true
				}
		
		function bloquea() {
		
			if (document.form1.radio[0].checked) {
				document.form1.nombre.disabled = false
				document.form1.ciudad.disabled = false
				document.form1.edad.disabled = true
		document.form1.edad[document.form1.edad.selectedIndex].value=""
				
			}

			if (document.form1.radio[1].checked) {
			document.form1.nombre.disabled = false
			document.form1.edad.disabled = false
			document.form1.ciudad.disabled = true
	document.form1.ciudad[document.form1.ciudad.selectedIndex].value=""
			}
}
</script>
<!--Cargo la funcion que bloquea todos los campos-->
<body onLoad="bloqueados();">
<p>Seleccione una combinaci&oacute;n.
<p>Obs: Solo puede elegir una de ellas para filtrar los datos
    
   
    
<form name="form1" method="post" action="mostrarResultados.php">
  <table width="558" border="0" align="center" cellpadding="0" cellspacing="0">
          <tr>
            <td>Combinar solo</td>
            <td>&nbsp;</td>
          <!--llamo la funcion que desbloquea los campos de nombre y ciudad-->
            <td><input name="radio" type="radio" value="" onClick="bloquea()">
            nombre + ciudad            </td>
            <td>&nbsp;</td>
          <!--llamo la funcion que desbloquea los campos de nombre y edad-->
            <td><input name="radio" type="radio" value="" onClick="bloquea()">
              Nombre +Edad</td>
            <td>&nbsp;</td>
          </tr>
          <tr>
            <td>&nbsp;</td>
            <td>&nbsp;</td>
            <td>&nbsp;</td>
            <td>&nbsp;</td>
            <td>&nbsp;</td>
            <td>&nbsp;</td>
          </tr>
          <tr>
            <td bgcolor="#CCCCCC">&nbsp;</td>
            <td bgcolor="#CCCCCC">&nbsp;</td>
            <td bgcolor="#CCCCCC">&nbsp;</td>
            <td bgcolor="#CCCCCC">&nbsp;</td>
            <td bgcolor="#CCCCCC">&nbsp;</td>
            <td>&nbsp;</td>
          </tr>
          <tr>
            <td width="144" bgcolor="#CCCCCC"><span class="style10">Nombre:</span>
            <input name="nombre" type="text" id="nombre"></td>
            <td width="21" bgcolor="#CCCCCC">&nbsp;</td>
            <td width="187" bgcolor="#CCCCCC">+ Ciudad:
              <select name="ciudad" id="ciudad">
                <option value="0">-- Seleccione un Ciudad --</option>
                <option value="1">Ciudad 1</option>
                <option value="2">Ciudad 2</option>
              </select></td>
            <td width="37" bgcolor="#CCCCCC">&nbsp;</td>
            <td width="158" bgcolor="#CCCCCC">+Edad:
              <select name="edad" id="edad">
                <option value="0">-- Seleccione edad --</option>
                <option value="1">Edad 17</option>
                <option value="2">Edad 18</option>
                <option value="3">Edad 19</option>
                <option value="4">Edad 20</option>
              </select></td>
            <td width="137">&nbsp;</td>
          </tr>
              
          <tr>
            <td bgcolor="#CCCCCC">&nbsp;</td>
            <td bgcolor="#CCCCCC">&nbsp;</td>
            <td bgcolor="#CCCCCC">&nbsp;</td>
            <td bgcolor="#CCCCCC">&nbsp;</td>
            <td bgcolor="#CCCCCC">&nbsp;</td>
            <td>&nbsp;</td>
          </tr>
          <tr>
            <td width="144" bgcolor="#CCCCCC">&nbsp;</td>
            <td width="21" bgcolor="#CCCCCC">&nbsp;</td>
            <td width="187" bgcolor="#CCCCCC">&nbsp;</td>
            <td width="37" bgcolor="#CCCCCC">&nbsp;</td>
            <td width="158" bgcolor="#CCCCCC"><input name="Submit" type="submit" value="encontrar"></td>
            <td width="137">&nbsp;</td>
          </tr>
  </table>
</form>
      
      </body>
</html> 


mostrarResultados.php:

Código PHP:
<?
include("conn.php");

//recibo los datos
$nombre=addslashes($_POST["nombre"]);
$ciudad=addslashes($_POST["ciudad"]);
$edad=addslashes($_POST["edad"]);


//asigno otra variable a los datos
$buscar1=$nombre;
$buscar2=$ciudad;
$buscar3=$edad;

$error1="Son necesarios 2 parámetros de busqueda. \n Favor inserte otro parametro de busqueda \n
 
<a href='javascript:history.go(-1)'>Atrás</a>"
;

                
                 
$text="Elementos Buscados : ";
                 
                 if(
$buscar1!=""&&$buscar2!="")//si los A y B no estan vacios
                     
{
                         
//genero el filtro
                         
$sqlA=mysql_query("SELECT detalle.* FROM alumnos 
                               INNER JOIN ciudades 
                                ON ciudades.CId = alumnos.AlId 
                                WHERE alumnos.nombreLIKE '$buscar1%' 
                                 OR alumnos.ciudad LIKE '$buscar2%'
                                ORDER BY AlID "
$connection)
                                or die(
mysql_error());      
                         
                         }
                         
                else

                     {
                     
//de lo contrario muestro un mensaje de error definido mas arriba
                         
echo $error1;
                         }
                    
$num=mysql_num_rows($sqlA);
                    
                    
?>

<html>
    <head>

        <title>Selector avanzado</title>

        <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">

    </head>

    <body>
    <table width="775" border="0" align="center" cellpadding="0" cellspacing="0" bgcolor="#FFFFFF">
  
          <tr>
            <td><hr size="1" noshade></td>
          </tr>
        
          <tr>
            <td>
                  <table width="750" border="0" align="center" cellpadding="2" cellspacing="2">
                    <tr>
                          <td align="left">
                        <?
                        
echo "<div align=right>$text</div>";
                        echo 
"<table width=700 border=0 cellpadding=0 cellspacing=0 align=center>\n
                        <tr>\n
                            <td> Total coincidencias: $num &nbsp; \n
                            <td> &nbsp;\n
    
                            </tr>\n
                            <tr> \n"
;
                            
//aca puedo mostrar sin drama el resultado del al sentencia
                            //SQL A, pero si tuviera otra sentencia sqlB, como la muestro?
                                
$counter=0;
                                    while(
$row=mysql_fetch_array($sqlA))
                                    {
                                        
$sel=utf8_decode($row['AlId']);
                                        
$name=utf8_decode($row['nombre']);
                                        
$city=utf8_decode($row['ciudad']);
                                        
$year=utf8_decode($row['edad']);
                                        
$ap=utf8_decode($row['dpto'])
    
                                    }
    
    
    
                                    if(
$counter>=0)
                                     {
                                        echo 
"<td valign=top>\n
                                        <table width=340 border=0 align=left class=allborder> \n
                                            <tr> \n
                                                <td width=120> Nombre:  </td>$name\n
                                            </tr>\n
                                            
                                            <tr> \n
                                                <td> Ciudad:  </td> $city\n
                                            </tr>\n
                                            
                                            <tr> \n
                                                <td> Apartamento:  </td> $year\n
                                            </tr>\n
    
                                            <tr> \n
                                                <td> Edad:  </td> $ap\n
                                            </tr>\n
        
                            </tr>\n
                            
                            <tr> \n
                                <td colspan=2 class=topBorder> <a href=viewdetail.php?sn=$sel>Mas Detalles</a>\n
                            </tr>\n
                            </table>\n
                            </td>\n
                                 "
;
                                 
$counter++;
                                 } 
                                 
                                 if(
$counter==2
                                {
                                 echo 
"</tr>\n<tr>\n<td colspn=2>&nbsp; \n</tr>\n<tr>\n";
                                
$counter=0;
                                 }

                        echo 
"</table>\n";
                        
?>
                        </td>
        </tr>
    </table></td>
  </tr>
</table>
</body>
</html>
Se agradece todo aporte, y como dije. y espero se haya entendido..

si alguien conoce otra forma mas sencilla de hacerlo, agradeceria ese aporte tambien, espero ponerlos a pensar, al igual que lo estoy yo.. luego comparto como aporte si llego a la solucion..
__________________
Ayudo con lo que puedo en el foro, y solo en el foro.. NO MENSAJES PRIVADOS.. NO EMAILS NI SKYPE u OTROS.

Antes de hacer un TOPICO piensa si puedes hallarlo en Google o en el Buscador del Foro...
  #3 (permalink)  
Antiguo 28/09/2009, 16:54
Avatar de zeuslife  
Fecha de Ingreso: enero-2008
Ubicación: Madrid
Mensajes: 533
Antigüedad: 16 años, 3 meses
Puntos: 11
A ver, me parece que no te entiendo bien...quieres, que, según sea una combinación u otra, haga una búsqueda u otra no? Pues usa ifs amigo mio!!

Imagino que sería algo así:

[php]

$nombre = $_GET['nombre'];
$edad = $_GET['nombre'];
$ciudad = $_GET['nombre'];

if ($nombre != "") {
if ($edad != "") {

//UNA SENTENCIA MYSQL CON JOIN %$VAR% (PARA BUSCAR)
header("Location: showresults.php?table=1");
}
elseif($ciudad != "") {

//oTRA SENTENCIA DISTINTA

header("Location: showresults.php?table=2");
}

Y lo otro, sería tan simple como, en la pag de meustra de los resultados, tener una variable recojida por el get que se mando al terminar cada sentencia, y mostrar una tabla u otra, según el caso

Un Saludo!

Última edición por GatorV; 29/09/2009 a las 08:58
  #4 (permalink)  
Antiguo 30/09/2009, 11:34
Avatar de loncho_rojas
Colaborador
 
Fecha de Ingreso: octubre-2008
Ubicación: En el mejor lugar del mundo
Mensajes: 2.704
Antigüedad: 15 años, 6 meses
Puntos: 175
Respuesta: Filtrar datos de resultados

Gracias ZEUS... bueno, creo que esa parte puedo resolverla de manera mas sencilla, y que tal con el problema Nº1 que plantee? Alguna solucion? pues creo que en realidad es el mayor de mis inconvenientes.

Vuelvo a reiterarlo. Ya consegui mediante un Javascript bloquear uno u otro campo mediante un radio, pero pasa que al bloquear el campo, si anteriormente ya elegi algo o escribi algo, me lo envia tambien, aun estando desabilitado.

Siendo mas especifico, cuando selecciono una opcion A, solo habilita el campo 1 y el campo 2... si selecciono otra opcion B, solo habilita el campo 1 y el campo 3... cosa que ya consegui sin dramas... pero como hago para que cuando selecciono la opcion A o la B, me envie solo esos dos campos habilitados, y me ignore el campo deshabilitado, hay alguna funcion tipo javascript mas compleja (pues no lo manejo muy fino al JavaScript), o un php que ayude a realizar algo similar..

deje mis codigos para que lo vean, al menos si me ayudan con el problema Nº 1 ya es mas que suficiente..

Agradecido con ustedes
__________________
Ayudo con lo que puedo en el foro, y solo en el foro.. NO MENSAJES PRIVADOS.. NO EMAILS NI SKYPE u OTROS.

Antes de hacer un TOPICO piensa si puedes hallarlo en Google o en el Buscador del Foro...
  #5 (permalink)  
Antiguo 30/09/2009, 13:20
Avatar de zeuslife  
Fecha de Ingreso: enero-2008
Ubicación: Madrid
Mensajes: 533
Antigüedad: 16 años, 3 meses
Puntos: 11
Respuesta: Filtrar datos de resultados

Pensaré a fondo lo de el nº1... pero, olle, para lo otro...¿Por qué no, en vez de ratios, usas una desplegable en plan (Nombre y Edad (1) o Nombre y Ciudad (2)?
__________________
Neversyn Software e Ingeniería
  #6 (permalink)  
Antiguo 30/09/2009, 19:23
Avatar de loncho_rojas
Colaborador
 
Fecha de Ingreso: octubre-2008
Ubicación: En el mejor lugar del mundo
Mensajes: 2.704
Antigüedad: 15 años, 6 meses
Puntos: 175
Respuesta: Filtrar datos de resultados

Buena idea che.. gracias enserio.. creo que puede resultar menos tedioso un desplegable tipo menu donde se oculten los otros campos.. si existe algun otro aporte, sera bienvenido.

No crean que no lo estoy haciendo, eh... acuerdense que a otro le puede servir
__________________
Ayudo con lo que puedo en el foro, y solo en el foro.. NO MENSAJES PRIVADOS.. NO EMAILS NI SKYPE u OTROS.

Antes de hacer un TOPICO piensa si puedes hallarlo en Google o en el Buscador del Foro...
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 04:06.