Foros del Web » Programando para Internet » PHP »

Buscador con PHP

Estas en el tema de Buscador con PHP en el foro de PHP en Foros del Web. Hola a todos, os cuento lo que me esta pasando. Estoy haciendo un buscador para mi pagina web en php, y ya lo tengo mas ...
  #1 (permalink)  
Antiguo 13/04/2012, 06:37
 
Fecha de Ingreso: abril-2012
Mensajes: 1
Antigüedad: 12 años, 7 meses
Puntos: 0
Buscador con PHP

Hola a todos,

os cuento lo que me esta pasando. Estoy haciendo un buscador para mi pagina web en php, y ya lo tengo mas o menos perfilado. La estructura es que el usuario tiene que elegir los campos sobre los que quiere buscar, partiendo de unos desplegables (desplegable marca, desplegable medida, desplegable velocidad) y coge los datos de una tabla que es neumaticos con los campos marca, medida y velocidad

el caso es que para hacer una consulta con todo los daso, me vale con poner $cadena ="SELECT * FROM neumaticos; pero lo que en realidad quiero es que el usuario pueda seleccionar hacer varias selecciones y salgan los resultados; o buscar solo con la marca, o con la marca y la medida, etc... no se muy bien como estructurar la sentencia.

Muchas gracias de ante mano

un saludo
Borja
  #2 (permalink)  
Antiguo 13/04/2012, 08:09
Avatar de zalito12  
Fecha de Ingreso: noviembre-2011
Ubicación: Coruña, España
Mensajes: 430
Antigüedad: 13 años
Puntos: 67
Respuesta: Buscador con PHP

A ver no sé muy bien que opción te gustará más pero bueno, una fácil es hacerlo así:
Código PHP:
$marca $_POST['marca'];
$medida $_POST['medida'];
$velocidad $_POST['velocidad']

$where ''
if($marca != ''){
$where $where." marca = '".$marca"'";
}
if(
$medida != ''){
$where $where." medida = '".$medida"'";
}
if(
$velocidad != ''){
$where $where." velocidad = '".$velocidad"'";
}
if(
$where != ''$where " WHERE ".$where;

$cadena "SELECT * FROM neumaticos ".$where." ORDER BY marca ASC, medida ASC, velocidad ASC"
Bueno, esa es una opción, te he añadido un order para ordenarlos de alguna manera pero eso a tu gusto, ¡importante!, para que funcione este código en los select la opción de cuando no se ha elegido nada debe tener value="".

Si quieres algo más complejo como que aparezca una lista de resultados según vas cambiando el valor de los select deberás echarle un ojo a Ajax
  #3 (permalink)  
Antiguo 14/04/2012, 08:25
 
Fecha de Ingreso: abril-2012
Ubicación: 41°37′00″N, 00°37′00″E
Mensajes: 462
Antigüedad: 12 años, 7 meses
Puntos: 33
Respuesta: Buscador con PHP

Yo veo muy viable la opción de zalito12, sobretodo si es un select de una tabla.
Si, además, quieres "sorprender" en la web, podrías hacer los select (del form) desplegados, con opción multiple, y en la validación hacer un select agrupado.

Partiendo del código de zalito12 (copio y modifico), yo haría algo así:

Código:
$marca = $_POST['marca'];
$medida = $_POST['medida'];
$velocidad = $_POST['velocidad'];
$whereMarca = "";
$whereMedidad = "";
$whereVelocidad = "";
$cadena = "";
$where = "";

for($i=0;$i<count($marca);$i++){
  $whereMarca .= $marca[$i].", "; //el ".=" es como hacer "$where = $where.$variable"
}

for($i=0;$i<count($medida);$i++){
  $whereMedida .= $medida[$i].", ";
}

for($i=0;$i<count($velocidad);$i++){
  $whereVelocidad .= $velocidad[$i].", ";
}

//Esto lo hacemos ya que los strings acabarán en ", " y provocaría fallo en SQL
$whereMarca = substr($whereMarca, 0, -2);
$whereMedida = substr($whereMedida, 0, -2);
$whereVelocidad = substr($whereVelocidad, 0, -2);

if($whereMarca != ""){
  $where .= "marca in (".$whereMarca.");
}

if($whereMedida != ""){
  if($where != ""){
    $where .= " or ";
  }

  $where .= "medida in (".$whereMedida.")";
}

if($whereMedida != ""){
  if($where != ""){
    $where .= " or ";
  }

  $where .= "velocidad in (".$whereVelocidad.")";
}

$cadena = "SELECT * FROM neumaticos where ".$where." ORDER BY marca ASC, medida ASC, velocidad ASC";
Lo último que faltaría sería crear los selects en desplegado y de selección múltiple. Esto se hace mediante los atributos "size" y "multiple", además de tener que añadir corchetes ("[]") al atributo "name". Sería algo así (el seleccionar varios se hace con ctrl+click):

Código:
<select name="miSelect[]" size=10 multiple>
  #4 (permalink)  
Antiguo 14/04/2012, 10:15
Avatar de zalito12  
Fecha de Ingreso: noviembre-2011
Ubicación: Coruña, España
Mensajes: 430
Antigüedad: 13 años
Puntos: 67
Respuesta: Buscador con PHP

Si esa opción es buena para usar selects con búsquedas, buena idea!
Para simplificar un poco el código de DoHITB en en los bucles for podrías meter las variables en un array y luego usar la funcion implode() para generar la lista, tampoco hay mucha diferencia.

Algo importante, al ver su código me he dado cuenta de que me olvide de añadir los AND al crear la variable $where, fallo mio, habria que modificar un poco.
Código PHP:
$marca $_POST['marca'];
$medida $_POST['medida'];
$velocidad $_POST['velocidad']

$where ''
if($marca != ''){
$where $where." marca = '".$marca"'";
}
if(
$medida != ''){
  if(
$where !=''$where $where.' AND ';
$where $where." medida = '".$medida"'";
}
if(
$velocidad != ''){
    if(
$where !=''$where $where.' AND ';
$where $where." velocidad = '".$velocidad"'";
}
if(
$where != ''$where " WHERE ".$where;

$cadena "SELECT * FROM neumaticos ".$where." ORDER BY marca ASC, medida ASC, velocidad ASC"
Por si tienes alguna duda con el código de DoHITB, $where .= ' AND ' es lo mismo que poner: $where = $where.' AND ';

Etiquetas: tabla, buscadores, usuarios
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 22:19.