Foros del Web » Programando para Internet » PHP »

buscar OR

Estas en el tema de buscar OR en el foro de PHP en Foros del Web. hola, tengo el codigo para hacer busquedas pero me muestra todo, en vez de mostrar lo que deberia: Código PHP: <? $autor  =  $_GET [ ...
  #1 (permalink)  
Antiguo 27/05/2009, 13:41
 
Fecha de Ingreso: mayo-2006
Ubicación: Ciudad de Buenos Aires
Mensajes: 78
Antigüedad: 17 años, 10 meses
Puntos: 2
buscar OR

hola, tengo el codigo para hacer busquedas pero me muestra todo, en vez de mostrar lo que deberia:

Código PHP:
<?
$autor 
$_GET['autor'];
/* Título de la página  */
echo "<title>Búsqueda por Autor</title>";
?>
Código PHP:
<?
echo"<table BORDER=5 CELLPADDING=3>
<td><b>ID</b></td><td><b>Ident.</b></td><td><b>Título</b></td><td><b>Autor</b></td><td><b>Artículo</b></td><td><b>Autor del Artículo</b></td><td><b>Código</b></td><td><b>Editorial</b></td><td><b>Año</b></td><td>Observaciones</td>"
;
/* Consulta de la BD para recuperar los valores */
$consulta ="SELECT * FROM biblioa WHERE autor LIKE '%$autor%' OR autor LIKE '%$autorart%'";
/* Resultado/s de la consulta Si se produce un error imprime el mensaje */
$resultado=mysql_query($consulta) or die ("Error de búsqueda en la BD: "mysql_Error());
/* Cuenta el número de coincidencias en la BD con la palabra buscada */
$numResultados mysql_num_rows($resultado);
/* Parte Inicial de La página */
echo "<b>Resultado/s de la búsqueda:</b>"
echo 
'<div align="center"><u>'.$busqueda.'</u> Se han encontrado '.$numResultados.' coincidencias entre los Autores.
<hr /><br /></div>'
;
/* Comprobamos que se ha encontrado alguna coincidencia */
if($numResultados>0){
while(
$linea=mysql_fetch_array($resultado,MYSQL_BOTH)){
           
/* Guardamos los valores de la BD en variables  */
          
$id=$linea["id"];
        
$ident=$linea["ident"];
        
$titulo=$linea["titulo"];
          
$autor=$linea["autor"];
        
$articulo=$linea["articulo"];
        
$autorart=$linea["autorart"];
        
$codigo=$linea["codigo"];
        
$editorial=$linea["editorial"];
        
$anio=$linea["anio"];
        
$observaciones=$linea["observaciones"];
        
/* Imprimimos el resultado */
echo ("<tr BGCOLOR='gray'>");
print
"
<td nowrap>$id</td>
<td nowrap>$ident</td>
<td nowrap>$titulo</td>
<td nowrap>$autor</td>
<td nowrap>$articulo</td>
<td nowrap>$autorart</td>
<td nowrap>$codigo</td>
<td nowrap>$editorial</td>
<td nowrap>$anio</td>
<td nowrap>$observaciones</td>"
;
       } 
    } else { 
       
/* La búsqueda en la BD no produce ningún resultado  */
       
echo "Los sentimos, no se ha encontrado ninguna coincidencia con '$autor' en nuetra base.<br /><br />
       <br />"
;
       }
   
?>
porque me muestra todo y no solo sin coincide con $autor o $autorart?

si quieren pueden verlo en www.computacionemc.com.ar/biblio1 buscar

muchas gracias!
  #2 (permalink)  
Antiguo 27/05/2009, 13:44
 
Fecha de Ingreso: octubre-2008
Mensajes: 71
Antigüedad: 15 años, 5 meses
Puntos: 0
Respuesta: buscar OR

las dos variables contienen valores?

porque si una de esas dos llega sin valores te mostrara todo ^_^

depura dandole echo antes de buscar
__________________
Developer Staff
http://img8.imageshack.us/img8/7852/firmaeun.jpg
  #3 (permalink)  
Antiguo 27/05/2009, 13:47
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 15 años, 11 meses
Puntos: 2534
Respuesta: buscar OR

imagina que $autor esta vacío.... entonces el query de búsqueda queda vacío...

Código:
... WHERE autor LIKE '%%' ...
de modo que así, pues obtiene todos los registros... ya que que no hay nada que los limite!

y eso solo sucede si la variable esta vacía...

¿si entiendes lo que te digo??
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.

Última edición por pateketrueke; 27/05/2009 a las 13:53
  #4 (permalink)  
Antiguo 27/05/2009, 13:49
Avatar de abimaelrc
Colaborador
 
Fecha de Ingreso: mayo-2009
Ubicación: En el planeta de Puerto Rico
Mensajes: 14.734
Antigüedad: 14 años, 10 meses
Puntos: 1517
Respuesta: buscar OR

Para depurar la variable escribe

Código PHP:
$autor trim($autor);
$autorart trim($autorart); 
pero creo que va a buscar como quiera en la base de datos :S

Lo mejor seria que si encuentra vacia la variable no añada el % ejemplo

Código PHP:
$autor trim($autor);
$autorart trim($autorart);

if(empty(
$autor)){
 
$autor "";
}else{
  
$autor "%autor%";
}

if(empty(
$autorart)){
 
$autor "";
}else{
  
$autor "%autorart%";

y luego en el query
Código PHP:
SELECT FROM biblioa WHERE autor LIKE '$autor' OR autor LIKE '$autorart' 
  #5 (permalink)  
Antiguo 27/05/2009, 13:59
 
Fecha de Ingreso: octubre-2008
Mensajes: 71
Antigüedad: 15 años, 5 meses
Puntos: 0
Respuesta: buscar OR

lo que pasa que igual puede lanzar registros que< no quiera que llame, mejor asegurarse con un if para cada consulta
__________________
Developer Staff
http://img8.imageshack.us/img8/7852/firmaeun.jpg
  #6 (permalink)  
Antiguo 27/05/2009, 14:02
Avatar de Ronruby  
Fecha de Ingreso: julio-2008
Ubicación: 18°30'N, 69°59'W
Mensajes: 4.879
Antigüedad: 15 años, 8 meses
Puntos: 416
Respuesta: buscar OR

Código php:
Ver original
  1. if(empty($autor)){
  2.  $autor = "";
  3. }else{
  4.   $autor = "%autor%";
  5. }

Con eso no haces nada, es lo mismo xD. Le dices que si la variable esta vacia, la redeclare con una cadena vacia.

Lo que tieens que hacer es solamente PROSEGUIR con la busqueda si el campo autor no esta vacio. Si esta vacio, entonces le dices que no puede simplemente hacer una busqueda con un criterio vacio.
  #7 (permalink)  
Antiguo 27/05/2009, 14:11
Avatar de abimaelrc
Colaborador
 
Fecha de Ingreso: mayo-2009
Ubicación: En el planeta de Puerto Rico
Mensajes: 14.734
Antigüedad: 14 años, 10 meses
Puntos: 1517
Respuesta: buscar OR

Bueno pues lo que creo que va entonces que hacer es

Código PHP:
if(empty($autor)){
 
$autor "";
}else{
  
$autor "autor LIKE '%$autor%'";
}

if(empty(
$autorart)){
 
$autorart "";
}else{
  if(!empty(
$autor)){
    
$and " AND ";
  }else{
    
$and "";
  }
  
$autorart $and."autor LIKE '%$autorart%";


if(empty(
$autor) && empty($autorart)){
  echo 
"no puede estar vacio los dos campos";
  die();


Query

Código PHP:
SELECT FROM biblioa WHERE $autor $autorart 

Última edición por abimaelrc; 27/05/2009 a las 14:16
  #8 (permalink)  
Antiguo 27/05/2009, 14:18
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 15 años, 11 meses
Puntos: 2534
Respuesta: buscar OR

mmm... abimaelrc, sigues haciendo lo mismo con empty()!!


lo mejor, es usar mas la lógica... y menos código...

Código PHP:
if ( ! empty($_GET['autor']))
{
  
// aqui hago la consulta
}
else
{
  
// esta vacia!!!

__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #9 (permalink)  
Antiguo 27/05/2009, 15:03
 
Fecha de Ingreso: mayo-2006
Ubicación: Ciudad de Buenos Aires
Mensajes: 78
Antigüedad: 17 años, 10 meses
Puntos: 2
Respuesta: buscar OR

Bueno, gracias por todas las respuestas, buen debate se armó parece, pero no he podido aplicar el
Código PHP:
if ( ! empty($_GET['autor']))
{
  
// aqui hago la consulta
}
else
{
  
// esta vacia!!!

yo puse asi:
Código PHP:
if ( ! empty($_GET['autor']))
{
$consulta ="SELECT * FROM biblioa WHERE autor LIKE '%$autor%' OR autor LIKE '%$autorart%'";
}
else
{
$resultado=mysql_query($consulta) or die ("Error de búsqueda en la BD: "mysql_Error());

pero me sale un error en la linea 44, Warning: mysql_num_rows(): supplied argument is not a valid MySQL

me pueden explicar exactamente dónde deberia utilizarlo? gracias
  #10 (permalink)  
Antiguo 27/05/2009, 15:28
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 15 años, 11 meses
Puntos: 2534
Respuesta: buscar OR

mmm... me parece que te estas confundiendo, debes aprender el uso del if-then-else

if ( ! empty($_GET['autor']))
{
$consulta ="SELECT * FROM biblioa WHERE autor LIKE '%$autor%' OR autor LIKE '%$autorart%'";
$resultado=mysql_query($consulta) or die ("Error de búsqueda en la BD: ". mysql_Error());

// mostrar tabla, etc...

}
else
{
echo 'Algo esta mal, complete el formulario!';
}

eso significa: "si no esta vacío el autor, entonces hacemos la búsqueda, etc... en caso contrario mostramos un mensaje señalando el error"


suerte!
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #11 (permalink)  
Antiguo 27/05/2009, 23:21
 
Fecha de Ingreso: mayo-2006
Ubicación: Ciudad de Buenos Aires
Mensajes: 78
Antigüedad: 17 años, 10 meses
Puntos: 2
Respuesta: buscar OR

bueno, en realidad no habia mucha vuelta para dar, cometí un error tonto, era solo cambiar algo, lo dejo por si no prestaron detalle a esa falla, sea porque la pasaron por alto o porque no supieron verla:

estaba mal asi:

$consulta ="SELECT * FROM biblioa WHERE autor LIKE '%$autor%' OR autor LIKE '%$autorart%'";

es asi:

$consulta ="SELECT * FROM biblioa WHERE autor LIKE '%$autor%' OR autorart LIKE '%$autor%'";


gracias a todos por su ayuda de todas maneras!
  #12 (permalink)  
Antiguo 27/05/2009, 23:25
Avatar de abimaelrc
Colaborador
 
Fecha de Ingreso: mayo-2009
Ubicación: En el planeta de Puerto Rico
Mensajes: 14.734
Antigüedad: 14 años, 10 meses
Puntos: 1517
Respuesta: buscar OR

jaja tanta vuelta y nadie de los que escribimos nos dimos cuenta del asunto jajaja
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 10:34.