Foros del Web » Programando para Internet » PHP »

Escribir dentro de un string

Estas en el tema de Escribir dentro de un string en el foro de PHP en Foros del Web. Buenas, como siempre, tengo que recurrir a esta gran comunidad para salir del apuro... En este caso tengo una cadena de texto, por ejemplo esta: ...
  #1 (permalink)  
Antiguo 16/11/2011, 03:01
Avatar de altex  
Fecha de Ingreso: septiembre-2008
Ubicación: En mi casa
Mensajes: 47
Antigüedad: 15 años, 7 meses
Puntos: 4
Escribir dentro de un string

Buenas,

como siempre, tengo que recurrir a esta gran comunidad para salir del apuro...

En este caso tengo una cadena de texto, por ejemplo esta:

"Tengo una cadena de texto con una imagen/id=1 y otra imagen/id=2."


Tengo que añadir despues de cada id una cadena como por ejemplo &v=1 para que quede asi:

imagen/id=1&v=1

El caso es que no se cuantas imagenes tengo en la cadena porque lo cojo de la base de datos.

Lo he probado con explode pero al tener mas de una imagen no se como hacerlo en todas y luego tratarlas...

Alguna idea cracks??

Saludos y gracias!!
  #2 (permalink)  
Antiguo 16/11/2011, 03:09
 
Fecha de Ingreso: agosto-2011
Ubicación: España
Mensajes: 445
Antigüedad: 12 años, 8 meses
Puntos: 89
Respuesta: Escribir dentro de un string

Puedes utilizar mysql_num_rows para determinar cuántas imágenes hay en ese campo y después con esa información hacer un for.

Por ejemplo:

Código PHP:
Ver original
  1. $numeromysqlnumrows = '34'; // Sacas esta información con la función mysql_num_rows.
  2. $variable = '&v=1';
  3. for ($i = '1'; $i <= $numeromysqlnumrows; $i++)
  4. {
  5. echo 'imagen/id='.$i.$variable.'</br>';
  6. }

Última edición por Arkaitz; 16/11/2011 a las 03:15
  #3 (permalink)  
Antiguo 16/11/2011, 03:20
Avatar de altex  
Fecha de Ingreso: septiembre-2008
Ubicación: En mi casa
Mensajes: 47
Antigüedad: 15 años, 7 meses
Puntos: 4
Respuesta: Escribir dentro de un string

Gracias por tu respuesta,

no se si te he entendido bien, pero las imagenes estan dentro del texto, por lo que el mysql_num_rows me devolvera 1, que es el texto que me devuelve, no la cantidad de imagenes..


He pensando hacerlo con explode, que tiene la opcion de ponerle un limite, por tanto cortaria por id= con limite 1, y que vaya haciendolo cada vez que encuentre uno, pero no se como repetir el bucle...

es decir:

Código PHP:
if(stripos($f['content'],"id=")){ //si encuentra el id

$antes_uuid explode("id="$f['content'],1);


pero cuantas veces hago el bucle si no se cuantas imagenes tengo?

Saludos y gracias!
  #4 (permalink)  
Antiguo 16/11/2011, 03:23
 
Fecha de Ingreso: agosto-2011
Ubicación: España
Mensajes: 445
Antigüedad: 12 años, 8 meses
Puntos: 89
Respuesta: Escribir dentro de un string

¿Cómo almacenas las imágenes?
  #5 (permalink)  
Antiguo 16/11/2011, 03:37
Avatar de altex  
Fecha de Ingreso: septiembre-2008
Ubicación: En mi casa
Mensajes: 47
Antigüedad: 15 años, 7 meses
Puntos: 4
Respuesta: Escribir dentro de un string

Te cuento lo que quiero hacer a ver si queda claro del todo.

Tengo un contenido firmado, que se guarda en una tabla cada vez que se modifica algo. Dentro de ese contenido hay una id de unas imagenes.

Si esa imagen se modifica, no se modifica el id, sino la version, por tanto, cuando muestro el contenido guardado de tal dia, me muestra la imagen mas nueva, no la de aquel, y eso se guarda en versiones.

Lo que quiero es cojer el contenido, que contiene imagenes con id por en medio del texto, ir a cojer a otras 2 tablas la version correcta de esa fecha, y añadirle un id=5&version=2

Mi problema es que no se cuantas imagenes tengo en ese contenido, y al cortar solo consigo hacer esto en la primera imagen, y no en las demas...

Voy a seguir intentando con explode, pero no tengo la manera de saber cuantas imagenes hay...

Se me ocurre un bucle que busque todos los id= y los almacene en un contador, para luego recorrerlo con todas las imagenes...

a ver si se me ocurre algo.

Gracias por todo
  #6 (permalink)  
Antiguo 16/11/2011, 04:08
Avatar de Antonio_España  
Fecha de Ingreso: mayo-2007
Mensajes: 58
Antigüedad: 17 años
Puntos: 4
Respuesta: Escribir dentro de un string

Deberias incluir en el texto algun diferenciador, para poder dividir en partes el texto, por ejemplo:

texto texto texto texto texto texto texto [imagen] texto texto texto texto ... etc...

De esta manera se podria usar algo parecido a esto:

Código:
<?
	/**
		Esta funcion devuelve un array
	*/
	function getImagenes($cadena)
	{
		$posicion1 = 0;
		$posicion2 = 1;
		$partes[] = array();
		
		while (strpos($cadena,"[",$posicion1)==true)
		{
			$posicion2 = strpos($cadena,"[",$posicion1);
			if ($posicion2<strlen($cadena))
			{
				$partes[] .= substr($cadena,$posicion2+1,(strpos($cadena,"]",$posicion2) - $posicion2 - 1));
				$posicion1 = $posicion2+1;
			}
		}
		
		return $partes;
	}
	$imagenes = getImagenes("Tengo una cadena de texto con una [imagen]/id=1 y otra [imagen]/id=2");
	var_dump($imagenes);
?>
De manera que el resultado que devolveria seria:
array(3) { [0]=> array(0) { } [1]=> string(6) "imagen" [2]=> string(6) "imagen" }

El array con indice cero no lo contemples, solo desde el 1 en adelante.
__________________
Aprendiz autodidacta

Última edición por Antonio_España; 16/11/2011 a las 04:08 Razón: No conozco el tag code=php
  #7 (permalink)  
Antiguo 16/11/2011, 05:38
 
Fecha de Ingreso: noviembre-2007
Mensajes: 23
Antigüedad: 16 años, 5 meses
Puntos: 4
Respuesta: Escribir dentro de un string

Aunque no he logrado entender al completo que es lo que deseas hacer, almacenar en un mismo campo de una tabla más de un dato es un fallo grave de normalización. Te dará muchos problemas de todo tipo: usabilidad, escalabilidad, e incluso funcionalidad.

Si yo fuera tú, buscaría la forma de mantener una imagen/dato por campo. Probablemente lo único que tengas que hacer es crear una tabla que contenga las imágenes, relacionada con la tabla principal. Te pongo un ejemplo:

Tú quieres hacer lo siguiente:

Tabla principal
Cita:
cod_tabla1 -> 1
contenido -> imagen1, imagen2, imagen3, imagen4
En realidad deberías hacer algo así:

Tabla principal
Cita:
cod_principal -> 1
Tabla imagen
Cita:
cod_imagen -> 1
imagen -> imagen1
cod_principal -> 1

cod_imagen -> 2
imagen -> imagen2
cod_principal -> 1

cod_imagen -> 3
imagen -> imagen3
cod_principal -> 1
donde "cod_principal" está relacionado con la tabla principal.

Espero que esto te ayude algo. Un saludo.
  #8 (permalink)  
Antiguo 21/11/2011, 04:03
Avatar de altex  
Fecha de Ingreso: septiembre-2008
Ubicación: En mi casa
Mensajes: 47
Antigüedad: 15 años, 7 meses
Puntos: 4
Respuesta: Escribir dentro de un string

Hola amigos,

parece que realmente no he conseguido expresar lo que quería, pero voy a dejar el codigo utilizado por si a alguien le sirve.

No modificaba en ningun momento la base de datos, simplemente quería que al mostrarse, se mostrara segun la version de la fecha indicada. Os dejo el codigo por si a alguien le puede servir algo.

Ejemplo: Tengo esto en la base de datos:

Cita:
<?xml version='1.0' encoding='UTF-8'?><root><static-content><![CDATA[<p>
<a href="/es/c/document_library/get_file?uuid=6258e760-a380-488d-ab01-3e8a025a1d63&amp;groupId=10157">
<img alt="" src="/es/c/document_library/get_file?uuid=6258e760-a380-488d-ab01-3e8a025a1d63&amp;groupId=10157" style="width: 1024px; height: 768px;" />link a imatge sdasd</a></p>]]></static-content></root>

y quiero que todo lo que contenga un uuid se ponga una version, es decir de esto:

Cita:
/es/c/document_library/get_file?uuid=6258e760-a380-488d-ab01-3e8a025a1d63&amp;groupId=10157
que pase a esto:

Cita:
/es/c/document_library/get_file?uuid=6258e760-a380-488d-ab01-3e8a025a1d63&version=1.4&amp;groupId=10157
segun la version que sea de la base de datos

Código PHP:
function versionador($cadena$fecha,$contenido_anterior){
            
            
//echo $cadena;
                
if(stripos($cadena,"uuid=")){
                    
//cortamos el contenido por el uuid en 2 trozos
                    
$partes explode("uuid=",$cadena,2);
                    
//el antes es la parte del contenido de antes del uuid
                    
$antes $partes[0]."uuid=";
                    
//el despues es el uuid mas todo lo demas
                    
$despues $partes[1];
                    
//partes2 tienes el uuid por un lado, y el resto del contenido por el otro
                    
$partes2 explode("&",$despues,2);
                    
$contenido $contenido_anterior.$antes;
                    
                    
//echo htmlentities($contenido)."<br>";
                    
$sql2="SELECT DISTINCT v.version FROM dlfileversion v WHERE v.createDate <='".$fecha."' AND name IN (SELECT name FROM dlfileentry
                        WHERE uuid_ = '"
.$partes2[0]."') ORDER BY createDate DESC LIMIT 1";
                    
//echo $sql2."<br>";

                        
$ver mysql_query($sql2);
                        
$contador=0;
                        while(
$v=mysql_fetch_array($ver)){                        
                            
//guardamos el uuid con la version y un & al final
                            
$imagen $partes2[0]."&version=".$v['version']."&".$partes[1];                            
                            
$contenido $contenido.$imagen;
                            
//echo htmlentities($contenido)."<br>";
                            
if(stripos($partes2[1],"uuid=")){
                                
versionador($partes2[1],$fecha,$contenido);
                                
$contenido $contenido.$partes2[1];
                                return 
$contenido
                            }
                        }
                    
                    return 
$contenido
                }else{
                    return 
$cadena;
                }
            } 

Última edición por altex; 21/11/2011 a las 04:08 Razón: ejemplo

Etiquetas: imagenes, string
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 03:35.