Foros del Web » Programando para Internet » PHP »

Duda con ciclo

Estas en el tema de Duda con ciclo en el foro de PHP en Foros del Web. Hola: Tengo unos problemitas ahí a la hora de poner las caritas en un mensaje. La cosa es que el usuario introduce las caritas haciendo ...
  #1 (permalink)  
Antiguo 11/04/2004, 15:43
Avatar de Reynier  
Fecha de Ingreso: noviembre-2002
Ubicación: Por ahí en algún sitio
Mensajes: 1.844
Antigüedad: 21 años, 4 meses
Puntos: 1
Información Duda con ciclo

Hola:
Tengo unos problemitas ahí a la hora de poner las caritas en un mensaje. La cosa es que el usuario introduce las caritas haciendo click sobre la imagen como aquí en Foros del Web y normal, me las inserta de la forma:
Cita:
dskfsdjkfhdsjkfhsdjf
dsfkljdhgjkdfg

:-t 8-)
donde :-t y 8-) son las caritas. Esas caritas tienen sus respectivas imágenes dentro del directorio img/lvisitas/smilies/ pero no se como ponerlas en el mensaje cuando lo muestro. Esto último lo hago de esta forma:
Código PHP:
$query mysql_query("SELECT * FROM  librodevisitas WHERE publico<>0 ORDER BY idfirma DESC");
$row mysql_fetch_assoc($query);
echo 
$row['comentarios']: 
pero esto me imprime:
Cita:
dskfsdjkfhdsjkfhsdjf
dsfkljdhgjkdfg

:-t 8-)
y lo que quiero es que en lugar de los simbolos me salgan las caritas. Por favor si alguien lo ha hecho antes que me ayude pues es lo unico que le falta a eso. Me lo han intentado explicar varias veces pero no hay manera de que lo entiende. Debe ser qie es que soy medio bruto.

Salu2

PD: A las caritas deben tener un arreglo con 21 caritas y 21 imágenes claro está.
__________________
Ing. Reynier Pérez Mira
  #2 (permalink)  
Antiguo 11/04/2004, 16:00
Avatar de ||Dj||  
Fecha de Ingreso: enero-2002
Mensajes: 2.349
Antigüedad: 22 años, 3 meses
Puntos: 1
En ereg_replace() tenés la solución.
  #3 (permalink)  
Antiguo 11/04/2004, 17:30
Avatar de jpinedo
Colaborador
 
Fecha de Ingreso: septiembre-2003
Ubicación: Lima, Perú
Mensajes: 3.120
Antigüedad: 20 años, 6 meses
Puntos: 41
Intento de explicación de la secuencia:

1.- En lugar de escribir directamente el comentario con "echo", lo guardas en una variable:
Código PHP:
$comentario $row['comentarios']; 
2.- Utilizas una función como ereg_replace() para reemplazar todas las ":-t" que encuentre, por una etiqueta de imagen, por ejemplo "<img src="triste.gif" />"... la misma operación la repites para todas las "caritas" que quieras reemplazar.
3.- Recién ahora la escribes con "echo".

Espero se haya entendido algo. He intentado desmenuzarlo un poco, de hecho se puede hacer más compacto. Revisa el enlace que te dejó Dj... y sobretodo utiliza el buscador del foro porque este tema ya se ha resuelto antes.

Saludos
  #4 (permalink)  
Antiguo 11/04/2004, 20:26
Avatar de Reynier  
Fecha de Ingreso: noviembre-2002
Ubicación: Por ahí en algún sitio
Mensajes: 1.844
Antigüedad: 21 años, 4 meses
Puntos: 1
Y entonces ...

Entendí algo pero no mucho. Ahora la cosa sería así más o menos:
Código PHP:
 $var $row['comentario'];
 
$var ereg_replace(':-t','<img src='img/lvisitas/smile01.gif'>',$var);
 echo 
$var
creo que es eso lo que me dices pero lo mío es un ciclo para 21 caritas, y cuando me encuentre 10 caritas en el mismo comentario que hago?

Salu2

PD: Me han dicho que con un ciclo for each es más facil pero no se hacerlo.
__________________
Ing. Reynier Pérez Mira

Última edición por Reynier; 11/04/2004 a las 20:28
  #5 (permalink)  
Antiguo 11/04/2004, 20:30
Avatar de jpinedo
Colaborador
 
Fecha de Ingreso: septiembre-2003
Ubicación: Lima, Perú
Mensajes: 3.120
Antigüedad: 20 años, 6 meses
Puntos: 41
Más allá de que encuentres o no las diez caritas, debes buscarlas... no te queda otra... Y lo que tienes que hacer es buscarlas una por una... o sea que la línea del ereg_replace() debes repetirla tantas veces como caritas tengas definidas (independientemente de que las encuentres o no).

SAludos
  #6 (permalink)  
Antiguo 11/04/2004, 20:31
Avatar de Reynier  
Fecha de Ingreso: noviembre-2002
Ubicación: Por ahí en algún sitio
Mensajes: 1.844
Antigüedad: 21 años, 4 meses
Puntos: 1
Ese es el problema

Ese es el problema que no se cuantas caritas puso el usuario en su mensaje.
__________________
Ing. Reynier Pérez Mira
  #7 (permalink)  
Antiguo 11/04/2004, 20:39
Avatar de jpinedo
Colaborador
 
Fecha de Ingreso: septiembre-2003
Ubicación: Lima, Perú
Mensajes: 3.120
Antigüedad: 20 años, 6 meses
Puntos: 41
No me estás entendiendo, tal vez no me expliqué bien...

Por ejemplo...
Tú has definido 10 caritas que los usuarios pueden utilizar si quieren en sus mensajes.

Pues en todos los mensajes debes buscar esas 10 caritas (o sea haces 10 ereg_replace())

ESo no quiere decir que el usuario haya utilizado 10 caritas, puede haber utilizado menos, o ninguna... lo que te digo es que tú tienes que buscar sí o sí las 10....

SAludos
  #8 (permalink)  
Antiguo 11/04/2004, 20:56
Avatar de jpinedo
Colaborador
 
Fecha de Ingreso: septiembre-2003
Ubicación: Lima, Perú
Mensajes: 3.120
Antigüedad: 20 años, 6 meses
Puntos: 41
Y Reynier.. ahora que busqué... encontré que ya se te había respondido antes... hasta con código:
http://www.forosdelweb.com/showthrea...hreadid=180638

¿Qué fue lo que no entendiste?

SAludos
  #9 (permalink)  
Antiguo 11/04/2004, 22:16
Avatar de Reynier  
Fecha de Ingreso: noviembre-2002
Ubicación: Por ahí en algún sitio
Mensajes: 1.844
Antigüedad: 21 años, 4 meses
Puntos: 1
Eso es lo que no entiendo

jpinedo eso es exactamente lo que no entiendo. O sea lo que me pusieron en el otro mensaje que me pusistes en el link fue lo que no entendí. El uso del ciclo for each que me explica el amigo Cluster.
Salu2
__________________
Ing. Reynier Pérez Mira
  #10 (permalink)  
Antiguo 11/04/2004, 22:34
Avatar de Reynier  
Fecha de Ingreso: noviembre-2002
Ubicación: Por ahí en algún sitio
Mensajes: 1.844
Antigüedad: 21 años, 4 meses
Puntos: 1
Mira ...

He hecho esto y me da este error:
Cita:
Warning: ereg_replace(): REG_EPAREN: in c:\archivos de programa\apache group\apache\htdocs\marxismo\lvisitas.php on line 225
el código es este:
Código PHP:
$comentarios $row['comentarios'];
         
$arrsmiles = array(":-O"=>"smile01.gif",":::"=>"smile02.gif",":-&"=>"smile03.gif",";-)"=>"smile04.gif",
                            
"8-)"=>"smile05.gif",":-|"=>"smile06.gif",":-o"=>"smile07.gif",":-t"=>"smile08.gif",
                            
":::"=>"smile09.gif",":::"=>"smile010.gif",":¨-("=>"smile011.gif",":heart:"=>"smile012.gif",
                            
":bheart:"=>"smile013.gif",":star:"=>"smile014.gif",":time:"=>"smile015.gif",":music:"=>"smile016.gif",
                            
":movie:"=>"smile017.gif","(-)]"=>"smile018.gif",":kiss:"=>"smile019.gif",":kake:"=>"smile020.gif",
                            
":-O"=>"smile021.gif");
         foreach(
$arrsmiles as $smile=>$imagen){
          
$resultado ereg_replace($smile,"<img src=\"img/lvisitas/smiles/$imagen\">",$resultado);
          echo 
$resultado
ahora cual es el error?
Salu2
PD: Disculpen si jodo demasiado pero me gusta aprender para luego poder enseñar a otros.

Uppss !!! He tenido que sustituir algunas caritas por este código pues se confundían con las de FDW. Las caritas que se confundían son estas: :-p , y
__________________
Ing. Reynier Pérez Mira

Última edición por Reynier; 11/04/2004 a las 22:47
  #11 (permalink)  
Antiguo 12/04/2004, 11:28
Ex Colaborador
 
Fecha de Ingreso: junio-2002
Mensajes: 9.091
Antigüedad: 21 años, 10 meses
Puntos: 16
Hola,

Cuando conoces el texto exacto a buscar es mejor usar str_repalce() (www.php.net/str_replace). Y str_replace() acepta arrays como parametros. Podrias hacer:
Código PHP:
$smiles=array(';)',':P');
$imagenes=array("<img src='smile1.gif'>","<img src='smile2.gif'>");
str_replace($smiles,$imagenes,$resultado); 
Sin bucles.

Saludos.
__________________
Josemi

Aprendiz de mucho, maestro de poco.
  #12 (permalink)  
Antiguo 12/04/2004, 14:38
Avatar de Reynier  
Fecha de Ingreso: noviembre-2002
Ubicación: Por ahí en algún sitio
Mensajes: 1.844
Antigüedad: 21 años, 4 meses
Puntos: 1
Pero no entiendo

Deja ver si entendí. Creo un array para todos los símbolos, otro para los equivalentes de cada símbolo y luego con str_replace hago lo que quiero. Ven acá josemi y no puedo usar un arreglo de la forma que lo uso en el otro ciclo, es decir:
[PHP]
$arrsmilies = array(":-&"=>"img/lvisitas/smiles/carita01.gif","8-)"=>"img/lvisitas/smiles/carita02.gif");

salu2
__________________
Ing. Reynier Pérez Mira
  #13 (permalink)  
Antiguo 12/04/2004, 19:03
Avatar de Reynier  
Fecha de Ingreso: noviembre-2002
Ubicación: Por ahí en algún sitio
Mensajes: 1.844
Antigüedad: 21 años, 4 meses
Puntos: 1
Miren

Probé esto de esta manera pero nada:
Código PHP:
 //Arreglo que contiene los smiles
         
$arrsmiles = array(":-O"=>"smile01.gif",":-p"=>"smile02.gif",":-&"=>"smile03.gif",";-)"=>"smile04.gif",
                            
"8-)"=>"smile05.gif",":-|"=>"smile06.gif",":-o"=>"smile07.gif",":-t"=>"smile08.gif",
                            
":-)"=>"smile09.gif",":-("=>"smile010.gif",":¨-("=>"smile011.gif",":heart:"=>"smile012.gif",
                            
":bheart:"=>"smile013.gif",":star:"=>"smile014.gif",":time:"=>"smile015.gif",":music:"=>"smile016.gif",
                            
":movie:"=>"smile017.gif","(-)]"=>"smile018.gif",":kiss:"=>"smile019.gif",":kake:"=>"smile020.gif",
                            
":-O"=>"smile021.gif");
         foreach(
$arrsmiles as $smile=>$imagen){
          
$resultado str_replace($smile,"<img src=\"img/lvisitas/smiles/$imagen\">"$resultado);
          
//$resultado = ereg_replace($smile,,$resultado);
          
echo $resultado;
         } 
Salu2

PD: Lo que me puso josemi no lo entendí muy bien
__________________
Ing. Reynier Pérez Mira
  #14 (permalink)  
Antiguo 12/04/2004, 19:48
Avatar de Reynier  
Fecha de Ingreso: noviembre-2002
Ubicación: Por ahí en algún sitio
Mensajes: 1.844
Antigüedad: 21 años, 4 meses
Puntos: 1
Pos mira ahora he pobrado esto

Pos miren ahora he probado de esta forma y me pone esto:
Código PHP:
$arrsmile = array(":-O",":-p",":-&",";-)",":-|",":-o",":-t",":-)",":-(",":-D",":¨-(","",":heart:",":bheart:",":start:",":time:",":music:",":movie:","(-)]",":kiss:",":kake:");
         
$arrimg = array("smile01.gif","smile02.gif","smile03.gif","smile04.gif","smile05.gif","smile06.gif","smile07.gif","smile08.gif","smile09.gif","smile010.gif",
                         
"smile011.gif","smile012.gif","smile013.gif","smile014.gif","smile015.gif","smile016.gif","smile017.gif","smile018.gif","smile019.gif","smile020.gif",
                         
"smile021.gif");
         
$arralt = array("Sorpresa grande, asombro incontenible","Sacar la lengua, burla","No puedo hablar","Guñando un ojo",
                         
"Llevo gafas","Apenado","Sorpresa","Mal humor","Alegría, sonrisa","Tristeza, descontento",
                         
"Llorar de tristeza","Corazón","Corazón roto","Estrella","Reloj","Nota musical","Película",
                         
"Invitarte a una cerveza o un café","Besar","Fiesta");
for(
$i=0;$i<strlen($row['comentarios']);$i++){
           
$resultado str_replace($arrsmile,"<img src=\"img/lvisitas/smiles/$arrimg\" alt=\"$arralt\">",$comentarios);
         } 
me imprime esto:
Cita:
dskfsdjkfhdsjkfhsdjf dsfkljdhgjkdfg // aqui me pone el cuadrito de la imagen pero el contenido de la misma es nulo 8-)
este es la parte del codigo HTML que me genera ese pedazo
dskfsdjkfhdsjkfhsdjf
dsfkljdhgjkdfg

<img src="img/lvisitas/smiles/Array" alt="Array"> 8-)

Salu2
__________________
Ing. Reynier Pérez Mira
  #15 (permalink)  
Antiguo 13/04/2004, 08:40
Avatar de Reynier  
Fecha de Ingreso: noviembre-2002
Ubicación: Por ahí en algún sitio
Mensajes: 1.844
Antigüedad: 21 años, 4 meses
Puntos: 1
Probe

Probé con los dos y ninguno me trabaja. ¿qué hago ahora?

Salu2
__________________
Ing. Reynier Pérez Mira
  #16 (permalink)  
Antiguo 13/04/2004, 11:45
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 3 meses
Puntos: 129
A tu último intento .. quitale el código HTML del str_replace() . .Josemi ya te comentó y puedes comprobarlo leyendo la documentación oficial de dicha función en www.php.net que esa función acepta como parámetros arrays ..

Uno de los arrays contendrá tus smiles y el otro el código HTML -completo- que ha de sustituir .. en tu caso el tag completo de imagen junto con la ruta/nombre de la misma ..

Lee detenidamente el ejemplo de Josemi.

Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.
  #17 (permalink)  
Antiguo 13/04/2004, 14:05
Avatar de Reynier  
Fecha de Ingreso: noviembre-2002
Ubicación: Por ahí en algún sitio
Mensajes: 1.844
Antigüedad: 21 años, 4 meses
Puntos: 1
Nada

Cluster lei e hice lo que me indicaron y ahroa me pone solo el código de la primera carita que se topa. El código es este:
Código PHP:
$arrsmile = array(":-O",":-p",":-&",";-)",":-|",":-o",":-t",":-)",":-(",":-D",":¨-(","",":heart:",":bheart:",":start:",":time:",":music:",":movie:","(-)]",":kiss:",":kake:");
         
$arrimg = array("<img src=img/lvisitas/smiles/smile01.gif>","<img src=img/lvisitas/smiles/smile02.gif>","<img src=img/lvisitas/smiles/smile032.gif>",
                         
"<img src=img/lvisitas/smiles/smile04.gif>","<img src=img/lvisitas/smiles/smile05.gif>","<img src=img/lvisitas/smiles/smile06.gif>",
                         
"<img src=img/lvisitas/smiles/smile07.gif>","<img src=img/lvisitas/smiles/smile08.gif>","<img src=img/lvisitas/smiles/smile09.gif>",
                         
"<img src=img/lvisitas/smiles/smile010.gif>","<img src=img/lvisitas/smiles/smile011.gif>","<img src=img/lvisitas/smiles/smile012.gif>",
                         
"<img src=img/lvisitas/smiles/smile013.gif>","<img src=img/lvisitas/smiles/smile014.gif>","<img src=img/lvisitas/smiles/smile015.gif>",
                         
"<img src=img/lvisitas/smiles/smile016.gif>","<img src=img/lvisitas/smiles/smile017.gif>","<img src=img/lvisitas/smiles/smile018.gif>",
                         
"<img src=img/lvisitas/smiles/smile019.gif>","<img src=img/lvisitas/smiles/smile020.gif>","<img src=img/lvisitas/smiles/smile021.gif>");
         
$arralt = array("Sorpresa grande, asombro incontenible","Sacar la lengua, burla","No puedo hablar","Guñando un ojo",
                         
"Llevo gafas","Apenado","Sorpresa","Mal humor","Alegría, sonrisa","Tristeza, descontento",
                         
"Llorar de tristeza","Corazón","Corazón roto","Estrella","Reloj","Nota musical","Película",
                         
"Invitarte a una cerveza o un café","Besar","Fiesta");
for(
$i=0;$i<strlen($row['comentarios']);$i++){
           
$resultado str_replace($arrsmile,$arrimg,$comentarios);
         }
         echo 
$resultado
a otra cosa como puedo poner el alt correspondiente a esa carita. Ahi tengo creado un arreglo con los alts de las caritas.

Salu2
__________________
Ing. Reynier Pérez Mira
  #18 (permalink)  
Antiguo 13/04/2004, 14:51
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 3 meses
Puntos: 129
Estas confundido ..

$arrsmile sólo debe contener tus smiles .. y $arrimg los <img src="smile.gif"> que corresponda indice<->indice

Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.
  #19 (permalink)  
Antiguo 13/04/2004, 15:10
Ex Colaborador
 
Fecha de Ingreso: junio-2002
Mensajes: 9.091
Antigüedad: 21 años, 10 meses
Puntos: 16
Bueno, he probado ese codigo sin el bucle y funciona:
Código PHP:
$comentarios="dskfsdjkfhdsjkfhsdjf
dsfkljdhgjkdfg

:-t 8-)"
;
$arrsmile = array(":-O","",":-&","8-)",":-|",":-o",":-t","","","",":¨-(","",":heart:",":bheart:",":start:",":time:",":music:",":movie:","(-)]",":kiss:",":kake:");

         
$arrimg = array("<img src=img/lvisitas/smiles/smile01.gif>","<img src=img/lvisitas/smiles/smile02.gif>","<img src=img/lvisitas/smiles/smile032.gif>",

                         
"<img src=img/lvisitas/smiles/smile04.gif>","<img src=img/lvisitas/smiles/smile05.gif>","<img src=img/lvisitas/smiles/smile06.gif>",

                         
"<img src=img/lvisitas/smiles/smile07.gif>","<img src=img/lvisitas/smiles/smile08.gif>","<img src=img/lvisitas/smiles/smile09.gif>",

                         
"<img src=img/lvisitas/smiles/smile010.gif>","<img src=img/lvisitas/smiles/smile011.gif>","<img src=img/lvisitas/smiles/smile012.gif>",

                         
"<img src=img/lvisitas/smiles/smile013.gif>","<img src=img/lvisitas/smiles/smile014.gif>","<img src=img/lvisitas/smiles/smile015.gif>",

                         
"<img src=img/lvisitas/smiles/smile016.gif>","<img src=img/lvisitas/smiles/smile017.gif>","<img src=img/lvisitas/smiles/smile018.gif>",

                         
"<img src=img/lvisitas/smiles/smile019.gif>","<img src=img/lvisitas/smiles/smile020.gif>","<img src=img/lvisitas/smiles/smile021.gif>");

         
$arralt = array("Sorpresa grande, asombro incontenible","Sacar la lengua, burla","No puedo hablar","Guñando un ojo",

                         
"Llevo gafas","Apenado","Sorpresa","Mal humor","Alegría, sonrisa","Tristeza, descontento",

                         
"Llorar de tristeza","Corazón","Corazón roto","Estrella","Reloj","Nota musical","Película",

                         
"Invitarte a una cerveza o un café","Besar","Fiesta");


           
$resultado str_replace($arrsmile,$arrimg,$comentarios);


         echo 
$resultado
Faltan smiles porque en los mensajes del foro los sustituye (marca "deshabilitar los Smilies en este Mensaje").

Y los alt lo deberias poner en el codigo HTML del <img>.

Saludos.
__________________
Josemi

Aprendiz de mucho, maestro de poco.
  #20 (permalink)  
Antiguo 13/04/2004, 18:24
Avatar de Reynier  
Fecha de Ingreso: noviembre-2002
Ubicación: Por ahí en algún sitio
Mensajes: 1.844
Antigüedad: 21 años, 4 meses
Puntos: 1
Pues miren

Cluster y josemi, en realidad no se cual es el problema. Lo he probado al igual que josemi con un texto estático y todo me funciona ok pero cuando el texto lo saco de la Base de Datos solo me coge la primera carita que aparece en el mismo. Por ejemplo, si este es el texto que hay en la Base de Datos:
probandoprobandoprobandoprobandoprobando
probandoprobandoprobandoprobandoprobandoprobandopr obandoprobandoprobandoprobando
probandoprobandoprobandoprobandoprobando W": (para este me pone la imagen) &%(pero para este no).
¿Que hago?

Salu2
__________________
Ing. Reynier Pérez Mira
  #21 (permalink)  
Antiguo 13/04/2004, 18:32
Avatar de Reynier  
Fecha de Ingreso: noviembre-2002
Ubicación: Por ahí en algún sitio
Mensajes: 1.844
Antigüedad: 21 años, 4 meses
Puntos: 1
Gracias a ambos

Muchas gracias a ambos por la paciencia Clustery josemi. Ya me funcionó. Lo que me faltaba en el array de las caritas era el código de una por eso nunca me salía.

Salu2 y gracias de nuevo
__________________
Ing. Reynier Pérez Mira
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 08:38.