Foros del Web » Programando para Internet » PHP »

Buscador Php + Mysql varios campos

Estas en el tema de Buscador Php + Mysql varios campos en el foro de PHP en Foros del Web. Hola a todos, hace tiempo que me registre pero no he podido usar el otro perfil, asi que me registre de nuevo. El tema es ...
  #1 (permalink)  
Antiguo 16/06/2011, 14:14
 
Fecha de Ingreso: junio-2011
Mensajes: 5
Antigüedad: 8 años, 5 meses
Puntos: 0
Buscador Php + Mysql varios campos

Hola a todos, hace tiempo que me registre pero no he podido usar el otro perfil, asi que me registre de nuevo.
El tema es que estoy haciendo un buscador en php con mysql y llevo DIAS buscando informacion (tanto en google como en este foro) y probando algunos ejemplos. Encontre uno que funciona correctamente pero necesitaria modificarlo....

Mi base de datos tiene una tabla que es "empresas", y dentro hay varios campos: Nombre, provincia, etc...

Resulta que este buscador que encontre tiene una lista desplegable donde salen todos los campos de la base de datos.
Lo que me gustaria es poder crear varios "forms" (diria que se llaman asi,, perdon) donde pudiese indicar varios parametros de busqueda (ahora solo puedo indicar uno).
De este modo poder introducir distintas opciones en la busqueda y asi hacerla mas precisa (poder indicar la provincia, nombre de la empresa, comentarios, etc..)

Sinceramente de programacion se poco y de PHP menos asi que perdonad de antemano!

Aqui esta el codigo, es un php llamado busqueda y en la misma aparecen los resultados directamente.

Código:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<title>Untitled Document</title>

</head>

<body>
<?
//Archivo: busqueda.php
$bd_servidor = "localhost";

$bd_usuario = "root";

$bd_contrasenya = "root";

$bd_bdname = "buscador";

$bd_tabla = "empresas"; // 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>
<p><img src="seccionenconstruccion.gif" width="300" height="18" />
<h2>&nbsp;</h2>
<h2>Introduzca la palabra a buscar</h2>
<p>&nbsp;</p>
<p><form name="buscador" method="post" action="busqueda.php">
<p><br>
Elija Campo 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 Ingresada: 
<input type="text" name="palabra">
</p>
<p><br>
<input type="submit" value="Buscar" name="buscar">
</p>
</form></p>
</center>
<?

if(isset($_POST['buscar'])) {
// 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";
}
}
?>
</body>
</html>
Gracias!!!
  #2 (permalink)  
Antiguo 16/06/2011, 14:45
Avatar de xtimed  
Fecha de Ingreso: julio-2009
Ubicación: BCN - México
Mensajes: 226
Antigüedad: 10 años, 3 meses
Puntos: 41
Respuesta: Buscador Php + Mysql varios campos

creo que tendrias que poner la consulta de esta manera:

Código PHP:
$query "SELECT * from $bd_tabla WHERE `{$_POST['campo1']}` LIKE '%{$_POST['palabra1']}%' AND `{$_POST['campo2']}` LIKE '%{$_POST['palabra2']}%' AND `{$_POST['campo3']}` LIKE '%{$_POST['palabra3']}%'"
Ya seria cuestion de que le envies los parametros
  #3 (permalink)  
Antiguo 16/06/2011, 15:18
 
Fecha de Ingreso: junio-2011
Mensajes: 5
Antigüedad: 8 años, 5 meses
Puntos: 0
Respuesta: Buscador Php + Mysql varios campos

Hola! gracias por responder!

Pero primero deberia añadir una form para cada campo, no? (Nombre, Provincia, etc..) y luego vincularlo con la base de datos al realizar la busqueda, o estoy equivocado?

Como dije no tengo muchos conocimientos de PHP y programacion, jejej


Un saludo!
  #4 (permalink)  
Antiguo 16/06/2011, 15:31
 
Fecha de Ingreso: junio-2011
Mensajes: 5
Antigüedad: 8 años, 5 meses
Puntos: 0
Respuesta: Buscador Php + Mysql varios campos

Vale, ya he adaptado el codigo que me has pasado y ahora si hace la busqueda para cada campo!

Voy a seguir haciendo pruebas!

Muuuchas gracias xtimed!
  #5 (permalink)  
Antiguo 17/06/2011, 06:14
 
Fecha de Ingreso: junio-2011
Mensajes: 5
Antigüedad: 8 años, 5 meses
Puntos: 0
Respuesta: Buscador Php + Mysql varios campos

Buenas tardes!

Una ultima consulta:

Como lo hago para que los resultados queden dentro de una tabla y poder darle formato a los resultados (tipografia, colores, tablas, etc..)

Gracias!

Última edición por KRAM4321; 17/06/2011 a las 09:35
  #6 (permalink)  
Antiguo 17/06/2011, 10:17
Avatar de xtimed  
Fecha de Ingreso: julio-2009
Ubicación: BCN - México
Mensajes: 226
Antigüedad: 10 años, 3 meses
Puntos: 41
Respuesta: Buscador Php + Mysql varios campos

Solamente imprime los valores dentro de la tabla por ejemplo:
Código PHP:
echo "<table>";
while(
$row mysql_fetch_array($result))
{
  echo 
"<tr><td>";
  echo 
$row['campodelatabla'];
  echo 
"</td></tr>";
}
echo 
"</table>"
Y ya tu le das formato a la tabla, adaptalo a tus necesidades
  #7 (permalink)  
Antiguo 20/06/2011, 08:18
 
Fecha de Ingreso: junio-2011
Mensajes: 5
Antigüedad: 8 años, 5 meses
Puntos: 0
Respuesta: Buscador Php + Mysql varios campos

Perdon por la demora!

Cuando lei tu respuesta ya habia encontrado una solucion, pero la verdad es que despues probe la tuya y me gusto mas, asi que te doy las gracias, me has ayudado muchooo!!!!

Un saludo!
  #8 (permalink)  
Antiguo 13/03/2012, 07:04
 
Fecha de Ingreso: marzo-2012
Mensajes: 1
Antigüedad: 7 años, 8 meses
Puntos: 0
Respuesta: Buscador Php + Mysql varios campos

Hola podrias poner el codigo que utilizaste para buscar por varios campos, es que yo tengo ese mismo codigo que tienes tu para buscar por un campo solo y no consigo hacer que aparezcan varios campos para buscar.
Muchas gracias.

El codigo que tengo es este.

Código PHP:
<?

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

$bd_servidor "d778.dinaserver.com";


$bd_usuario "simplemente";


$bd_contrasenya "australia";


$bd_bdname "camvue";


$bd_tabla "hoja1"// 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="Buscar" 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";

 }

}
 
?>


y lo que me sale es una lista desplegable para seleccionar un campo y buscar por ese campo, yo lo que quiero es que me aparezcan todos los campos y buscar por uno o por varios.
Muchas gracias

Última edición por ivancallejo; 13/03/2012 a las 07:16

Etiquetas: campos, mysql, buscadores
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

SíEste tema le ha gustado a 3 personas




La zona horaria es GMT -6. Ahora son las 12:54.