Foros del Web » Programando para Internet » PHP »

Problemas con consultas y busquedas

Estas en el tema de Problemas con consultas y busquedas en el foro de PHP en Foros del Web. Hola!!! Soy muy principiante en esto del PHP y apenas se hacer gran cosa.Ahora estoy bloqueada con unas consultas,aver si podeis ayudarme y me se ...
  #1 (permalink)  
Antiguo 31/05/2006, 05:45
 
Fecha de Ingreso: mayo-2006
Mensajes: 2
Antigüedad: 11 años, 6 meses
Puntos: 0
Problemas con consultas y busquedas

Hola!!!

Soy muy principiante en esto del PHP y apenas se hacer gran cosa.Ahora estoy bloqueada con unas consultas,aver si podeis ayudarme y me se explicar.

Os comento:

Hace unos dias,hice una busqueda de tan solo un campo $buscar y no me dio ningun error con el siguiente codigo que ha sido cogido de una web que ahora no recuerdo.
Código PHP:
<?

if (!isset($buscar)){ 

echo 
"Debe especificar una cadena a buscar"

echo 
"<p>Debe especificar una cadena a buscar</p> \n";


echo 
"</html></body> \n"

exit; 



$link mysql_connect("localhost""",""); 

mysql_select_db("musica"$link); 

$sql "SELECT * FROM grupos WHERE nombre LIKE '%$buscar%' ORDER BY nombre"

$result mysql_query($sql$link); 

if (
$row mysql_fetch_array($result)){ 

echo 
"<table border = '1'> \n"

//Mostramos los nombres de las tablas 

mysql_field_seek($result,0); 

while (
$field mysql_fetch_field($result)){ 

echo 
"<td><b>$field->name</b></td> \n"



echo 
"</tr> \n"

do { 

echo 
"<tr> \n";

echo 
"<td>".$row["codigo"]."</td> \n";  

echo 
"<td>".$row["nombre"]."</td> \n"

echo 
"<td>".$row["componentes"]."</td> \n"

echo 
"<td>".$row["discos"]."</td> \n"

echo 
"<td>".$row["anno"]."</td> \n"

echo 
"<td>".$row["tipomusica"]."</td> \n"



} while (
$row mysql_fetch_array($result)); 


echo 
"</table> \n"

} else { 

echo 
"<p>¡No se ha encontrado ningún registro!</p>\n"



?>
El problema me surge ahora que quiero hacer la busqueda por varios campos,intento hacer una web de musica y quiero que mediante un formulario que contiene el nombre,estilo e integrantes del grupo puede hacer busquedas(si esta en blanco pues que muestre todos,si selecciono el estilo,que muestre todos los de ese estilo) pero no lo consigo :(

El codigo que tengo es el siguiente:
Código PHP:
<?
            conectaBD
();
            
seleccionaBD();
            
//$integrantes=$_POST["integrantes"];
            
$nombre=$_POST["nombre"];
            
$estilo=$_POST["estilo"];
            
$inte1=$_POST["inte1"];
            
$inte2=$_POST["inte2"];

$result=ejecutar_consulta($nombre,$estilo,$inte1,$inte2);
//$fila=mysql_fetch_array($result);

if ($row mysql_fetch_array($result)){

echo 
"<table border = '1'> \n"

//Mostramos los nombres de las tablas 

mysql_field_seek($result,0); 

while (
$field mysql_fetch_field($result)){ 

echo 
"<td><b>$field->name</b></td> \n"



echo 
"</tr> \n"

do { 

echo 
"<tr> \n";

echo 
"<td>".$row["codigo"]."</td> \n";  

echo 
"<td>".$row["nombre"]."</td> \n"

echo 
"<td>".$row["estilo"]."</td> \n"

echo 
"<td>".$row["anno"]."</td> \n"

echo 
"<td>".$row["integrantes"]."</td> \n"

echo 
"<td>".$row["albumes"]."</td> \n"

echo 
"<td>".$row["fotos"]."</td> \n"

echo 
"<td>".$row["historia"]."</td> \n"



} while (
$row mysql_fetch_array($result)); 


echo 
"</table> \n"

}else { 

echo 
"<p>¡No se ha encontrado ningún registro!</p>\n"

}

?>
donde ejecutar_consulta esta lo siguiente:
Código PHP:
 function ejecutar_consulta($nombre,$estilo,$inte1,$inte2)
       {
               
//global $link;
            //conectaBD();
            //seleccionaBD();
            //mysql_query("lock tables grupos read", $link) or $this->Error_mysql();
            
if('$nombre'=="" &&    '$estilo'=="todos" &&    '$inte1'=="" && '$inte2'=="")
            {
                
$sql "SELECT * FROM grupos WHERE nombre LIKE '$nombre' ORDER BY nombre"
                
$res=mysql_db_query(BASEDATOS,$sql);
            }
            else if(
estilo=='$estilo')
            {
                
$sql "SELECT * FROM grupos WHERE estilo LIKE '$estilo' ORDER BY nombre"
                
$res=mysql_db_query(BASEDATOS,$sql);    
            }
            
// mysql_query("unlock tables", $link) or $this->Error_mysql();
             //cierraBD();
             
return ($res);
        } 
Pero con todo esto tengo un error con el if ($row = mysql_fetch_array($result)){

Aver si me podeis ayudar,estoy desesperandome

Muchas gracias!!!

Última edición por jam1138; 31/05/2006 a las 05:56
  #2 (permalink)  
Antiguo 31/05/2006, 06:39
Avatar de jerkan  
Fecha de Ingreso: septiembre-2005
Mensajes: 1.607
Antigüedad: 12 años, 2 meses
Puntos: 18
Antes de hacer el $row = mysql_fetch_array($result), comprueba si el resultado de la función ejecutar_consulta es válido o no.
  #3 (permalink)  
Antiguo 31/05/2006, 07:03
 
Fecha de Ingreso: marzo-2005
Ubicación: Málaga
Mensajes: 115
Antigüedad: 12 años, 9 meses
Puntos: 0
solo he leido tu post por encima, pero te hago una recomendación, cuando hagas una consulta pon siempre detrás " or die(mysql_error());" y así podrás ver donde falla tu consulta.
  #4 (permalink)  
Antiguo 31/05/2006, 08:26
Avatar de seik!  
Fecha de Ingreso: mayo-2006
Mensajes: 492
Antigüedad: 11 años, 6 meses
Puntos: 6
Consulta avanzada... o filtro lo llaman algunos

bueno este post lo respodi a otra usuaria ... pero me parece k es lo mismo... kieres buscar por criterios verdad? aki ahi un ejemplo de como hacerlo... con un criteri directo (que es id) o bien con mas de un criterio... espero te sirva..

--------------------------------------------------------------------------


lo primero es generar un formulario de busqueda.......
esto debe estar en tu pagina donde se ubicara el filtro...ademas lleva un script para transformar lo que escriba en minuscula... optimiza la busqueda...

------------------------------------------------------------------------
<form method="POST" name="form" action="pagina.php" ALIGN="top">

FILTRAR POR:

Nº documento
<input type="text" name="numero" maxlength="15" size="12" onChange="javascript:this.value=this.value.toLower Case();">

Nombre
<input type="text" name="nombre" maxlength="25" size="25" onChange="javascript:this.value=this.value.toLower Case();">

departamento
<input type="text" name="departamento" maxlength="15" size="11" onblur="valFecha(this)">*

Organismo
<select name="selorganismo">
<option value=""></option>
<option value="estado">SEC</option>
<option value="gobieno">CNE</option>
<option value="publico">CDEC</option>
</select>

<input type="submit" value="Filtrar" >

</form>


---------------------------------------------------------------------

si te das cuenta en esta linea

<form method="POST" name="form" action="pagina.php" ALIGN="top">

es necesario la direcciones a la pagina donde realizas las consultas a las base datos... o bien a un nuevo frame... esta vez lo haremos en la misma pagina

action="pagina.php"

primero seleccionamos ya los datos de la base datos y los listamos....
luego es necesario rescatar los datos del formulario... esto lo haremos antes del tag del <HTML> de la pagina misma.... seria mas o menos asi

---------------------------------------------------------------------

despues de conectarnos... realizamos la consulta...

<?php

$strsql = "SELECT numero, nombre, departamento , organismo FROM tutabla";

$numero=$_POST["numero"];
$nombre=$_POST["nombre"];
$departamento=$_POST["departamento"];

$organismo=$_POST["selorganismo"];

--------------------------------------------------------------------------
ahora generaremos el filtro... espero entiendas....
------------------------------------------------------------------------

//GENERAMOS FILTRO

if(strlen($numero)> 0) {
$strsql= $strsql.= " WHERE numero= '".$numero."'";
}
else {
if(strlen($nombre)>0 ){
$strsql.= " WHERE nombre LIKE '%".$nombre."%' ";

if(strlen($departamento)>0){
$strsql.= " AND departamento LIKE '%".$departamento."%' "; }
if(strlen($organismo)>0){
$strsql.= " AND organismo= '".$organismo."'";
}
}
----------------------------------------------------------------------
lo unico k hace es tomar la clave y preguntar por una id en el select... si esta vacio muestra todo lo k ahi en la base datos... asi cada vez k habras listara todo ya k no has llenado nada del filtro, luego podras aplicar filtro... si no ahi id (que en este caso es numero) no hace nada ... luego pregunta ahi nombre o algo k exista dentro de nombre.... EJ: filtrar por nombre: a ... mostrara todos los nombres de la base datos donde se encuentre contenida la vocal "a" en el nombre.... tambien puedes mezclar los criterios.... ej: nombre y departamento... etc.... y los lista... asi susecivamente... mmmm! si lo encuentra le suma otro criterio si es k lo has llenado claro en el filtro....con un AND y asi sucesivamente...
debes generar mas consultas anidadas por cuantos campos de filtro tengas... sino no podras mezclar todas los criterios de buskeda y se caera tu sistema ...
----------------------------------------------------------------------
de esta manera .. veras k solo invierto los dos primeros criterios....



if(strlen($departamento)>0 ){
$strsql.= " WHERE departamento LIKE '%".$departamento."%' ";

if(strlen($nombre)>0){
$strsql.= " AND nombre LIKE '%".$nombre."%' "; }
if(strlen($organismo)>0){
$strsql.= " AND organismo= '".$organismo."'";
}
}


asi sucesivamente con todos los campos de tu filtro..... espero sirva aios ;)

se me olvidava.... depues debes poner mas abajo la impresion de la ocnsulta de la base datos po... para ver el listado claro.... eso...aios ;)
atte seik -chile-
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 09:27.