Autor Tema: Buscador que conecte con la base de datos  (Leído 1211 veces)

Desconectado sebastian8a

  • PHPerit@
  • *
  • Mensajes: 37
  • Karma: 2
  • Aprendiendo
    • Ver Perfil
    • Habbo Toons
Buscador que conecte con la base de datos
« en: 11 de Marzo de 2011, 00:59:38 am »
Hola, los molesto de nuevo, pero de esto no tengo ni idea.

Lo que quiero es crear un buscador, un filtro de búsqueda. Ejemplo la imagen



Y digamos que esta es mi base de datos

 CREATE TABLE `noticias` (
`id` INT auto_increment ,
`autor` VARCHAR( 50 ) NOT NULL DEFAULT 'Sin Autor',
`ciudad` VARCHAR( 50 ) NOT NULL DEFAULT 'Desconocido',
`pais` VARCHAR( 50 ) NOT NULL DEFAULT 'Desconocido',
`mensaje` VARCHAR( 1000 ) NOT NULL DEFAULT 'No Hay Mensaje',
PRIMARY KEY ( `id` )
) ENGINE = MYISAM

y lo que quiero es que me genere resultados en el buscador, digamos que la persona escoja: "Pais: España, Ciudad: Madrid, Autor: Sebastian"

Y que en la página me genere los resultados, es decir las noticias completas que contienen estos datos.

No se si pedí mucho, se los agradezco
Lo que vale es el conocimiento.

Comunidad PHPeros

Buscador que conecte con la base de datos
« en: 11 de Marzo de 2011, 00:59:38 am »

Desconectado Physlet

  • PHPero Experto
  • *****
  • Mensajes: 822
  • Karma: 41
  • Sexo: Masculino
  • Todo es posible con esfuerzo, dedicación e interés
    • Ver Perfil
    • PanamaDev
Re:Buscador que conecte con la base de datos
« Respuesta #1 en: 11 de Marzo de 2011, 03:38:22 am »
Sería realizando consultas con SELECT. ¿Sabes trabajar con las consultas SQL?

Desconectado sebastian8a

  • PHPerit@
  • *
  • Mensajes: 37
  • Karma: 2
  • Aprendiendo
    • Ver Perfil
    • Habbo Toons
Re:Buscador que conecte con la base de datos
« Respuesta #2 en: 11 de Marzo de 2011, 19:13:00 pm »
No la verdad que no sé muy bien.

Depronto sabría el código, pero no donde ponerlo. ni como hacer por medio del formulario se consulten estas.

SELECT autor, ciudad, pais FROM noticias ORDER BY id;

no se si esté bien, pero no sabría donde poner este código, me imagino que se pondría en el resultado y los campos

del formulario tengan los nombres a consultar, pero no sabría bien.
Lo que vale es el conocimiento.

Desconectado Physlet

  • PHPero Experto
  • *****
  • Mensajes: 822
  • Karma: 41
  • Sexo: Masculino
  • Todo es posible con esfuerzo, dedicación e interés
    • Ver Perfil
    • PanamaDev
Re:Buscador que conecte con la base de datos
« Respuesta #3 en: 11 de Marzo de 2011, 19:44:56 pm »
Lo digo porque lo primero que debes hacer para armar ese sistema es conocer las sentencias que necesitas de SQL. Por ejemplo, vas al PHPMyAdmin y realizas búsquedas directamente con las consultas.

Si tu colocas la opción de País como España, deberías hacer una consulta usando la palabra WHERE. Algo como:

SELECT * FROM hola WHERE columna = 'prueba';
« Última modificación: 11 de Marzo de 2011, 19:47:01 pm por Physlet »

Desconectado sebastian8a

  • PHPerit@
  • *
  • Mensajes: 37
  • Karma: 2
  • Aprendiendo
    • Ver Perfil
    • Habbo Toons
Re:Buscador que conecte con la base de datos
« Respuesta #4 en: 11 de Marzo de 2011, 23:42:13 pm »
Actualizado: Probé el código y lo que hace digamos al ponerle la ciudad, me da como resultado
que me imprime todas las respuestas de ciudad, ejemplo busco: Barcelona

y como resultado me da: Ciudad: MadridCiudad: BarcelonaCiudad: MadridCiudad: Madrid
y no importa que busque me las imprime asi, en orden ascendente de 'id'

necesito es que al buscar ciudad, me imprima las noticias que contengas la ciudad buscada.


Bueno digamos no se si me equivoco, pero la podria hacer asi

hago un archivo ejemplo se llame buscar.html donde se incluira el formulario

Código: [Seleccionar]
<form method="post" action="resultado.php">
  <p align="center"><strong>Ciudad</strong></p>
  <p align="center">
    <input type="text" name="ciudad" />
     <input type="submit" value="Buscar" />
    </p>
</form>

Y luego creo el resultado.php, donde generara el resultado

Código: [Seleccionar]
<?php //conexion db y resultado
include("conectar.php");

$ox mysql_query("SELECT * from noticias order by id asc");
while(
$datos mysql_fetch_array($ox)){
echo 
"Ciudad: $datos[ciudad]";
}

?>

Ahi lo que estaré haciendo es buscando las noticias por ciudad.
« Última modificación: 12 de Marzo de 2011, 00:03:12 am por sebastian8a »
Lo que vale es el conocimiento.

Desconectado Physlet

  • PHPero Experto
  • *****
  • Mensajes: 822
  • Karma: 41
  • Sexo: Masculino
  • Todo es posible con esfuerzo, dedicación e interés
    • Ver Perfil
    • PanamaDev
Re:Buscador que conecte con la base de datos
« Respuesta #5 en: 12 de Marzo de 2011, 01:28:31 am »
Bien, ve al phpmyadmin y coloca esta consulta:

SELECT * from noticias order by id asc;

¿Sale exactamente lo que quieres? Me parece que no.

Ahora qué pasaría si dices: "SELECCIONAR TODAS LAS COLUMNAS DE LA TABLA NOTICIAS DONDE CIUDAD SEA BARCELONA"...
Si colocas la consulta te saldrán solo las que tengan como ciudad barcelona, me expliqué? Por eso te comenté sobre el uso de 'WHERE'

Desconectado sebastian8a

  • PHPerit@
  • *
  • Mensajes: 37
  • Karma: 2
  • Aprendiendo
    • Ver Perfil
    • Habbo Toons
Re:Buscador que conecte con la base de datos
« Respuesta #6 en: 12 de Marzo de 2011, 02:54:18 am »
Bueno hice esto

SELECT titulo, autor, habitaciones, ciudad, precio, barrio, area, categoria FROM `noticias` WHERE `ciudad` ORDER BY `id` desc;

Y me sale bien, pero digamos cuando le doy al formulario, por ejemplo barcelona

me aparecen todos los resultados de las ciudades no iguales a barcelona

Quizas el error ya este en el echo. no se
Lo que vale es el conocimiento.

Desconectado Physlet

  • PHPero Experto
  • *****
  • Mensajes: 822
  • Karma: 41
  • Sexo: Masculino
  • Todo es posible con esfuerzo, dedicación e interés
    • Ver Perfil
    • PanamaDev
Re:Buscador que conecte con la base de datos
« Respuesta #7 en: 12 de Marzo de 2011, 03:19:53 am »
WHERE ciudad = 'Barcelona'

Desconectado sebastian8a

  • PHPerit@
  • *
  • Mensajes: 37
  • Karma: 2
  • Aprendiendo
    • Ver Perfil
    • Habbo Toons
Re:Buscador que conecte con la base de datos
« Respuesta #8 en: 12 de Marzo de 2011, 04:14:09 am »
Gracias Phylest me sirvió mucho la ayuda.

Ahi poco a poco aprendo mas cosas.

Saludos, creo q puedo dar mi primer karma.
Lo que vale es el conocimiento.

Desconectado sebastian8a

  • PHPerit@
  • *
  • Mensajes: 37
  • Karma: 2
  • Aprendiendo
    • Ver Perfil
    • Habbo Toons
Re:Buscador que conecte con la base de datos
« Respuesta #9 en: 13 de Marzo de 2011, 00:10:14 am »
Hola, para no crear un nuevo tema, seguire aqui con otra duda, respecto a este buscador.

Ya me sale lo que busco, digamos en este caso busque por ejemplo la ciudad Armenia y me salen los resultados que contienen la ciudad de Armenia, OK todo bien hasta ahi.



Lo que necesito es unir como se muestra en esta imagen, digamos crear un filtro mas grande, poner digamos ciudad Armenia y Tipo: Apartamento, lo que me de como resultado las noticias que contengan, Armenia y Apartamento.



No se si me podrian ayudar x ahi. y perdon la molestia si algo.

Lo que vale es el conocimiento.

Desconectado Physlet

  • PHPero Experto
  • *****
  • Mensajes: 822
  • Karma: 41
  • Sexo: Masculino
  • Todo es posible con esfuerzo, dedicación e interés
    • Ver Perfil
    • PanamaDev
Re:Buscador que conecte con la base de datos
« Respuesta #10 en: 13 de Marzo de 2011, 00:15:45 am »
La sentencia WHERE también permite usar operadores lógicos AND, OR.
Sería algo como:

WHERE ciudad = 'Armenia' AND tipo = 'Apartamento'

O sea:

DONDE CIUDAD SEA 'ARMENIA' Y TIPO SEA 'APARTAMENTO'

:P

Desconectado sebastian8a

  • PHPerit@
  • *
  • Mensajes: 37
  • Karma: 2
  • Aprendiendo
    • Ver Perfil
    • Habbo Toons
Re:Buscador que conecte con la base de datos
« Respuesta #11 en: 13 de Marzo de 2011, 01:14:03 am »
Código: [Seleccionar]
  <?
if ($_POST['buscador'])
{
// Tomamos el valor ingresado
$buscar = $_POST['palabra'];

// Si está vacío, lo informamos, sino realizamos la búsqueda
if(empty($buscar))
{
echo "No se ha ingresado una cadena a buscar";
}else{
// Conexión a la base de datos y seleccion de registros
$con=mysql_connect("localhost","inmobili_noti","sebas56A");
$sql = "SELECT * FROM noticias WHERE ciudad like '%$buscar%' ORDER BY id DESC";
mysql_select_db("inmobili_news", $con);

$result = mysql_query($sql, $con);

// Tomamos el total de los resultados
$total = mysql_num_rows($result);

// Imprimimos los resultados
if ($row = mysql_fetch_array($result)){
echo "Resultados para: <b>$buscar</b>";
do {
?>

//esto es el resultado con el link a la noticia
<p align="center"><b><a href="notis.php?titulo=<?=$row['titulo'];?>"><?=$row['titulo'];?></a>


Y ps tengo formulario

<form action="buscar.php" method="post">
<div align="center">Buscar:
</div>
<label>
<div align="center">
  <select name="palabra">
    <option>Pereira/Dosq</option>
    <option>Armenia</option>
  </select>
</div>
</label>
<div align="center">
  <input type="submit" name="buscador" value="Buscar">
</div>
</form>

y ps ya esto de cuantos resultados

Código: [Seleccionar]
<?
} while ($row = mysql_fetch_array($result));
echo "<p>Resultados: $total</p>";
} else {
// En caso de no encontrar resultados
echo "No se encontraron resultados para: <b>$buscar</b>";
}
}
}
?>

Todo esto esta en el buscar.php

intente lo de AND y no em genera el resultado, creo qye es x como esta el buscador :S
Lo que vale es el conocimiento.

Desconectado TwK

  • PHPerit@
  • *
  • Mensajes: 34
  • Karma: 0
  • Nuev@ PHPer@
    • Ver Perfil
Re:Buscador que conecte con la base de datos
« Respuesta #12 en: 13 de Marzo de 2011, 06:59:44 am »
Te edité el código para que tengas el formulario en un sólo archivo, sin tantos preámbulos.

Código: [Seleccionar]
<form action="http://<?php echo $_SERVER[&#39;HTTP_HOST&#39;] . dirname ( $_SERVER[&#39;PHP_SELF&#39;] ) ?>/buscar.php" method="post">
                <div align="center">
                  <input style="width: 400px;"name="q" type="text" id="q"/>
                  <input name="buscador" type="submit" class="submit" id="buscar" value="buscar" />
                </div>
              </form>
              <p>
  <?php
if ($_POST[&#39;buscador&#39;])

$buscar $_POST[&#39;q&#39;];
if(empty($buscar))
{
echo 
"El campo de búsqueda fué dejado en blanco.";
}else{
$conexion=mysql_connect("localhost","usuario","clave");
$sql "SELECT * FROM Noticias WHERE ciudad=&#39;Armenia&#39; and tipo=&#39;Apartamento&#39; like &#39;%$buscar%&#39; ORDER BY id DESC";
mysql_select_db("base"$conexion); 

$resultados mysql_query($sql$conexion); 
$total mysql_num_rows($resultados);

if (
$datos mysql_fetch_array($resultados)){ 
echo 
"Se encontraron $total guías para <b>$buscar</b>";
do { 
?>

<p><b><a href="<?=$datos['ayudaid'];?>"><?=$datos['titulo'];?></a></b></p>
<?
} while ($datos = mysql_fetch_array($resultados));
echo "<p>Resultados: $total</p>";
} else {
// En caso de no encontrar resultados
echo "No se encontrar resultados para: <b>$buscar</b>";
}
}
}
?></p>



« Última modificación: 13 de Marzo de 2011, 07:01:58 am por TwK »

Desconectado sebastian8a

  • PHPerit@
  • *
  • Mensajes: 37
  • Karma: 2
  • Aprendiendo
    • Ver Perfil
    • Habbo Toons
Re:Buscador que conecte con la base de datos
« Respuesta #13 en: 13 de Marzo de 2011, 19:16:04 pm »
Actualizo2= Muchas gracias por ahora creo que todo solucionado. les agradezco de antemano por la ayuda prestada, muchas gracias.

Actualizo: Bueno digamos hice esto:

"SELECT * FROM noticias WHERE ciudad like '%$buscar%' AND categoria = 'Casa' ORDER BY id DESC";

O sea que puedo decidir la ciudad, donde seria $buscar = $_POST['palabra']; que esta en el formulario, y me salen solo los de casa, pero como hago para reemplazar categoria = 'Casa', por ejemplo x categoria = '%$buscar2%' seguire intentando.


Bueno yo entiendo eso, pero digamos en esta parte, donde dice WHERE ciudad= acá donde dice Armenia, quiero que diga digamos '%buscar%' AND tipo= '%buscar2%' like bueno eso, o sea no poner específicamente Apartamento ni Armenia, si no darle la posibilidad al usuario de escoger la opción, que escoja Casa en vez de Apartamento y se ponga automáticamente. no se si me he hecho entender.

Código: [Seleccionar]
<?php
if ($_POST[&#39;buscador&#39;])

$buscar $_POST[&#39;q&#39;];
if(empty($buscar))
{
echo 
"El campo de búsqueda fué dejado en blanco.";
}else{
$conexion=mysql_connect("localhost","usuario","clave");
$sql "SELECT * FROM Noticias WHERE ciudad=&#39;Armenia&#39; and tipo=&#39;Apartamento&#39; like &#39;%$buscar%&#39; ORDER BY id DESC";
mysql_select_db("base"$conexion);

Digamos este es el formulario que tengo

<form action="buscar.php" method="post">
Buscar:
</div>
<label>
<div align="center">
  <select name="palabra ó q como pusiste">
    <option>Pereira/Dosq</option>
    <option>Armenia</option>
    <option>Manizales</option>
  </select>
</div>
</label>
  <input type="submit" name="buscador" value="Buscar">
</div>
</form>

Y éste es el 2 campo para escoger

<select name="tipo">
      <option>Apartamento</option>
      <option>Casa</option>
    </select>

Ok bueno lo que quiero es que al hacer la consulta, me busque por ejemplo ciudad = 'Armenia' AND tipo = Casa o lo que yo quiera buscar y que el resultado me combine las respuestas y solo me de las respuestas que contengan Casa y Armenia.
« Última modificación: 13 de Marzo de 2011, 19:38:12 pm por sebastian8a »
Lo que vale es el conocimiento.

Desconectado sgq995

  • PHPerit@
  • *
  • Mensajes: 4
  • Karma: 0
  • Nuev@ PHPer@
    • Ver Perfil
Re:Buscador que conecte con la base de datos
« Respuesta #14 en: 20 de Marzo de 2011, 15:42:22 pm »
Código:
Código: [Seleccionar]
$autor = striptags(trim($_POST['autor']));
$ciudad = striptags(trim($_POST['ciudad']));
$pais = striptags(trim($_POST['pais']));

if(!empty($autor)) { $where = 'Where autor = "' . $autor . '"'; }
if(!empty($ciudad)) { if(!emtpy($where)){ $where .= ' Where ciudad = "' . $ciudad . '"'; }else{ $where = 'Where ciudad = "' . $ciudad . '"'; } }
if(!empty($pais)) { if(!emtpy($where)){ $where .= ' Where pais = "' . $pais . '"'; }else{ $where = 'Where pais = "' . $pais . '"'; } }

$query = mysql_query('Select * From noticias ' . $where);
while($row = mysql_fetch_array){
$html = '<b>';
$html .= $row['autor'];
$html .= '</b>&nbsp;(' . $row['ciudad'] . ' de ' . $row['pais'] . ')<br />';
$html .= '<p>';
$html .= $row['mensaje'];
$html .= '</p>';

echo $html;
}

Ese seria mas o menos el código, si pusieras un campo <input type="text" /> seria buscado en mensajes con %% así como dijo sebastian8a