Foros del Web

Foros del Web (http://www.forosdelweb.com/)
-   PHP (http://www.forosdelweb.com/f18/)
-   -   como hacer una busqueda por artista, por cancion y por album en una caja de texto (http://www.forosdelweb.com/f18/como-hacer-busqueda-por-artista-por-cancion-por-album-caja-texto-671959/)

esaenz22 11/02/2009 15:03

como hacer una busqueda por artista, por cancion y por album en una caja de texto
 
buenas a todos. estiy haciendo un portal de letras de artistas con sus canciones. coloque un buscador con su caja de texto para k el sistema busque si es un titulo de una cancion, un album o un artista.

en mi consulta sql lo condicione utilizando la sentencia OR.

Código PHP:


$sql_busqueda 
"SELECT g.*, a.*, l.* FROM lm_grupo_musica g, lm_album a, 
                lm_letra_canciones l
                where l.idgrupo = g.idgrupo
                and l.idalbum = a.idalbum
                or l.nombre_cancion = '"
.$_POST['s']."'
                or a.nombre_album = '"
.$_POST['s']."'
                or g.nombre_grupo = '"
.$_POST['s']."'"

s es el nombre de mi caja de texto. mi pregunta es que si es la manera correcta de hacer ese tipo de busqueda en el sql.

saludos.

Triby 11/02/2009 15:08

Respuesta: como hacer una busqueda por artista, por cancion y por album en una caja d
 
No, no es la manera correcta, primero debes validar lo que recibes en $_POST['s'], de lo contrario te arriesgas a inyeccion SQL y realizar la busqueda con LIKE:

Código php:
Ver original
  1. $s = trim($_POST['s']); // Quitas espacios
  2. if($s == '') // Verificas que no sea cadena vacia
  3.     die('Teclea algo para buscar.');
  4. $sql_busqueda = "SELECT g.*, a.*, l.* FROM lm_grupo_musica g, lm_album a,
  5.                lm_letra_canciones l
  6.                where l.idgrupo = g.idgrupo
  7.                and l.idalbum = a.idalbum
  8.                AND l.nombre_cancion LIKE '%$s%'
  9.                or a.nombre_album LIKE '%$s%'
  10.                or g.nombre_grupo LIKE '%$s%'";

esaenz22 11/02/2009 15:14

Respuesta: como hacer una busqueda por artista, por cancion y por album en una caja d
 
gracias triby por responder a mi pregunta. voy a probar el codigo k publicaste. por cierto k son inyecciones sql ?.

oso96_2000 11/02/2009 15:20

Respuesta: como hacer una busqueda por artista, por cancion y por album en una caja d
 
Al cópdigo de Triby yo le agregaría un mysql_real_escape_string, para evitar las inyecciones SQL (con el trim y la validación de la cadena que no este vacía no basta).

Sería algo como:
Código PHP:
Ver original
  1. $s = trim($_POST['s']);

Para saber que es una inyección SQL puedes consultar la wikipedia :)
http://es.wikipedia.org/wiki/Inyecci%C3%B3n_SQL

Saludos

esaenz22 11/02/2009 15:26

gracias por la ayuda oso96_2000. leere que son inyecciones sql.

saludos.

gracias por la ayuda. pero me sigue saliendo error. no es de sintaxis. sino de como se muestran los datos. me explico. escribo el grupo bon jovi en la caja de texto, doy clic en buscar y me tiene k filtrar las canciones de bonjovi con su respectivo album, obiando el campo nombre_album y nombre_grupo. pero si busco el album de bonjovi o de otro artista me tiene k mostrar las canciones del album y a k artista pertenece.

Código PHP:


$s 
trim($_POST['s']); // Quitas espacios
if($s == ''// Verificas que no sea cadena vacia
* * die('Teclea algo para buscar.');
$sql_busqueda "SELECT g.*, a.*, l.* FROM lm_grupo_musica g, lm_album a, 
 * * * * * * * *lm_letra_canciones l
 * * * * * * * *where l.idgrupo = g.idgrupo
 * * * * * * * *and l.idalbum = a.idalbum
 * * * * * * * *AND l.nombre_cancion LIKE '%$s%'
 * * * * * * * *or a.nombre_album LIKE '%$s%'
 * * * * * * * *or g.nombre_grupo LIKE '%$s%'"


me pueden ayudar.

Triby 11/02/2009 16:44

Respuesta: como hacer una busqueda por artista, por cancion y por album en una caja d
 
Dos cosas:

1- no se si fue por copiar/pegar, pero ese & #160; algun error debe darte, ya sea de sintaxis o de parse.
2- Ciertamente se me olvido lo de mysql_real_escape_string, que sugiere oso96_2000 y tu tampoco lo pusiste.

Si no te funciona, dinos el mensaje de error que obtienes o muestra una lista de resultados de ejemplo, buscando por album y la estructura de tus tablas.

esaenz22 11/02/2009 17:05

Respuesta: como hacer una busqueda por artista, por cancion y por album en una caja d
 
para k me entienda triby, yo estoy haciendo un portal de musica de letras de canciones. le explicare como he creado mis tablas. he creado una tabla con el prefijo lm_artista donde el administrador pueda agregar el artista o grupo musical. luego he creado otra tabla album donde el administrador pueda seleccionar el artista (con un select) e ingresar el titulo del abum del artista k he seleccionado y por ultimo he creado la tabla letras_canciones.

bueno mi primera pregunta triby si es necesario crear una tabla album para relacionarla con la tabla letras_canciones donde los camposson e idgrupo, el id del album, titulo de la cancion y su contenido de la cancion de la tabla letras_canciones.

te muestro mi estructura de mis tablas. lo mostrare en sql por k no tengo el rational ni el dbdesigner.

Código HTML:


//tabla grupo_artista

CREATE TABLE `lm_grupo_musica` (
  `idgrupo` int(10) unsigned NOT NULL auto_increment,
  `nombre_grupo` varchar(100) NOT NULL,
  PRIMARY KEY  (`idgrupo`)
) ENGINE=InnoDB  DEFAULT CHARSET=utf8 AUTO_INCREMENT=41 ;

//tabla album

CREATE TABLE `lm_album` (
  `idalbum` int(10) unsigned NOT NULL auto_increment,
  `idgrupo` int(10) unsigned NOT NULL,
  `nombre_album` varchar(100) NOT NULL,
  PRIMARY KEY  USING BTREE (`idalbum`)
) ENGINE=InnoDB  DEFAULT CHARSET=utf8 AUTO_INCREMENT=43 ;

CREATE TABLE `lm_letra_canciones` (
  `idletra` int(10) unsigned NOT NULL auto_increment,
  `idgrupo` int(10) unsigned NOT NULL,
  `idalbum` int(10) unsigned NOT NULL,
  `nombre_cancion` varchar(100) NOT NULL,
  `letra_cancion` text NOT NULL,
  PRIMARY KEY  (`idletra`)
) ENGINE=InnoDB  DEFAULT CHARSET=utf8 AUTO_INCREMENT=46 ;

mi otra pregunta triby si mi estructura de tablas k le estoy mostrando es la correcta.

saludos.


La zona horaria es GMT -6. Ahora son las 09:45.

Desarrollado por vBulletin® Versión 3.8.7
Derechos de Autor ©2000 - 2024, Jelsoft Enterprises Ltd.