Foros del Web » Programando para Internet » PHP »

Filtro de campos sin resolver

Estas en el tema de Filtro de campos sin resolver en el foro de PHP en Foros del Web. Hace tiempo que ando buscando una solucion para este problema... http://www.forosdelweb.com/f86/probl...solver-727415/ Si de la forma que lo tengo no se puede o es dificil, me ...
  #1 (permalink)  
Antiguo 25/08/2009, 02:32
 
Fecha de Ingreso: febrero-2008
Mensajes: 675
Antigüedad: 16 años, 3 meses
Puntos: 5
Filtro de campos sin resolver

Hace tiempo que ando buscando una solucion para este problema...
http://www.forosdelweb.com/f86/probl...solver-727415/

Si de la forma que lo tengo no se puede o es dificil, me gustaria saber si hay alguna forma diferente de hacerlo.

Un saludo
  #2 (permalink)  
Antiguo 25/08/2009, 02:53
 
Fecha de Ingreso: abril-2008
Mensajes: 32
Antigüedad: 16 años
Puntos: 0
Respuesta: Filtro de campos sin resolver

Hola, la verdad es que no me queda muy clara la pregunta, pero no sería tan simple como hacer esto:

Código PHP:
$usuario_sesion $_SESSION['usuario']; 
y después hacer esta consulta:

Código:
select *
from Productos, Usuario, categoria
where Productos.categoria = Usuario.categoria and 
           Usuario.usuario = '$usuario_sesion'
La verdad es que yo lo de las categorías no lo haría así, sino utilizando un array de valores booleanos (0,1) de manera que la posición en el array indicara el número de la categoría y el valor del array en esa posición si está seleccionada o no.

Ejemplo:

1 0 0 1 1 0 ... --> Categorías 1, 4 y 5 elegidas. El resto no.

De esta manera podrías utilizar la operación AND (&) a nivel de bits para comprobar las categorías elegidas de una manera muy rápida.

Ejemplo:

Mi vector: 1 0 0 1 1 0 ....
Quiero comprobar si están elegidas las categorías 1, 2 y 3.

Solución: (1 0 0 1 1 0 ...) AND (1 1 1 0 0 0 ...)

Espero que te sirva
  #3 (permalink)  
Antiguo 25/08/2009, 11:08
 
Fecha de Ingreso: febrero-2008
Mensajes: 675
Antigüedad: 16 años, 3 meses
Puntos: 5
Respuesta: Filtro de campos sin resolver

Parece facil asi como lo dices, pero a mi esto me suena un poco a chino, es la primera vez que hago este tipo de consulta, asi que si puedes me gustaria me dieras un ejemplo con codigo explicando lo maximo posible, asi podria entender mejor y adaptarlo a mi codigo.
Gracias por tu ayuda
  #4 (permalink)  
Antiguo 26/08/2009, 05:39
 
Fecha de Ingreso: abril-2008
Mensajes: 32
Antigüedad: 16 años
Puntos: 0
Respuesta: Filtro de campos sin resolver

He hecho un ejemplo para que lo veas más claro.

Fichero index.php:

Código PHP:
<?php

    
function operacion_and($a$b) {
        if (
$a != '1' && $a != '0') return -1;
        else if (
$b != '1' && $b != '0') return -1;
        else {
            if (
$b == '1') return $a;
            else return 
0;
        }
    }

?>

<html>

<head>
    <title>Operación AND</title>
    <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
</head>

<body>

    <?php
    
        
if ($_POST['boton_enviar'] == 'Enviar') {
            for (
$i 0$i 6$i++) {
                
$campo "cb" . ($i 1);
                
                if (
$_POST[$campo] == 'on'$cb '1';
                else 
$cb '0';
                
                echo 
$cb;
                if (
$i == 5) echo "&nbsp; -> Vector de categorías elegidas<br />";
            }
            
            
$mascara $_POST['mascara'];
            if (
strlen($mascara) != 6) echo "<br /><b>Longitud de la máscara incorrecta.</b><br />";
            else {
                
$salir 0;
                for (
$i 0$i && !$salir$i++) {
                    if (
$mascara[$i] != '0' && $mascara[$i] != '1') {
                        
$salir 1;
                        echo 
"<br /><b>La máscara sólo puede estar formada por 0 y 1.</b><br />";
                    }
                }
                if (!
$salir) {
                    for (
$i 0$i 6$i++) {
                        echo 
$mascara[$i];
                    }
                    echo 
"&nbsp; -> Máscara de categorías<br />";
                    echo 
"-------------------------------------------<br />";
                    
                    for (
$i 0$i 6$i++) {
                        
$campo "cb" . ($i 1);
                        
                        if (
$_POST[$campo] == 'on'$cb '1';
                        else 
$cb '0';
                        
                        
$aux operacion_and($cb$mascara[$i]);
                        echo 
$aux;
                    }
                    echo 
"&nbsp; -> Resultado operación AND<br /><br />";
                    echo 
"Significa que de las categorías indicadas por la máscara, el usuario ha elegido 
                          las indicadas por el resultado<br />"
;
                }
            }
        }
    
        else {
            echo 
"
            <form action='index.php' method='post'>
                Elija las categorías que desee:<br /><br />
                <input type='checkbox' name='cb1' />Categoría 1<br />
                <input type='checkbox' name='cb2' />Categoría 2<br />
                <input type='checkbox' name='cb3' />Categoría 3<br />
                <input type='checkbox' name='cb4' />Categoría 4<br />
                <input type='checkbox' name='cb5' />Categoría 5<br />
                <input type='checkbox' name='cb6' />Categoría 6<br /><br />
                Máscara de categorías:&nbsp;<input type='text' name='mascara' /><br />(Ejemplo: 100110)<br /><br />
                <input type='submit' value='Enviar' name='boton_enviar' />
            </form>
            "
;
        }
    
    
?>
    
</body>

</html>
Espero que te sirva.
  #5 (permalink)  
Antiguo 31/08/2009, 04:35
 
Fecha de Ingreso: febrero-2008
Mensajes: 675
Antigüedad: 16 años, 3 meses
Puntos: 5
Respuesta: Filtro de campos sin resolver

Pues sigo sin entender, es basatante complejo para mi. Te parece si te doy el codigo y el acceso a la base de datos y asi ves lo que tengo y asi puedes ver lo que me haria falta?
Gracias por tu ayuda
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 16:07.