Foros del Web » Programando para Internet » PHP »

Buscador sencillo limitando un mínimo de caracteres

Estas en el tema de Buscador sencillo limitando un mínimo de caracteres en el foro de PHP en Foros del Web. Hola amigos, Tengo este ejemplo de buscador sencillo, pero no doy con la manera de que funcione un "if" para limitar la búsqueda a un ...
  #1 (permalink)  
Antiguo 20/02/2005, 07:42
 
Fecha de Ingreso: octubre-2003
Ubicación: Santander
Mensajes: 236
Antigüedad: 14 años, 2 meses
Puntos: 0
Buscador sencillo limitando un mínimo de caracteres

Hola amigos,

Tengo este ejemplo de buscador sencillo, pero no doy con la manera de que funcione un "if" para limitar la búsqueda a un mínimo de 3 caracteres (ya que si por ejemplo ingresan "a" saldrían todos los registros de la base de datos.


Código PHP:
<?
// Buscador para tablas MySQL escrito en PHP. Por Alex para www.webtaller.com
// Creado el 13-10-2003


////////////////////////////
// Configuración
///////////////////////////

//modifica estas variables según tu servidor de MySQL

$bd_servidor "localhost";


$bd_usuario "pepito";


$bd_contrasenya "grillo";


$bd_bdname "mybd";


$bd_tabla "unatabla"// Tabla donde se harán las búsquedas


// Conexión y selección de la base de datos

$link mysql_connect($bd_servidor,$bd_usuario,$bd_contrasenya);

mysql_select_db($bd_bdname,$link);

////////////////////////////
// Formulario
///////////////////////////

?>

<center>
<p><h2>Introduce las palabras para la búsqueda</h2></p>
<p><form name="buscador" method="post" action="buscador_generico.php"><br>
Buscar en:
<select name="campo">
<?php

//Con este query obtendremos los campos por los cuales el usuario puede buscar

$result mysql_query("SHOW FIELDS FROM `$bd_tabla`",$link);

while(
$row mysql_fetch_row($result)) {

// en $row[0] tenemos el nombre del campo
// de esta manera no necesitamos conocer el nombre de los campos
// por lo que cualquier tabla nos valdrá

?>
<option value="<?php echo $row[0]; ?>"><?php echo $row[0]; ?></option>
<?php

}

?>
</select>
Palabra(s): <input type="text" name="palabra"><br>
<input type="submit" value="Enviar" name="enviar">
</form></p>
</center>

<?

////////////////////////////
// Proceso del Formulario
///////////////////////////

if(isset($_POST['enviar'])) {

// Solo se ejecuta si se ha enviado el formulario

$query "SELECT * from $bd_tabla WHERE {$_POST['campo']} LIKE '%{$_POST['palabra']}%'";

$result mysql_query($query,$link);



$found false// Si el query ha devuelto algo pondrá a true esta variable

while ($row mysql_fetch_array($result)) {

$found true;

echo 
"<p>";

foreach(
$row as $nombre_campo => $valor_campo) {

// Tenemos que mostrar todos los campos de las filas donde se haya
// encontrado la búsqueda.


if(is_int($nombre_campo)) {

continue; 
//Cuando hacemos mysql_fetch_array, php genera un array
// con todos los valores guardados dos veces, uno con
// índice numérico y otro con índice el nombre del campo.
// Solo nos interesa el del nombre del campo.

}

echo 
"<b>".$nombre_campo."</b> : ".$valor_campo."<br>";
}

echo 
"</p>";

}

if(!
$found) {

echo 
"No se encontró la palabra introducida";

}

}
?>

He probado con esta línea:
Código PHP:
if(strlen($query)<=3) {

echo 
"Por favor, introduce algo concreto";

Pero el buscador las ignora. No se si porque no las pongo en el sitio adecuado...
  #2 (permalink)  
Antiguo 20/02/2005, 08:05
 
Fecha de Ingreso: febrero-2005
Mensajes: 670
Antigüedad: 12 años, 10 meses
Puntos: 0
Estoy un poco apurado, pero podrías poner:
Código PHP:
if(isset($_POST['enviar'])) {
if(
strlen($_POST[palabra])<=3) { 
die(
"Por favor, introduce algo concreto");

Suerte
Fede
__________________
Federico H. García
Desarrollo Web
www.federicog.com.ar
  #3 (permalink)  
Antiguo 20/02/2005, 17:00
 
Fecha de Ingreso: octubre-2003
Ubicación: Santander
Mensajes: 236
Antigüedad: 14 años, 2 meses
Puntos: 0
Sólo ponerle comillas a "palabra" y listo. Perfecto Fede.

Muchas gracias :)
  #4 (permalink)  
Antiguo 20/02/2005, 17:46
 
Fecha de Ingreso: octubre-2003
Ubicación: Santander
Mensajes: 236
Antigüedad: 14 años, 2 meses
Puntos: 0
Un detalle: me fijé que el "die" detiene la carga de la página si se da el echo que la haga saltar. Es decir, si alguien mete menos de 3 caracteres en la búsqueda, la carga de la página se queda detenida por lo que se me rompen las tablas que contienen el script php.

¿Hay alguna manera de evitar esto?¿Tal vez con un "if?...
  #5 (permalink)  
Antiguo 20/02/2005, 18:12
Avatar de jpinedo
Colaborador
 
Fecha de Ingreso: septiembre-2003
Ubicación: Lima, Perú
Mensajes: 3.120
Antigüedad: 14 años, 2 meses
Puntos: 41
Simplemente no lo hagas con die()... utiliza un echo().
Código PHP:
if(isset($_POST['enviar'])) {
   if(
strlen($_POST[palabra])<=3) {
      echo 
"Error!. Por favor, introduce más de tres caracteres";
   }else{
      
//Acá todo el resto del código
   
}

Saludos

Última edición por jpinedo; 20/02/2005 a las 18:21
  #6 (permalink)  
Antiguo 20/02/2005, 18:25
 
Fecha de Ingreso: octubre-2003
Ubicación: Santander
Mensajes: 236
Antigüedad: 14 años, 2 meses
Puntos: 0
Perfecto!!!! Muchas gracias a todos, amigos :D
  #7 (permalink)  
Antiguo 23/02/2005, 04:41
 
Fecha de Ingreso: junio-2004
Mensajes: 88
Antigüedad: 13 años, 5 meses
Puntos: 0
duda buscador

Hola! He estado probando este ejemplo para hacer un buscador, pero tengo un problema. La tabla que utilizo tiene un monton de campos, pero quiero que solamente se pueda buscar por 3 de ellos: titulo, autor y descripcion. El problema es que con este buscador me salen todos los campos de la tabla para elegir.
Una vez que se ha efectuado la busqueda, si que me gustaria que ésta fuera un enlace que fuera a otra pagina donde se ampliara la informacion, es decir, que apareciera algun campo mas de la tabla.
Muchas gracias
  #8 (permalink)  
Antiguo 23/02/2005, 07:33
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
Cita:
Iniciado por bonemachine
Hola! He estado probando este ejemplo para hacer un buscador, pero tengo un problema. La tabla que utilizo tiene un monton de campos, pero quiero que solamente se pueda buscar por 3 de ellos: titulo, autor y descripcion. El problema es que con este buscador me salen todos los campos de la tabla para elegir.
Una vez que se ha efectuado la busqueda, si que me gustaria que ésta fuera un enlace que fuera a otra pagina donde se ampliara la informacion, es decir, que apareciera algun campo mas de la tabla.
Muchas gracias
Usa una sentencia SQL tipo:

SELECT * FROM tabla WHERE campo1='$condicion' OR campo2='$condicion' OR campo3='$condicion'

Es cosa de usar SQL simple .. y los operadores lógicos como por ejemplo "OR" para decir .. "donde" (WHERE) campo1 es = condición .. o el campo2 a la condición .. etc ..

Un saludo,
  #9 (permalink)  
Antiguo 23/02/2005, 08:51
 
Fecha de Ingreso: junio-2004
Mensajes: 88
Antigüedad: 13 años, 5 meses
Puntos: 0
Y lo sustituyo aqui???
$result = mysql_query("show fields FROM `$bd_tabla`",$link);

como tendria que ir el formulario???
gracias, pero es que no se nada de esto
  #10 (permalink)  
Antiguo 23/02/2005, 09:08
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
No, .. de esa parte del código (SQL) y su proceso .. debes olvidarte ...

Repasa un manual de PHP y las funciones de mysql para PHP: www.php.net/mysql .. tienes ejemplos en las FAQ's de este foro y en esa página.

Un saludo,
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 14:42.