Foros del Web » Creando para Internet » Flash y Actionscript »

incrementar variable en campo de texto

Estas en el tema de incrementar variable en campo de texto en el foro de Flash y Actionscript en Foros del Web. buenas señores, necesito una mano... tengo varios campos de texto que muestran la info de una base de datos, como una lista de productos por ...
  #1 (permalink)  
Antiguo 16/01/2006, 16:53
Avatar de SAPINTO  
Fecha de Ingreso: junio-2005
Ubicación: just another fucked up pl
Mensajes: 777
Antigüedad: 18 años, 10 meses
Puntos: 0
incrementar variable en campo de texto

buenas señores, necesito una mano...

tengo varios campos de texto que muestran la info de una base de datos, como una lista de productos por poner un ejemplo..

la cosa es que si mi variable se llama "mivariable", como lo hago para que apretar un boton este nombre se vaya incrementando, es decir "mivariable1", reconociendo asi el siguiente valor del php....??


por su atencion, muchisimas gracias
__________________
if(user=="female" && user>="hot"){
user.gotoAndStop("sapinto's bed");
}
mi portafolio
  #2 (permalink)  
Antiguo 16/01/2006, 18:21
 
Fecha de Ingreso: enero-2006
Mensajes: 13
Antigüedad: 18 años, 3 meses
Puntos: 0
Debes de usar la funcion eval("mivariable"+contador) donde contador es una variable que guarda el valor.
  #3 (permalink)  
Antiguo 16/01/2006, 18:38
Avatar de SAPINTO  
Fecha de Ingreso: junio-2005
Ubicación: just another fucked up pl
Mensajes: 777
Antigüedad: 18 años, 10 meses
Puntos: 0
daerwin... estas convirtiendote en mi heroe personal...

lo pruebo y te aviso
__________________
if(user=="female" && user>="hot"){
user.gotoAndStop("sapinto's bed");
}
mi portafolio
  #4 (permalink)  
Antiguo 16/01/2006, 19:09
Avatar de SAPINTO  
Fecha de Ingreso: junio-2005
Ubicación: just another fucked up pl
Mensajes: 777
Antigüedad: 18 años, 10 meses
Puntos: 0
no me funciona.. por siacaso, es una variable de texto dinamico...
__________________
if(user=="female" && user>="hot"){
user.gotoAndStop("sapinto's bed");
}
mi portafolio
  #5 (permalink)  
Antiguo 16/01/2006, 21:12
 
Fecha de Ingreso: enero-2006
Ubicación: Buenos Aires, Argentina
Mensajes: 299
Antigüedad: 18 años, 3 meses
Puntos: 5
Me parece que para lo querés hacer usar XML (generado dinámicamente con php) te va a resultar mucho más simple. Con los resultados de la base, en vez de hacer, por ejemplo:

Código PHP:
echo "variable1=$x&variable2=$y&variable3=$z"
sólo tendrías que hacer algo así:

Código PHP:
$xml = "<?xml version='1.0' encoding='iso-8859-1'?>";
$xml .= "<variables>";
acá va el loop. En cada vuelta la línea que escribís es:
       $xml .= "<variable valor='$el_valor_que_da_la_consulta' />";
cuando termina el loop:
$xml .= "</variables>";
header('Content-Type: text/xml'); 
echo $xml;
De esta forma, no te tenés que complicar la vida generando variables dinámicamente. Es más "limpio", ordenado y además, escalable. Podés pasar más variables/valores más fácil y eventualmente, podés agregar otros valores a cada nodo o incluir subnodos en un futuro si llegara a ser necesario.

Suerte
Califa
  #6 (permalink)  
Antiguo 17/01/2006, 07:41
Avatar de SAPINTO  
Fecha de Ingreso: junio-2005
Ubicación: just another fucked up pl
Mensajes: 777
Antigüedad: 18 años, 10 meses
Puntos: 0
si.. es una buena solucion califa, es solo que tenia muchos phps y queria evitar la fatiga tal como jaimito... pero si no se puede, no se puede.

ademas es cierto, es mas limpio, asi que gracias hombre
__________________
if(user=="female" && user>="hot"){
user.gotoAndStop("sapinto's bed");
}
mi portafolio
  #7 (permalink)  
Antiguo 17/01/2006, 16:36
Avatar de SAPINTO  
Fecha de Ingreso: junio-2005
Ubicación: just another fucked up pl
Mensajes: 777
Antigüedad: 18 años, 10 meses
Puntos: 0
ok compadre, lo hice en xml, ahora tengo otro problemon...

la verdad no se si lo hice bien, pero el xml me genera este codigo:

Código PHP:
<?xml version="1.0"?>
<rock>
<banda>AlguriA</banda>
<estilo>rock metal</estilo>
<region>RM</region>
<contacto>[email protected]</contacto>
<web>www.fotolog.com/alguria</web>

<banda>jirafa ardiendo</banda>
<estilo>rock</estilo>
<region>RM</region>
<contacto>[email protected]</contacto>
<web>www.fotolog.com/jirafa</web>

<banda>alison</banda>
<estilo>power indie</estilo>
<region>RM</region>
<contacto>[email protected]</contacto>
<web></web>

<banda>Nienna</banda>
<estilo>Doom Atmosferico Progresivo</estilo>
<region>V</region>
<contacto>[email protected]</contacto>
<web>www.niennaweb.tk</web>
</rock>

lo cual me parece que es ok, ahora, en mi fla tengo 5 campos de texto (instancias: banda_txt , estilo_txt, region_txt, contacto_txt y web_txt), so;

desde mi fla, estoy ocupando este as:

Código PHP:
var obj_xml:XML = new XML();
obj_xml.load("http://www.ladireccion.com/php/rock.php");
obj_xml.ignoreWhite true;
obj_xml.onLoad = function(exito) {
    if (
exito) {
        
banda_txt.text obj_xml.firstChild.childNodes[0].firstChild.nodeValue;
        
estilo_txt.text obj_xml.firstChild.childNodes[1].firstChild.nodeValue;
        
region_txt.text obj_xml.firstChild.childNodes[2].firstChild.nodeValue;
        
contacto_txt.text obj_xml.firstChild.childNodes[3].firstChild.nodeValue;
        
web_txt.text obj_xml.firstChild.childNodes[4].firstChild.nodeValue;
    } else {
        
status_txt.text "Error";
    }
}; 
lo cual tambien es ok para mi (no se si lo estare haciendo bien, pero de que funciona, funciona..).

ENTONCES, la cosa se me complica, ya que los usuarios van a seguir agregando bandas y no basta con mis 5 campos de texto dinamico, asi que hice 5 campos mas para abajo (banda1_txt, estilo1_txt, etc. hasta banda5_txt)

LA PREGUNTA: como, oh señores de forosdelweb, le hago para que se cargue el nodo 20 por ejemplo, dentro de banda1_txt y asi poder leer todo el XML ocupando mis campos de texto dinamico?

ah?

pd: espero respuesta cual niño espera a santa claus
__________________
if(user=="female" && user>="hot"){
user.gotoAndStop("sapinto's bed");
}
mi portafolio
  #8 (permalink)  
Antiguo 17/01/2006, 17:28
Avatar de luistar  
Fecha de Ingreso: marzo-2005
Ubicación: Argentina
Mensajes: 939
Antigüedad: 19 años, 1 mes
Puntos: 0
hola :D
modifiqué algo de tu codigo para generar el xml y el de para interpretarlo
http://es.geocities.com/leo020588/bandas/bandas.html
http://es.geocities.com/leo020588/bandas/bandas.zip

saludos :D
__________________
Si digo que soy mentiroso. ¿Lo soy?
  #9 (permalink)  
Antiguo 17/01/2006, 17:42
 
Fecha de Ingreso: enero-2006
Ubicación: Buenos Aires, Argentina
Mensajes: 299
Antigüedad: 18 años, 3 meses
Puntos: 5
Buenas, como dijo Jack el destripador, vamos por partes.

La estructura de tu XML es válida, pero es poco práctica. La ventaja de XML es justamente que te permite estructurar contenidos, para que interpretarlos sea más sencillo.

Pensalo como si estuvieras ordenando carpetas en directorios y subdirectorios. En esencia es lo mismo: le estás dando al contenido una estructura jerárquica, donde hay "padres" (un directorio o un nodo), "hijos" (los subdirectorios o subnodos) y "hermanos" (subdirectorios en un mismo nivel, dentro de un mismo directorio "padre" o nodos dentro de un mismo nodo "padre").

Si dentro de la carpeta "bandas", tuvieras una carpeta llamada "Nirvana" y en el mismo nivel, otra carpeta con la web de esa banda, pero además otra capeta con otra banda, y a su vez otra carpeta con la web de esta última banda... cómo sabrías por ejemplo, qué web corresponde a qué banda. En cambio, si dentro de bandas tenés cada banda, y dentro de cada banda, su web, encontrar todo es mucho más sencillo.

Los nombres de los nodos pueden ser arbitrarios, pero si reflejan el contenido, mejor (para la máquina es igual, pero para el que lo lea va a tener más sentido y es más fácil de interpretar).

O sea que si lo que estás trayendo son bandas, el primer nodo bien podría llamarse "bandas".
-->
<bandas>

Dentro de bandas tenés justamente... "bandas". Si Nirvana está dentro de bandas, bueno es una "banda". Y ahí tendríamos el segundo nivel, los "hijos" de "bandas", que serían "hermanas" entre sí.
-->
Código HTML:
<bandas>
     <banda></banda>
     <banda></banda>
</bandas> 
A su vez, cada banda tiene determinadas características, probablemente únicas, que te permiten identificarla. Entonces, esas características, son "hijas" o subnodos de "banda" y a su vez, hermanas entre sí.

-->
Código HTML:
<bandas>
      
      <banda>
             <nombre>AlguriA</nombre>
             <estilo>rock metal</estilo>
             <region>RM</region>
             <contacto>[email protected]</contacto>
             <web>www.fotolog.com/alguria</web>
      </banda>
      
      <banda>
             <nombre>jirafa ardiendo</nombre>
             <estilo>rock</estilo>
             <region>RM</region>
             <contacto>[email protected]</contacto>
             <web>www.fotolog.com/jirafa</web>
      </banda>

</bandas> 
Bueno, ahí ya tenés una estructura más clara y ordenada. De la otra manera, no estabas asociando estilo, por ejemplo, a ninguna banda en particular.

Ahora, en lugar de hacer 5 nodos dentro de cada <banda>, podrías hacer que la información que está en esos nodos sea un "atributo" de <banda>. Por decirlo mal y pronto, si lo que vas a poner es corto, este método es más efectivo y rápido (cuando lo tengas que leer de flash u otro programa).

Entonces tendrías, algo así como:

Código HTML:
<bandas>
      <banda nombre="AlguriA" estilo="rock metal" region="RM" contacto="[email protected]" web="ww.fotolog.com/alguria" />
      <banda nombre="jirafa ardiendo" estilo="rock" region="RM" contacto="[email protected]" web="ww.fotolog.com/jirafa" />
</bandas> 
En XML, todos los tags/nodos tienen que estar cerrados. Si un nodo no contiene otro dentro de sí, como por ejemplo, <banda>, además de cerrarlo así: </banda>, también podés abrilo y cerrarlo en el mismo nodo: <banda />.

Bueno, ahí va entonces el XML. En la próxima entrega, el ActionScript!!!

Pero te doy una pista. Si estás trabajando con datos dinámicos (o sea, conocés la estructura de los datos, pero no su contenido y probablemente tampoco su cantidad), todo tu esquema pasa a ser dinámico. Por lo cual en realidad no vas a hacer más que UN modelo, por ejemplo 5 campos de texto dentro de un movieClip, y lo vas a copiar/replicar (con la misma estructura pero distinto contenido) tantas veces como sea necesario. En este caso, vas a tener tantos movieClips como bandas (la cantidad te la va a indicar muy fácil el XML si está bien estructurado). Aunque al principio no lo parezca, todo se simplifica porque la estructura del XML y de tu código AS corren "paralelas". Lo cual es mucho más práctico (y sencillo de escribir) que nombrar manualmente variables o campos de texto como "campo1", "campo2", etc.

Última edición por califa010; 17/01/2006 a las 17:48
  #10 (permalink)  
Antiguo 17/01/2006, 17:57
Avatar de SAPINTO  
Fecha de Ingreso: junio-2005
Ubicación: just another fucked up pl
Mensajes: 777
Antigüedad: 18 años, 10 meses
Puntos: 0
vaya hombre.. realmente te lo agradezco, voy a probarlo y te aviso

http://www.bandas.cl <---ahi esta el sitio con un codigo antiguo, en catalogo, voy a probar ahora el code que me diste
__________________
if(user=="female" && user>="hot"){
user.gotoAndStop("sapinto's bed");
}
mi portafolio
  #11 (permalink)  
Antiguo 17/01/2006, 17:59
Avatar de SAPINTO  
Fecha de Ingreso: junio-2005
Ubicación: just another fucked up pl
Mensajes: 777
Antigüedad: 18 años, 10 meses
Puntos: 0
hey, acabo de leer tu respuesta califa...

realmente me conmueven cabros


mil gracias!
__________________
if(user=="female" && user>="hot"){
user.gotoAndStop("sapinto's bed");
}
mi portafolio
  #12 (permalink)  
Antiguo 17/01/2006, 18:43
Avatar de SAPINTO  
Fecha de Ingreso: junio-2005
Ubicación: just another fucked up pl
Mensajes: 777
Antigüedad: 18 años, 10 meses
Puntos: 0
muy ilustrativo, gracias por el tiempo que se han tomado...

ahora, modifique el php para que al leer la base de datos me genere esto:

Código HTML:
<?xml version="1.0"?>
<bandas>
<banda nombre='AlguriA' estilo='rock metal' region='RM' contacto='[email protected]' web='www.fotolog.com/alguria' />
<banda nombre='jirafa ardiendo' estilo='rock' region='RM' contacto='[email protected]' web='www.fotolog.com/jirafa' />
<banda nombre='alison' estilo='power indie' region='RM' contacto='[email protected]' web='' />
<banda nombre='Nienna' estilo='Doom Atmosferico Progresivo' region='V' contacto='[email protected]' web='www.niennaweb.tk' />
</bandas> 
es correcto? estoy algo preocupado por los ", que estan como '... y por que no aparencen asi:
Código HTML:
<bandas>
     <banda></banda>
     <banda></banda> 
</bandas> 
sino que asi:

Código HTML:
<bandas>
<banda></banda>
<banda></banda> 
</bandas> 
(siento ser such a pain in the ass)
__________________
if(user=="female" && user>="hot"){
user.gotoAndStop("sapinto's bed");
}
mi portafolio
  #13 (permalink)  
Antiguo 17/01/2006, 19:20
 
Fecha de Ingreso: enero-2006
Ubicación: Buenos Aires, Argentina
Mensajes: 299
Antigüedad: 18 años, 3 meses
Puntos: 5
Jaja. Bueno, y ahora termino lo que empecé. Podés usar este código (rearmalo de acuerdo a tus necesidades) o cualquier otro, pero te aseguro que más importante que tener un código que funcione es entender cómo funciona. Una vez que lo logres --y no es muy difícil-- vas a ver que podés hacer un montón de cosas más, porque en esencia es siempre lo mismo. Incluso, seguramente se te van a ocurrir otras cosas cuando veas las posibilidades que te da...

Bueno, al punto. Primero el script y después cómo funciona:
Código:
System.useCodepage = false;
var escenario = this;
var objXml:XML = new XML();
objXml.ignoreWhite = true;
objXml.load("bandas.xml");
objXml.onLoad = cargarBandas;
function cargarBandas(ok) {
	if (ok) {
		var bandas:XMLNode = objXml.firstChild;
		var cantidadBandas:Number = bandas.childNodes.length;
		var nombre:String;
		var estilo:String;
		var region:String;
		var contacto:String;
		var web:String;
		for (var i = 0; i<cantidadBandas; i++) {
			duplicateMovieClip("banda_mc", "banda_mc"+i, i);
			setProperty("banda_mc"+i, _y, eval("banda_mc"+(i-1))._y+eval("banda_mc"+(i-1))._height+10);
                        nombre = bandas.childNodes[i].attributes.nombre;
			estilo = bandas.childNodes[i].attributes.estilo;
			region = bandas.childNodes[i].attributes.region;
			contacto = bandas.childNodes[i].attributes.contacto;
			web = bandas.childNodes[i].attributes.web;
			escenario["banda_mc"+i].nombre_txt.text = nombre;
			escenario["banda_mc"+i].estilo_txt.text = estilo;
			escenario["banda_mc"+i].region_txt.text = region;
			escenario["banda_mc"+i].contacto_txt.text = contacto;
			escenario["banda_mc"+i].web_txt.text = web;
		}
	} else {
		trace("error al cargar el XML");
	}
}
System.useCodepage = false; --> Siempre que uses XML te conviene poner esto para evitar problemas de codificación.

Después cargás el xml normalmente y agregás ignoreWhite para que no haya problemas con los espacios en blanco.

Código:
var escenario = this;
Esta línea es simplemente una referencia al escenario. Después la vas a necesitar dentro de la función, pero ahí la palabra "this" ya no te sirve ("apunta" o se refiere al objeto XML).

Cuando termina de cargar el XML, se "dispara" la función cargarBandas().

Código:
var bandas:XMLNode = objXml.firstChild;
var cantidadBandas:Number = bandas.childNodes.length;
Acá decís que bandas es el primer nodo (firstChild) del objeto XML.
Después averiguás cuántas bandas hay dentro de este nodo, o sea, cuántos "nodos hijos/childNodes" tiene, y lo guardás en una variable.

Las siguientes 5 líneas son declaraciones de variables y no son estrictamente necesarias, aunque ayudan a mantener todo más claro y ordenado. Es una buena práctica acostumbrarse a hacerlo.

Después empieza el loop. Va a ir desde 0 hasta que el contador (i) sea menor a la cantidad de bandas. Si tenés 10, va de 0 a 9.

Dentro del loop empezás a duplicar los movieClips, que contienen dentro cinco campos de texto:

Código:
duplicateMovieClip("banda_mc", "banda_mc"+i, i);
Cada nuevo mc se va a llamar "banda_mc" más un número, que es el número de vuelta del loop. Mientras todos se llamen distinto, no hay problema. Además, le indicás la "profundidad" en el último parámetro. Lo mismo, mientras no se "pisen", todo bien.

Código:
setProperty("banda_mc"+i, _y, eval("banda_mc"+(i-1))._y+eval("banda_mc"+(i-1))._height+10);
Ahora los ubicás. Para eso, "seteás" la propiedad "_y" (2º parámetro), del mc actual (1º parámetro) y le das un valor: la posición _y del mc anterior, más el alto del mc anterior, más una distancia en píxeles (en este caso 10, pero es a gusto).

Listo, ya estás creando en cada vuelta los mc que van a contener los cinco campos de texto de cada banda.

Ahora, averiguás las propiedades o "atributos" del nodo en el que estés y lo tirás a una variable. En la primera vuelta es el 0, que equivale al primer nodo <banda>.

Por ejemplo, acá

Código:
nombre = bandas.childNodes[i].attributes.nombre;
estás pidiendo, el atributo "nombre" del hijo número 0 de <bandas>. Con los otros atributos es lo mismo.

Código:
escenario["banda_mc"+i].nombre_txt.text = nombre;
Y por último, asignás esa variable que creaste (nombre, por ej) al campo de texto que está en el mc actual (el que corresponde a cada vuelta, en la 1º vuelta o vuelta 0, es "banda_mc0").

Ese mc es una propiedad del escenario. O sea que lo que hacés es decirle: el escenario contiene a la propiedad "banda_mc0", que contiene a su vez al campo de texto "nombre_txt", que tiene una propiedad "text". Bueno, ahí, poné el valor de la variable "nombre". Y ya estás, con el resto de los campos es lo mismo.

Bueno, al principio parece chino, pero si lo analizás paso a paso, vas a ver que no es tanta ciencia.

Y cuando ya tengas el esquema incorporado, luego de hacer unos cuantos XML y de volverte loco porque te aparecen errores inexplicables... vas a ver la luz, jaja. No, en serio, te van a salir con los ojos cerrados.

Suerte
Califa

PD: tal vez muchas de las cosas que explico acá ya la entendés, pero en fin, me embalé y terminé haciendo un paso a paso. Pero probablemente a alguien le sirva para orientarse
  #14 (permalink)  
Antiguo 17/01/2006, 19:23
 
Fecha de Ingreso: enero-2006
Ubicación: Buenos Aires, Argentina
Mensajes: 299
Antigüedad: 18 años, 3 meses
Puntos: 5
Las comillas dobles o simples no hacen diferencia, aunque si querés las dobles, podés escaparlas con la barra invertida en php: nombre=\"$variable\".

En cuanto a las sangrías, tampoco importan. Simplemente se usan para que sea más fácil de leer (para humanos, no para la máquina).
  #15 (permalink)  
Antiguo 17/01/2006, 19:38
Avatar de SAPINTO  
Fecha de Ingreso: junio-2005
Ubicación: just another fucked up pl
Mensajes: 777
Antigüedad: 18 años, 10 meses
Puntos: 0
yo, he vivido, y he visto cosas increibles; paisajes como los jardines colgantes de babilonia, unas piramides tocadas por la mano de dios y hasta un perro orinando en posicion invertida, pero esto señores, las supera todas...

y es que como no apreciar, oh mis queridos camaradas, las bondades de este maravilloso lenguaje, que tan imponente se encarga, de satisfacer hasta la mas infima de nuestras necesidades?

me pongo de pie para decir: "que buen foro señores", y alzo mi mano para que con una copa de vino, brindemos a la salud de califa y luistar.

mil gracias señores.

atte: sapinto
__________________
if(user=="female" && user>="hot"){
user.gotoAndStop("sapinto's bed");
}
mi portafolio
  #16 (permalink)  
Antiguo 18/01/2006, 13:43
Avatar de SAPINTO  
Fecha de Ingreso: junio-2005
Ubicación: just another fucked up pl
Mensajes: 777
Antigüedad: 18 años, 10 meses
Puntos: 0
a todo esto, la pagina me va perfecto califa, y como bien dijiste, es cosa de entender el script...

tome algo de tu ejemplo luistar, sobre todo la parte para el mailto y los links.

en verdad estoy agradecido muchachos
__________________
if(user=="female" && user>="hot"){
user.gotoAndStop("sapinto's bed");
}
mi portafolio
  #17 (permalink)  
Antiguo 18/01/2006, 16:27
 
Fecha de Ingreso: enero-2006
Ubicación: Buenos Aires, Argentina
Mensajes: 299
Antigüedad: 18 años, 3 meses
Puntos: 5
No hay de qué. Y me alegro de que te haya resultado.

Suerte
Califa
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 20:00.