Foros del Web » Programando para Internet » PHP »

Problemas con filtrado

Estas en el tema de Problemas con filtrado en el foro de PHP en Foros del Web. Tengo un formulario con una opción de búsqueda. he probado con varios opciones pero solo me realiza la búsqueda si el usuario teclea el dato ...
  #1 (permalink)  
Antiguo 15/09/2009, 12:08
Avatar de marie_mar  
Fecha de Ingreso: septiembre-2009
Mensajes: 26
Antigüedad: 14 años, 7 meses
Puntos: 0
Problemas con filtrado

Tengo un formulario con una opción de búsqueda. he probado con varios opciones pero solo me realiza la búsqueda si el usuario teclea el dato tal y como está en la bd.
Por ejemplo, quiere buscar un dato que comienza o que contiene la palabra Dirección y tiene que escribirme al menos "Dire"....si me teclea "dire" ya no encuentra nada, o sea, que tengo u n gran problema con la discriminación de mayúsculas y minúsculas en php.
Cuando realizo la consulta en postgresql paso el parámetro WHERE (campo ~* 'dire') y lo hace de los más bien. Pero cuando eso mismo se lo aplico a php WHERE (campo ~* '$_POST['busca']') no lo hace.
Alguien me puede ayudar????????
  #2 (permalink)  
Antiguo 16/09/2009, 09:55
Avatar de gerson  
Fecha de Ingreso: febrero-2005
Ubicación: Lima
Mensajes: 481
Antigüedad: 19 años, 2 meses
Puntos: 4
Respuesta: Problemas con filtrado

Hol marie_mar,

Como no pones parte del código q estas desarrollando voy a suponer que estas haciendo lo siguiente:
Código PHP:
$consulta '... WHERE (campo ~* '$_POST['busca']')'
Pero deberia de ser asi:
Código PHP:
$consulta '... WHERE (campo ~* ' $_POST['busca'] . ')'
Salud2.
__________________

  #3 (permalink)  
Antiguo 17/09/2009, 06:56
Avatar de marie_mar  
Fecha de Ingreso: septiembre-2009
Mensajes: 26
Antigüedad: 14 años, 7 meses
Puntos: 0
Respuesta: Problemas con filtrado

Te mando el código que estoy usando, y ya sabes que no me funciona, donde $filter es el post del campo de texto donde me escriben la palabra a buscar y $filterfield es el post del campo que me seleccionaron de una lista.
function sql_select()
{
global $conn;
global $order;
global $ordtype;
global $filter;
global $filterfield;
global $wholeonly;

$filterstr = sqlstr($filter);
if (!$wholeonly && isset($wholeonly) && $filterstr!='') $filterstr = "%" .($filterstr) ."%";
$sqle = "SELECT * FROM (SELECT id, emp, org FROM public.n_emp) subq";
if (isset($filterstr) && $filterstr!='' && isset($filterfield) && $filterfield!='') {
$sqle .= " where " .sqlstr($filterfield) ." like '" .$filterstr ."'";
} elseif (isset($filterstr) && $filterstr!='') {
$sqle .= " where (id like '" .$filterstr ."') or (emp ~* '%" .$filterstr ."%') or (org ~* '%" .$filterstr ."%')";
}
if (isset($order) && $order!='') $sqle .= " order by \"" .sqlstr($order) ."\"";
if (isset($ordtype) && $ordtype!='') $sqle .= " " .sqlstr($ordtype);
$res = pg_query($conn, $sqle) or die(pg_last_error());
return $res;
}

Gracias y saludos
  #4 (permalink)  
Antiguo 17/09/2009, 10:24
Avatar de gerson  
Fecha de Ingreso: febrero-2005
Ubicación: Lima
Mensajes: 481
Antigüedad: 19 años, 2 meses
Puntos: 4
Respuesta: Problemas con filtrado

Lo que podrias hacer es testear la sentencia que estas armando. Para esto:
Código PHP:
...
if (isset(
$ordtype) && $ordtype!=''$sqle .= " " .sqlstr($ordtype);
echo 
$sqle;
  
/*$res = pg_query($conn, $sqle) or die(pg_last_error());
  return $res;*/

De esta forma podras ver si esta bien la sentencia.

Otra duda me surge:
Código PHP:
global $filter;
  global 
$filterfield
seguramente estas variables ya las instanciastes con los valores del $_POST.

Espero q esto te ayude un poco en tu problemilla.
__________________

  #5 (permalink)  
Antiguo 19/11/2009, 09:52
Avatar de marie_mar  
Fecha de Ingreso: septiembre-2009
Mensajes: 26
Antigüedad: 14 años, 7 meses
Puntos: 0
Respuesta: Problemas con filtrado

Gracias Gerson, ya resolví lo del filtrado y lo hice así:

//Cargo variables diferenciando mayusculas y minusculas
$a = strtolower($filter);
$b = ucwords($a);
$c = strtoupper($filter);

Al armar la consulta me queda asi:
$filterstr = sqlstr($filter);
if (!$wholeonly && isset($wholeonly) && $filterstr!='') $filterstr = "%" .($filterstr) ."%";
$sqle = "SELECT * FROM (SELECT id, emp, org FROM public.n_emp) subq";
if (isset($filterstr) && $filterstr!='' && isset($filterfield) && $filterfield!='') {

//Aqui pregunto por todos los parametros posibles de filtrado

$sqle .= " where ( ".sqlstr($filterfield) ." like '%" .$filterstr ."%' ) or ( ".sqlstr($filterfield)." like '%".$b."%' ) or ( ".sqlstr($filterfield)." like '%".$a."%' ) or ( ".sqlstr($filterfield)." like '%".$c."%' )";
} elseif (isset($filterstr) && $filterstr!='') {

//Paso por todos los campos y parametros a filtrar
$sqle .= " where (id like '" .$filterstr ."') or (id like '" .$a ."') or (id like '" .$b ."') or (id like '" .$c ."') or (emp like '" .$filterstr ."') or (emp like '" .$a ."') or (emp like '" .$b ."') or (emp like '" .$c ."') or (org like '" .$filterstr ."') or (org like '" .$a ."') or (org like '" .$b ."') or (nci like '" .$c ."')";
}
if (isset($order) && $order!='') $sqle .= " order by \"" .sqlstr($order) ."\"";
if (isset($ordtype) && $ordtype!='') $sqle .= " " .sqlstr($ordtype);
$res = pg_query($conn, $sqle) or die(pg_last_error());

Gracias por tu colaboracion.....Saludos
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 00:09.