Foros del Web » Programando para Internet » PHP »

como hacer una busqueda por artista, por cancion y por album en una caja de texto

Estas en el tema de como hacer una busqueda por artista, por cancion y por album en una caja de texto en el foro de PHP en Foros del Web. 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 ...
  #1 (permalink)  
Antiguo 11/02/2009, 15:03
(Desactivado)
 
Fecha de Ingreso: abril-2008
Mensajes: 787
Antigüedad: 16 años
Puntos: 7
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.
  #2 (permalink)  
Antiguo 11/02/2009, 15:08
Avatar de Triby
Mod on free time
 
Fecha de Ingreso: agosto-2008
Ubicación: $MX->Gto['León'];
Mensajes: 10.106
Antigüedad: 15 años, 8 meses
Puntos: 2237
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%'";
__________________
- León, Guanajuato
- GV-Foto
  #3 (permalink)  
Antiguo 11/02/2009, 15:14
(Desactivado)
 
Fecha de Ingreso: abril-2008
Mensajes: 787
Antigüedad: 16 años
Puntos: 7
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 ?.
  #4 (permalink)  
Antiguo 11/02/2009, 15:20
Avatar de oso96_2000  
Fecha de Ingreso: junio-2002
Ubicación: Distrito Federal
Mensajes: 558
Antigüedad: 21 años, 10 meses
Puntos: 35
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
__________________
Sin Ideas
  #5 (permalink)  
Antiguo 11/02/2009, 15:26
(Desactivado)
 
Fecha de Ingreso: abril-2008
Mensajes: 787
Antigüedad: 16 años
Puntos: 7
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.

Última edición por GatorV; 11/02/2009 a las 16:49
  #6 (permalink)  
Antiguo 11/02/2009, 16:44
Avatar de Triby
Mod on free time
 
Fecha de Ingreso: agosto-2008
Ubicación: $MX->Gto['León'];
Mensajes: 10.106
Antigüedad: 15 años, 8 meses
Puntos: 2237
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.
__________________
- León, Guanajuato
- GV-Foto
  #7 (permalink)  
Antiguo 11/02/2009, 17:05
(Desactivado)
 
Fecha de Ingreso: abril-2008
Mensajes: 787
Antigüedad: 16 años
Puntos: 7
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.

Última edición por esaenz22; 11/02/2009 a las 17:12
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 03:02.