Foros del Web » Programando para Internet » PHP »

AYUDA: buscar cadena de texto

Estas en el tema de AYUDA: buscar cadena de texto en el foro de PHP en Foros del Web. Hola a todos: Lo primero que he de decir es que hace poco que me he metido en el fascinante mundo del php y del ...
  #1 (permalink)  
Antiguo 08/12/2010, 11:18
 
Fecha de Ingreso: diciembre-2010
Mensajes: 3
Antigüedad: 13 años, 4 meses
Puntos: 0
AYUDA: buscar cadena de texto

Hola a todos:
Lo primero que he de decir es que hace poco que me he metido en el fascinante mundo del php y del mysql, por lo que muchas cosas me suenan a chino, aunque poco a poco voy entendiendo algo, a traves de libros, foros, y dar veinte mil vueltas.
El tema es que he creado un formulario para que me devuelva datos de una base de datos, dependiendo si selecciono uno o varios campos de consulta, tanto tipo select como text.
Copiando código de aki y de allá conseguí que me devuelva resultados, pero tengo problemas con los campos text, ya que estos campos me devuelven resultado si el campo coincide exactamente con el campo de búsqueda, ejemplo, si en el campo de busqueda pongo "casa" solo me devuelve resultado si en el campo de la base de datos solo pone "casa" si pone "casa de campo" lo ignora y no me devuelve nada.
He dado mil vueltas y no consido dar con la solución, os estaria muy agradecido si alguien me pudiera ayudar.
Un saludo.
Este es el código del archivo que procesa el formulario de consulta.

<?php
$link=mysql_connect("localhost", "root", "");
mysql_select_db("bd",$link) OR DIE ("Error: Imposible Conectar");
$año = (!empty($_POST["año"])
? " año='".trim($_POST["año"])."'" : "");
$departamento = (!empty($_POST["departamento"])
? (!empty($año)
? " AND departamento='".trim($_POST["departamento"])."'" : " departamento='".trim($_POST["departamento"])."'") : "");
$denominacion = (!empty($_POST[$denominacion])
? (!empty($año) || !empty($departamento)
? " AND denominacion='".trim($_POST["denominacion"])."'" : " denominacion='".trim($_POST["denominacion"])."'") : "");
$documento = (!empty($_POST["documento"])
? (!empty($año) || !empty($departamento) || !empty($denominacion)
? " AND documento='".trim($_POST["documento"])."'" : " documento='".trim($_POST["documento"])."'") : "");
$expediente = (!empty($_POST["expediente"])
? (!empty($año) || !empty($departamento) || !empty($denominacion) || !empty($expediente)
? " AND expediente='".trim($_POST["expediente"])."'" : " expediente='".trim($_POST["expediente"])."'") : "");
$where = (!empty($año) || !empty($departamento) || !empty($denominacion) || !empty($documento) || !empty($expediente)
? " WHERE " : "");
$s = "SELECT * FROM informes "
. $where
. $año
. $departamento
. $denominacion
. $documento
. $expediente;
$query = mysql_query($s) or die(mysql_error());
$num_informes = mysql_num_rows($query);
?>
<center>
<TABLE BGCOLOR="white" BORDER=1 CELLSPACING=1 CELLPADDING=1>
<TR>
<TD width="120">&nbsp;<B>INFORME</B></TD>
<TD width="47">&nbsp;<B>AÑO</B>&nbsp;</TD>
<TD width="135">&nbsp;<B>DEPARTAMENTO</B>&nbsp;</TD>
<TD width="212">&nbsp;<B>DENOMINACION</B>&nbsp;</TD>
<TD width="121">&nbsp;<B>FECHA</B>&nbsp;</TD>
<TD width=107>&nbsp;<B>DOCUMENTO</B>&nbsp;</TD>
<TD width="84">&nbsp;<B>EXPEDIENTE</B>&nbsp;</TD>
</TR>
</center>
<?php
while($row = mysql_fetch_array($query)){
echo '<tr width="100%">';
echo '<td>' . stripslashes($row['id_informe']).'</td>';
echo '<td>' . stripslashes($row['año']).'</td>';
echo '<td>' . stripslashes($row['departamento']).'</td>';
echo '<td>' . stripslashes($row['denominacion']).'</td>';
echo '<td>' . stripslashes($row['fecha']).'</td>';
echo '<td>' . stripslashes($row['documento']).'</td>';
echo '<td>' . stripslashes($row['expediente']).'</td>';
echo '</tr>';
}
?>
<p>Informes: <?php echo $num_informes; ?></p>
</TABLE>
  #2 (permalink)  
Antiguo 08/12/2010, 11:29
 
Fecha de Ingreso: diciembre-2010
Ubicación: Rosario, Santa Fe
Mensajes: 326
Antigüedad: 13 años, 4 meses
Puntos: 13
Respuesta: AYUDA: buscar cadena de texto

Soy medio vago así que los textos largos me impactan un poco pero la respuesta es simple, tenes que usar el operador LIKE de SQL en vez de comparar las cadenas con =, seria algo así:

Código PHP:
$departamento = (!empty($_POST["departamento"])
? (!empty(
$año)
" AND departamento LIKE '".trim($_POST["departamento"])."'" " departamento='".trim($_POST["departamento"])."'") : ""); 
Y para que no sea palabra completa agregamos el operador % quedando finalmente así:


Código PHP:
$departamento = (!empty($_POST["departamento"])
? (!empty(
$año)
" AND departamento LIKE '%".trim($_POST["departamento"])."%'" " departamento='".trim($_POST["departamento"])."'") : ""); 

Creo que con eso deberías poder arreglar tu consulta.


Por último, no copies y peges código ajeno. . Leelo, ENTENDELO y haz el tuyo aunque quede igual. Así se aprende mucho más.
  #3 (permalink)  
Antiguo 08/12/2010, 11:32
 
Fecha de Ingreso: diciembre-2010
Ubicación: Rosario, Santa Fe
Mensajes: 326
Antigüedad: 13 años, 4 meses
Puntos: 13
Respuesta: AYUDA: buscar cadena de texto

Por último agrego algo que en este caso no creo que te haga falta que es el tema de campos FULLTEXT. Es algo más complicado que el operador LIKE pero con mejores resultados en las búsquedas. Así que te recomiendo luego pegarle una mirada.
  #4 (permalink)  
Antiguo 12/12/2010, 16:33
 
Fecha de Ingreso: diciembre-2010
Mensajes: 3
Antigüedad: 13 años, 4 meses
Puntos: 0
Respuesta: AYUDA: buscar cadena de texto

Gracias por la información, me fue muy útil.
Tengo un par de consultas por si me puedes ayudar, ya para terminar mi proyecto.
Me gustaría paginar los resultados de las consultas, he estado mirando ejemplos pero no consigo aplicarlos, ya que todos los que he visto lo hacen sobre una consulta simple tipo SELECT * FROM tabla;
Si me pudieras ayudar en esto te lo agradecería, a lo mejor hay otra forma más sencilla de hacer mi consulta para poder aplicar los ejemplos de paginación o poder adaptar un ejemplo de paginación a esta consulta.
Y otra cosilla, que me imagino que será algún error de configuración, cuando hago los ejemplos de un libro que tengo, me da error dependiendo del tipo de comillas que ponga, si sigo las del ejemplo que son simples echo 'hola', me da error, tengo que poner comillas dobles para que no de error. ¿a que puede deberse?
Gracias de antemano.
  #5 (permalink)  
Antiguo 12/12/2010, 18:04
 
Fecha de Ingreso: diciembre-2010
Ubicación: Rosario, Santa Fe
Mensajes: 326
Antigüedad: 13 años, 4 meses
Puntos: 13
Respuesta: AYUDA: buscar cadena de texto

El tema de la paginación es simple, al final de la consulta tenes que poner LIMIT inicio,cantidad
Aunque solo se aplica para las cosultas SELECT.
Acá tenes detallados todos los modificadores y parámetro que podes aplicarle a un select con sus ejemplos y explicaciones.
http://dev.mysql.com/doc/refman/5.0/es/select.html

El tema de las comillas, cuando pones comillas simples el texto se toma como una constante, sin evaluar que se encuentra dentro, mientras que si son dobles evalua si tiene dentro variables o caracteres especiales como \n.
Si me pones el código que falla tal vez de pueda decir bien cual es el error, porque no creo que sean las comillas, tal vez como tiene comillas dentro por eso se produce el error.
  #6 (permalink)  
Antiguo 13/12/2010, 13:07
 
Fecha de Ingreso: diciembre-2010
Mensajes: 3
Antigüedad: 13 años, 4 meses
Puntos: 0
Respuesta: AYUDA: buscar cadena de texto

Lo de limit ya lo habia visto, pero no se como hacerle que salte a los siguientes registros de la consulta, le tengo puesto limit 0,5 pero no se como hacerle para que me de la opción de que me muestre los cinco siguiente y así sucesivamente.
Gracias.
  #7 (permalink)  
Antiguo 13/12/2010, 15:47
 
Fecha de Ingreso: diciembre-2010
Ubicación: Rosario, Santa Fe
Mensajes: 326
Antigüedad: 13 años, 4 meses
Puntos: 13
Respuesta: AYUDA: buscar cadena de texto

Acá tenés un ejemplo de paginación.
http://www.desarrolloweb.com/articulos/1035.php

Espero que te sea de utilidad.

Etiquetas: cadenas
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 21:13.