Foros del Web » Programando para Internet » PHP »

Busqueda PHP y MySql

Estas en el tema de Busqueda PHP y MySql en el foro de PHP en Foros del Web. Hola Amigos, necesito de su ayuda..... resulta q necesito hacer una busqueda x 3 campos diferentes (titulo, tipo, isbn) de una tabla avisos......y no se ...
  #1 (permalink)  
Antiguo 06/09/2009, 16:31
 
Fecha de Ingreso: noviembre-2006
Ubicación: Capital Federal
Mensajes: 141
Antigüedad: 17 años, 5 meses
Puntos: 1
Sonrisa Busqueda PHP y MySql

Hola Amigos, necesito de su ayuda.....

resulta q necesito hacer una busqueda x 3 campos diferentes (titulo, tipo, isbn) de una tabla avisos......y no se bien como realizarla y necesito algun ejemplo y/o sugerencia de como realizarla....

Tengo un Form que envio por $_POST los values de titulo, tipo y isbn
y en el search.php agarro esos datos pero necesitaria el script q realize bien las busqueda ya q puede q venga un solo dato, o dos y los otros no y como combinar bien para que me traiga los resultados correctos.....


Gracias!
  #2 (permalink)  
Antiguo 06/09/2009, 17:55
 
Fecha de Ingreso: noviembre-2006
Ubicación: Capital Federal
Mensajes: 141
Antigüedad: 17 años, 5 meses
Puntos: 1
Respuesta: Busqueda PHP y MySql

Hola Amigos yo de nuevo....sigo intentando y no lo logro hacer funcionar ...les copio mi codigo a ver si a alguien se le ocurre algo.......

<?php
$tipo = $_POST['tipo'];
$titulo = $_POST['titulo'];
$isbn = $_POST['isbn'];

if ( trim($tipo) != "" ){
$sql .= " AND tipo = '".$tipo."' ";
}else{
$sql .= " WHERE tipo = '".$tipo."' ";
}


if ( trim($titulo) != "" ){
$sql .= " AND titulo like '%".$titulo."%' ";
}else{
$sql .= " WHERE titulo like '%".$titulo."%' ";
}


if ( trim($isbn) != "" ){
$sql .= " AND isbn = '".$isbn."' ";
}else{
$sql .= " WHERE isbn = '".$isbn."' ";
}


$sql .= " ORDER BY ID DESC";
$result = mysql_query($sql) or die("Query: $sql ".mysql_error());
?>


y me tira el siguiente error...............

Query: WHERE tipo = '' AND titulo like '%nuevo%' WHERE isbn = '' ORDER BY ID DESC You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'WHERE tipo = '' AND titulo like '%nuevo%' WHERE isbn = '' ORDER BY ID DESC' at line 1
  #3 (permalink)  
Antiguo 17/09/2009, 08:26
Avatar de marie_mar  
Fecha de Ingreso: septiembre-2009
Mensajes: 26
Antigüedad: 14 años, 8 meses
Puntos: 0
Respuesta: Busqueda PHP y MySql

Hola Matías.

No tengo mucha experiencia en php porque recién estoy empezando pero en sql tengo ya 10 años de trabajo con visual basic y sql server.
Primero, estás preguntando por el post de una variable, por tanto a mi parecer no debes usar la doble comilla para preguntar si está vacío y lo otro es que a la hora de hacer la concatenación debes preguntar si el campo anterior existe, te explico:

es $tipo el primer campo a filtrar????....porque entonces no puedes usar la clausula AND puesto que es el primero

Yo veo tu código así:
<?php
$tipo = $_POST['tipo'];
$titulo = $_POST['titulo'];
$isbn = $_POST['isbn'];

if ($_POST['tipo'] && trim($tipo) != ") //aca preguntas si existe el post de tipo y si $tipo es diferente de vacío y si es el primer parámetro no necesitas la clausula AND
{
$sql .= " WHERE tipo = '" .trim($tipo) ."' ";
}

if ($_POST['titulo'] && trim($titulo) != '')
{
//Para poder seguir la cadena debes primero preguntar si el primer parametro esta pasando
if ($_POST['tipo'] && trim($tipo) != ")
{
$sql .= " AND titulo like '%".$titulo ."%' ";
}
else
{
$sql .= " WHERE titulo like '%".$titulo."%' ";
}


if ($_POST['isbn'] && trim($isbn) != '')
{
//Continuas la concatenación
if ($_POST['tipo'] && trim($tipo) != ") || ($_POST['titulo'] && trim($titulo) != '')
{
$sql .= " AND isbn = '".trim($isbn) ."' ";
}
else
{
$sql .= " WHERE isbn = '".trim($isbn) ."' ";
}


$sql .= " ORDER BY ID DESC";
$result = mysql_query($sql) or die("Query: $sql ".mysql_error());
?>

Por favor pruebalo y me dices. Por otra parte, imagino que en algún lugar estás validando que al menos te llenen un campo por donde efectuar la búsqueda?????
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:16.