Foros del Web » Programando para Internet » PHP »

Buscar y reemplazar

Estas en el tema de Buscar y reemplazar en el foro de PHP en Foros del Web. Buenas, Estoy intentando buscar en una variable de texto una serie de palabras y luego resaltar esas palabras en algún color. Código PHP: $desarrollo = ...
  #1 (permalink)  
Antiguo 28/09/2011, 09:24
 
Fecha de Ingreso: abril-2009
Mensajes: 19
Antigüedad: 15 años
Puntos: 0
Buscar y reemplazar

Buenas,

Estoy intentando buscar en una variable de texto una serie de palabras y luego resaltar esas palabras en algún color.

Código PHP:

$desarrollo
=nl2br($datos['Desarrollo']);

$sql=mysql_query("SELECT NombreConcepto, ID FROM conceptos");

while(
$mostrar=mysql_fetch_array($sql))
{
    
$concepto=$mostrar['NombreConcepto'];
    
$cambiar="<a href='ver.php?tipo=concepto&id=".$mostrar['ID']."' style='color: #ff0000'>".$mostrar['NombreConcepto']."</a>";
    
    
$buscar=str_replace($concepto$cambiar$desarrollo);    
    
    
}

echo 
$buscar
Ahora bien, el problema viene que si recorro $mostrar con un WHILE y hago el echo dentro me duplica el texto tantas veces como numero de registros devuelve la consulta como es lógico.

También ahora mismo ese código solo me marca el último concepto que ha recogido de la tabla, es decir, esta machando con los registros uno encimad el otro.

Después de varias horas con ello y de probar mil cosas me he rendido, ¿alguna idea?

Mil gracias.
  #2 (permalink)  
Antiguo 28/09/2011, 09:33
Avatar de andresdzphp
Colaborador
 
Fecha de Ingreso: julio-2011
Ubicación: $this->Colombia;
Mensajes: 2.749
Antigüedad: 12 años, 9 meses
Puntos: 793
Respuesta: Buscar y reemplazar

El problema de que te esté machacando es porque debes imprimir dentro del while. Si imprimes por fuera, la variable $buscar siempre va a tener el contenido del último registro.
__________________
Si sabemos como leer e interpretar el manual será mucho más fácil aprender PHP. En lugar de confiar en ejemplos o copiar y pegar - PHP
  #3 (permalink)  
Antiguo 28/09/2011, 09:37
Avatar de kaninox  
Fecha de Ingreso: septiembre-2005
Ubicación: In my House
Mensajes: 3.597
Antigüedad: 18 años, 7 meses
Puntos: 49
Respuesta: Buscar y reemplazar

yo lo haria con una funcion por ejemplo...
Código PHP:
Ver original
  1. function cambiamos($texto){
  2. $txt = $texto;
  3. $txt = str_replace("desarrollo","<b>Desarrollo</b>",$txt);
  4. return $txt;
  5. }
  6.  
  7. //tu consulta
  8.  
  9. $sql=mysql_query("SELECT NombreConcepto, ID FROM conceptos");
  10.  
  11. while($mostrar=mysql_fetch_array($sql))
  12. {
  13. echo cambiamos("$mostrar[NombreConcepto]");
  14. }

y donde encuentre esa palabra la marcaría en negrita.
__________________
Gokuh Salvo al mundo. PUNTO!!!!
  #4 (permalink)  
Antiguo 28/09/2011, 09:38
 
Fecha de Ingreso: abril-2009
Mensajes: 19
Antigüedad: 15 años
Puntos: 0
Respuesta: Buscar y reemplazar

Pero si imprimo dentro del while me duplica el texto tantas veces como registros ha sacado de la consulta.
  #5 (permalink)  
Antiguo 28/09/2011, 09:39
 
Fecha de Ingreso: abril-2009
Mensajes: 19
Antigüedad: 15 años
Puntos: 0
Respuesta: Buscar y reemplazar

Cita:
Iniciado por andresdzphp Ver Mensaje
El problema de que te esté machacando es porque debes imprimir dentro del while. Si imprimes por fuera, la variable $buscar siempre va a tener el contenido del último registro.
Pero si imprimo dentro del while me duplica el texto tantas veces como registros ha sacado de la consulta.
  #6 (permalink)  
Antiguo 28/09/2011, 09:43
Avatar de kaninox  
Fecha de Ingreso: septiembre-2005
Ubicación: In my House
Mensajes: 3.597
Antigüedad: 18 años, 7 meses
Puntos: 49
Respuesta: Buscar y reemplazar

Cita:
Iniciado por ivankmx Ver Mensaje
Buenas,

Estoy intentando buscar en una variable de texto una serie de palabras y luego resaltar esas palabras en algún color.
Con eso y con lo que te di deberia funcionar, además lo que te dice andresdzphp es correcto si imprimes la variable fuera de un ciclo solo mostrara la última de todo el ciclo, con esto no entiendo si quieres pintar o quieres el numero de veces que salio la variable o letras o palabras?
__________________
Gokuh Salvo al mundo. PUNTO!!!!
  #7 (permalink)  
Antiguo 28/09/2011, 09:43
Avatar de andresdzphp
Colaborador
 
Fecha de Ingreso: julio-2011
Ubicación: $this->Colombia;
Mensajes: 2.749
Antigüedad: 12 años, 9 meses
Puntos: 793
Respuesta: Buscar y reemplazar

Tendrás que poner una condición para saber que registros reemplazar y mostrar. Todo desde el while. Tal vez agregando a un array todos los resultados para mostrarlos despues $arr[] = $valor. Porque no explicas un poco más que quieres hacer. Saludos.
__________________
Si sabemos como leer e interpretar el manual será mucho más fácil aprender PHP. En lugar de confiar en ejemplos o copiar y pegar - PHP
  #8 (permalink)  
Antiguo 28/09/2011, 09:47
 
Fecha de Ingreso: abril-2009
Mensajes: 19
Antigüedad: 15 años
Puntos: 0
Respuesta: Buscar y reemplazar

Antes de nada gracias a los dos por las rápidas respuestas.

Os comento, yo tengo una serie de conceptos en una tabla y luego un texto en otro campo de una tabla.

Saco el campo texto de la base de datos $mostrar['Desarrollo'].

Luego hago la consulta sql y cargo TODOS los conceptos de la tabla CONCEPTOS, es decir, sería un array.

Luego lo que quiero es buscar los conceptos que tengo en la tabla conceptos y buscarlos en el texto, una vez los ha encontrado ponerlo en negrita.

Un saludo.
  #9 (permalink)  
Antiguo 28/09/2011, 12:45
Avatar de kaninox  
Fecha de Ingreso: septiembre-2005
Ubicación: In my House
Mensajes: 3.597
Antigüedad: 18 años, 7 meses
Puntos: 49
Respuesta: Buscar y reemplazar

pues con la funcion que te di estas mas que sobrado para hacer eso, solo tendrías que adaptarla a tu consulta por decir algo como :

Código PHP:
Ver original
  1. $datobasedatos = $row[campoobtenido];
  2. $txt = str_replace("$datobasedatos","<b>$datobasedatos</b>",$txt);

con eso cambia todo lo que sea igual a negrita o al color que desees pues incluir hasta una hoja de estilos que por id o numero de letras etc...

Saludos
__________________
Gokuh Salvo al mundo. PUNTO!!!!
  #10 (permalink)  
Antiguo 30/09/2011, 04:05
 
Fecha de Ingreso: abril-2009
Mensajes: 19
Antigüedad: 15 años
Puntos: 0
Respuesta: Buscar y reemplazar

Buenas,

Si hago esto:

Código PHP:
$sql=mysql_query("SELECT NombreConcepto FROM conceptos");

while(
$mostrar=mysql_fetch_array($sql))
{
    
$concepto="/\b".$mostrar['NombreConcepto']."(s)?\b/i";
    
    
$cambiar="<strong>".$mostrar['NombreConcepto']."</strong>";
    
    
$resultado=preg_replace("$concepto""$cambiar"$texto);    
}

echo 
$resultado
En $resultado como es lógico me va machacando el último concepto que va leyendo el while.

Es decir, tengo 48 conceptos en la base de datos, luego quiero que se lea una cadena y si en la cadena aparece uno de esos conceptos quiero marcarlos en negrita.

Esto me está volviendo loco, seguramente tenga la solución en la punta de mis narices pero no consigo verlo.

Mil gracias.
  #11 (permalink)  
Antiguo 30/09/2011, 05:10
 
Fecha de Ingreso: abril-2009
Mensajes: 19
Antigüedad: 15 años
Puntos: 0
Respuesta: Buscar y reemplazar

Lo he solucionado, pego aquí la solución por si alguien se encuentra con la misma situación.

LEER TEXTO Y RESALTAR PALABRAS CLAVE

Código PHP:

$sql
=mysql_query("SELECT NombreConcepto FROM conceptos"); //Realizamos la consulta a la Base de Datos.

$i=0//Iniciamos el valor $i a 0.

while($mostrar=mysql_fetch_array($sql))
{
    
$conceptos[$i] = $mostrar2['NombreConcepto']; //Vamos generando el array de forma automática y guardamos los valores que vaya devolviendo la base de datos.

    
$cambiar[$i] = "<a href='ver.php?tipo=concepto&id=".$mostrar['ID']."' style='color: #ff0000'>".$mostrar['NombreConcepto']."</a>";    //Texto que queremos sustituir, en mi caso era añadir un enlace.
    
$i++; //Avanzamos $i una posición.
}

echo 
str_replace($conceptos$cambiar$desarrollo); //Sustituimos con la funcion str_replace 
Un saludo.
  #12 (permalink)  
Antiguo 06/10/2011, 01:56
 
Fecha de Ingreso: abril-2009
Mensajes: 19
Antigüedad: 15 años
Puntos: 0
Respuesta: Buscar y reemplazar

Reactivo el tema porque me acabo de encontrar con un error inesperado.

El código me funcionaba correctamente, e incluso en localhost me sigue funcionando bien:

Código PHP:
$introduccion=nl2br($datos['Introduccion']);

$sql2=mysql_query("SELECT ID, NombreConcepto FROM conceptos");

$i=0;

while(
$mostrar2=mysql_fetch_array($sql2))
{
    
    
$palabra=$mostrar2['NombreConcepto'];
    
$conceptos[$i] = "/\b$palabra(s)?\b/i";
    
$cambiar[$i] = "<a href='ver.php?tipo=concepto&id=".$mostrar2['ID']."' style='color: #ff0000'>".$mostrar2['NombreConcepto']."</a>";    
    
$i++;
}

echo 
preg_replace($conceptos$cambiar$introduccion); 
Pero en mi servidor web, me sale lo siguiente:

es la compañía que analiza la <a href="ver.php?tipo=concepto&id=2011C005">informaci ón financieraa> (y no financiera) de una empresa o institución para emitir opiniones o calificaciones sobre productos financieros (instrumentos de <a href="ver.php?tipo=concepto&id=2011C000">deudaa>



Como bien indico, en localhost me marca en color rojo y hace el enlace sobre las palabras que quiero, ahora bien, al subirlo a mi servidor web me está escribiendo el código html... ¿Quizás se me haya colado alguna comilla o doble comilla por ahí?

Un saludo.
  #13 (permalink)  
Antiguo 06/10/2011, 04:43
 
Fecha de Ingreso: abril-2009
Mensajes: 19
Antigüedad: 15 años
Puntos: 0
Respuesta: Buscar y reemplazar

Añado que también me está dando error el código HTML cuando hace los saltos de línea, a pesar de usar la funcion nl2br, me sale así <br /> <br />

Ayuda por favor!
  #14 (permalink)  
Antiguo 06/10/2011, 05:19
 
Fecha de Ingreso: abril-2009
Mensajes: 19
Antigüedad: 15 años
Puntos: 0
Respuesta: Buscar y reemplazar

Puedo confirmar que está siendo error de las expresiones regulares, ya que con str_replace si funciona (pero no coge las palabras completas, es decir, si cambia "futbol" lo cambia en "futbol" y "futbolista"

Etiquetas: mysql, reemplazar, registro, sql, tabla, variables
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 12:03.