Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Priscila Thompson

Flash+XML+PHP

Recommended Posts

Olá pessoal.

 

Estou tentando fazer com que o flash crie dinamicamente o mesmo movieclip no stage, com "instance names" diferentes. O detalhe é que o número de mc´s é definido pelo número de nós em um arquivo xml.

 

Vamos aos códigos

 

user.xml

<?xml version="1.0" encoding="ISO-8859-1" ?><tbl_user>	<user>		<id_user>1</id_user>		<nome>Pripa</nome>		<xpos>12</xpos>		<ypos>20</ypos>	</user>	<user>		<id_user>2</id_user>		<nome>Marcus</nome>		<xpos>55</xpos>		<ypos>33</ypos>	</user></tbl_user>

flash

this.createEmptyMovieClip("conteiner", this.getNextHighestDepth());var meuXML:XML = new XML();var arrId:Array = new Array();var arrNome:Array = new Array();var inicio:Number = 0;meuXML.ignoreWhite = true;meuXML.onLoad = function() { 	for (i=0; i<meuXML.childNodes.length; i++) {		var id_user:String = (meuXML.childNodes[i].attributes.id_user);		var nome:String = (meuXML.childNodes[i].attributes.nome);		var xpos:String = (meuXML.childNodes[i].attributes.xpos);		var ypos:String = (meuXML.childNodes[i].attributes.ypos); 		arrXpos[i] = xpos; arrYpos[i] = ypos; 	} 	while (inicio<arrId.length) { 		conteiner.attachMovie("carinha_feliz", "carinha_feliz"+inicio, inicio);		var item:MovieClip = eval(conteiner["carinha_feliz"+inicio]); 		item._x = arrXpos[inicio];		item._y = arrYpos[inicio]; 		item.campoId = arrId[inicio];		item.campoNome = arrNome[inicio];		inicio++;	}};meuXML.load("user.xml");

O que está retornando é uma única carinha no stage, grudada no canto superior esquerdo.

 

O meu objetivo é:

 

1) Além de criar dinamicamente o número de carinhas de acordo com o número de <user> no xml, fazer com que ele se posicione dinamicamente de acordo com as coordenadas xpos e ypos passadas, seja draggable e ,pra completar a loucura, depois dê um post com os valores xpos, ypos ,id e nome pra um php que fará as alterações no banco mysql.

 

Bem, eu já consegui fazer isso tudo na mão.. colocando fisicamente o número de mc´s que eu queria no stage. Mas preciso que seja dinâmico.

 

E aí, alguma idéia????

Compartilhar este post


Link para o post
Compartilhar em outros sites

testa esse código

 

 

this.createEmptyMovieClip("conteiner", this.getNextHighestDepth());var meuXML:XML = new XML();var arrId:Array = new Array();var arrNome:Array = new Array();var inicio:Number = 0;meuXML.ignoreWhite = true;meuXML.onLoad = function() { var arrXpos = new Array()var arrYpos = new Array()	var todos=meuXML.childNodes[0].childNodes	for (i=0; i<meuXML.firstChild.childNodes.length; i++) {		var id_user:String = (todos[i].childNodes[0].childNodes).toString();		var nome:String =	 (todos[i].childNodes[1].childNodes).toString();		var xpos:String =	 (todos[i].childNodes[2].childNodes).toString();		var ypos:String = 	 (todos[i].childNodes[3].childNodes).toString(); 		arrXpos[i] = xpos;		arrYpos[i] = ypos; 	} 	while (inicio<arrXpos.length) { 		conteiner.attachMovie("carinha_feliz", "carinha_feliz"+inicio, inicio);		var item:MovieClip = eval(conteiner["carinha_feliz"+inicio]); 		item._x = (arrXpos[inicio]);		item._y = (arrYpos[inicio]); 		item.campoId = arrId[inicio];		item.campoNome = arrNome[inicio];		inicio++;	}};meuXML.load("user.xml");

Compartilhar este post


Link para o post
Compartilhar em outros sites

Éder,

 

você é o cara!!! Apareceram todas as carinhas... foi lindo! Só tem alguns probleminhas ainda. Eu declarei o startDrag e stopDrag e também o getproperty do _name (que eu coloquei como se fosse o arrId), _x e _y de cada item, e dou trace dessa cambada toda... só que depois de eu mover as carinhas ele só retorna as propriedades do último nó, independente de qual carinha eu mexo.

 

O código agora tá assim:

this.createEmptyMovieClip("conteiner", this.getNextHighestDepth());var meuXML:XML = new XML();var arrId:Array = new Array();var arrNome:Array = new Array();var inicio:Number = 0;meuXML.ignoreWhite = true;meuXML.onLoad = function() {var arrId = new Array()var arrNome = new Array()var arrXpos = new Array()var arrYpos = new Array()    var todos=meuXML.childNodes[0].childNodes    for (i=0; i<meuXML.firstChild.childNodes.length; i++) {        var id_user:String = (todos[i].childNodes[0].childNodes).toString();        var nome:String = (todos[i].childNodes[1].childNodes).toString();        var xpos:String = (todos[i].childNodes[2].childNodes).toString();        var ypos:String = (todos[i].childNodes[3].childNodes).toString();         arrXpos[i] = xpos;        arrYpos[i] = ypos;        arrNome[i] = nome;        arrId[i] = id_user;    }     while (inicio<arrXpos.length) {         conteiner.attachMovie("carinha_feliz", "carinha_feliz"+inicio, inicio);        var item:MovieClip = eval(conteiner["carinha_feliz"+inicio]);        item._x = (arrXpos[inicio]);        item._y = (arrYpos[inicio]);		item._name = (arrId[inicio]);		xPos = getProperty(item, _x);		yPos = getProperty(item, _y);		nome = getProperty(item, _name);		item.onPress = function() {    		this.startDrag(false,0,0,412,334);		};		trace (nome);		trace (xPos);		trace (yPos);		trace ("+++++++++++++++++");		item.onRelease = function() {    		this.stopDrag();			xPos = getProperty(item, _x);			yPos = getProperty(item, _y);			nome = getProperty(item, _name);			trace (nome);			trace (xPos);			trace (yPos);			trace ("+++++++++++++++++");		};        inicio++;    }};meuXML.load("user.xml");
O trace sai assim:

Antes de mexer as carinhas

1 >>id_user

20 >>xpos

80 >> ypos

+++++++++++++++++

2

55

33

+++++++++++++++++

Mexendo somente a segunda carinha

2

139

87

+++++++++++++++++

2

157

143

+++++++++++++++++

2

105

160

+++++++++++++++++

2

247

160

+++++++++++++++++

Mexendo somente a primeira carinha

2

247

160

+++++++++++++++++

2

247

160

+++++++++++++++++

2

247

160

+++++++++++++++++

 

Só pra você ter uma idéia do que são essas carinhas, tá aí o print da tela:

Imagem Postada

 

Ele tá pegando a última propriedade da última carinha..

Inclui mais um <user> no XML e aconteceu a mesma coisa.. ele só pegou o último.

 

Idéias?

Compartilhar este post


Link para o post
Compartilhar em outros sites

altera essa parte

 

item.onRelease = function() {   this.stopDrag();   xPos = getProperty(item, _x);   yPos = getProperty(item, _y);   nome = getProperty(item, _name);   trace (nome);   trace (xPos);   trace (yPos);   trace ("+++++++++++++++++");};

 

por essa

 

item.onRelease = function() {   this.stopDrag();   xPos = getProperty(this, _x);   yPos = getProperty(this, _y);   nome = getProperty(this, _name);   trace (nome);   trace (xPos);   trace (yPos);   trace ("+++++++++++++++++");};

Compartilhar este post


Link para o post
Compartilhar em outros sites

Éder... funcionou!!!!!!!!!!!Perfeito!

 

Agora estou tentando recuperar cada um dos valores de cada carinha para enviar como post, mas (mais uma vez)só passa o _x e o _y da última carinha mexida.. nem o id eu recupero...

 

:unsure:

 

O código agora tá assim:

this.createEmptyMovieClip("conteiner", this.getNextHighestDepth());var meuXML:XML = new XML();var arrId:Array = new Array();var arrNome:Array = new Array();var inicio:Number = 0;meuXML.ignoreWhite = true;meuXML.onLoad = function() {var arrId = new Array()var arrNome = new Array()var arrXpos = new Array()var arrYpos = new Array()    var todos=meuXML.childNodes[0].childNodes    for (i=0; i<meuXML.firstChild.childNodes.length; i++) {        var id_user:String = (todos[i].childNodes[0].childNodes).toString();        var nome:String = (todos[i].childNodes[1].childNodes).toString();        var xpos:String = (todos[i].childNodes[2].childNodes).toString();        var ypos:String = (todos[i].childNodes[3].childNodes).toString();         arrXpos[i] = xpos;        arrYpos[i] = ypos;		arrNome[i] = nome;		arrId[i] = id_user;    }     while (inicio<arrXpos.length) {         conteiner.attachMovie("carinha_feliz", "carinha_feliz"+inicio, inicio);        var item:MovieClip = eval(conteiner["carinha_feliz"+inicio]);        item._x = (arrXpos[inicio]);        item._y = (arrYpos[inicio]);		item._name = (arrId[inicio]);		xPos = getProperty(item, _x);		yPos = getProperty(item, _y);		nome = getProperty(item,_name);		trace (nome);		trace (xPos);		trace (yPos);		trace ("+++++++++++++++++");		item.onPress = function() {    		this.startDrag(false,0,0,412,334);		};		item.onRelease = function() {   			this.stopDrag();   			xPos = getProperty(this, _x);   			yPos = getProperty(this, _y);   			nome = getProperty(this, _name);   			trace (nome);   			trace (xPos);   			trace (yPos);   			trace ("+++++++++++++++++");		};        inicio++;    }};meuXML.load("user.xml");bt_enviar.onRelease = function() { getURL("enviar.php", "_self", "post"); };

att.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Grande Éder,

 

seguinte...

O meu problema é meio complexo, e assim como Jack, vamos por partes http://forum.imasters.com.br/public/style_emoticons/default/shifty.gif

 

O meu objetivo final é, além de receber todas essas variáveis pelo flash, poder modificar o x e y pelo flash e depois postar o id+x+y de cada carinha pra uma página PHP que vai inserir esses dados no banco.

 

Ou seja, tenho que colocar um identificador em cada x e y pra poder recuperar eles de acordo com o id...

 

Por exemplo: Se o id_user="1" então ficaria id_user1=1, xPos1=?(whatever) e yPos1=?(whatever) passados para o PHP. O problema é que eu não posso dar um id_user qualquer, tem que ser o que vem do xml (que identifica o usuário no banco),sacou?

 

O meu código agora tá assim:

this.createEmptyMovieClip("conteiner", this.getNextHighestDepth());var meuXML:XML = new XML();var arrId:Array = new Array();var arrNome:Array = new Array();var inicio:Number = 0;meuXML.ignoreWhite = true;meuXML.onLoad = function() {var arrId = new Array()var arrNome = new Array()var arrXpos = new Array()var arrYpos = new Array()    var todos=meuXML.childNodes[0].childNodes    for (i=0; i<meuXML.firstChild.childNodes.length; i++) {        var id_user:String = (todos[i].childNodes[0].childNodes).toString();        var nome:String = (todos[i].childNodes[1].childNodes).toString();        var xpos:String = (todos[i].childNodes[2].childNodes).toString();        var ypos:String = (todos[i].childNodes[3].childNodes).toString();         arrXpos[i] = xpos;        arrYpos[i] = ypos;		arrNome[i] = nome;		arrId[i] = id_user;    }     while (inicio<arrXpos.length) {         conteiner.attachMovie("carinha_feliz", "carinha_feliz"+inicio, inicio);        var item:MovieClip = eval(conteiner["carinha_feliz"+inicio]);        item._x = (arrXpos[inicio]);        item._y = (arrYpos[inicio]);		item.id = (arrId[inicio]);		item.nome = (arrNome[inicio]);		xPos = getProperty(item, _x);		yPos = getProperty(item, _y);		id = (item.id);		nome = (item.nome);		item.onPress = function() {    		this.startDrag(false,18,19,413,333);		};		item.onRelease = function() {   			this.stopDrag();   			xPos = getProperty(this, _x);   			yPos = getProperty(this, _y);   			id = (this.id);			nome = (this.nome);			_root.createTextField("mytext",20,20,360,300,20);			mytext.text = ("Nome: "+nome+"   id_user: "+id+"   xPos:"+xPos+"   yPos: "+yPos);		};        inicio++;    }};meuXML.load("user.xml");bt_enviar.onRelease = function() { getURL("enviar.php", "_self", "post"); };

Com o código do jeito que está eu consigo enviar os dados somente da última carinha que eu mexi. Tem alguma forma de recuperar o valor de todo mundo do jeito que eu falei?

 

[]´s

Compartilhar este post


Link para o post
Compartilhar em outros sites

entendi, vai ser meio complexo mesmomas para chamar a pagina você esta usando getURLdá uma pesquisada sobre a classe loadVars, com ela você tem mais controle sobre o que esta enviando para uma pagina phpqualquer coisa dá um grito

Compartilhar este post


Link para o post
Compartilhar em outros sites

Éder...Cá com os meus botões, pensei..Tem como dar saída dessas variáveis todas em XML? aí eu não preciso adicionar o id_user à cada variável passada.<user><id_user></id_user><nome></nome><xpos></xpos><ypos></ypos></user>Existe essa possibilidade? Gerar o XML através do flash?

Compartilhar este post


Link para o post
Compartilhar em outros sites

você pode fazer de duas maneira, gerar o xml no flash, e mandar para o PHP ele interiro, para então p PHP gravar, isso se você manjar mais de action scrip

 

 

ou(o q eu recomendo) é mandar para o php só as posições das caras e lá você grava no banco

 

 

faça o seguinte, usando um laço pegue a posição de todos as carinhas na tela e monte uma string só

 

var dados=""for (i=0; i<meuXML.firstChild.childNodes.length; i++) {  var item:MovieClip = eval(conteiner["carinha_feliz"+i]);  dados+=item.id + ";" +item._x + ";"+ item._y + "|"}

 

 

repara que eu separei os dados assim "id ; posiçao X ; posição Y | id ; posiçao X ; posição Y | id ; posiçao X ; posição Y | "

 

 

no PHP você usará a função explode para separar esses dados e tranforma-los em um Array, paar manipula-los

 

 

 

vai tentando ai

Compartilhar este post


Link para o post
Compartilhar em outros sites

http://forum.imasters.com.br/public/style_emoticons/default/upset.gif afffffffffffffff

Num tô guentando mais!!

 

Meu problema agora é que o desgraçado do botão não tá chamando a minha página em php... tô usando o tal do sendandload ...

 

Código do fla

this.createEmptyMovieClip("conteiner", this.getNextHighestDepth());var meuXML:XML = new XML();var inicio:Number = 0;meuXML.ignoreWhite = true;meuXML.onLoad = function() {var arrId = new Array()var arrNome = new Array()var arrXpos = new Array()var arrYpos = new Array() 	var dados="";    var todos=meuXML.childNodes[0].childNodes    for (i=0; i<meuXML.firstChild.childNodes.length; i++) {        var id_user:String = (todos[i].childNodes[0].childNodes).toString();        var nome:String = (todos[i].childNodes[1].childNodes).toString();        var xpos:String = (todos[i].childNodes[2].childNodes).toString();        var ypos:String = (todos[i].childNodes[3].childNodes).toString();         arrXpos[i] = xpos;        arrYpos[i] = ypos;		arrNome[i] = nome;		arrId[i] = id_user;    }     while (inicio<arrXpos.length) {        	conteiner.attachMovie("carinha_feliz", "carinha_feliz"+inicio, inicio);		var item:MovieClip = eval(conteiner["carinha_feliz"+inicio]);		item._x = (arrXpos[inicio]);        item._y = (arrYpos[inicio]);		item.id = (arrId[inicio]);		item.nome = (arrNome[inicio]);		xPos = getProperty(item, _x);		yPos = getProperty(item, _y);		id = (item.id);		nome = (item.nome);		dados+=id + ";" +xPos + ";"+yPos + "|"		item.onPress = function() {    		this.startDrag(false,18,19,413,333);		};		item.onRelease = function() {			this.stopDrag();   			xPos = getProperty(this, _x);   			yPos = getProperty(this, _y);   			id_user = (this.id);			nome = (this.nome);			_root.createTextField("mytext",20,10,360,330,20);			mytext.text = ("Nome: "+nome+"   id_user: "+id_user+"   xPos:"+xPos+"   yPos: "+yPos);			dados+=id_user + ";" +xPos + ";"+yPos + "|";			trace(dados);		};		inicio++;    }			var envia:LoadVars = new LoadVars();			bt_enviar.onRelease = function() {			   envia.valor = dados;			   envia.sendAndLoad("enviar2.php", envia, "POST");			   envia.onLoad = function(ok) {				  if (ok) {					 trace(this.mensagem);				  }			   }			}};meuXML.load("uploads/user.xml");

ah! quando eu aperto o botão o trace sai assim ó:

$valor";?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" /><title>Untitled Document</title></head><body></body></html>

Compartilhar este post


Link para o post
Compartilhar em outros sites

Éder, meu herói!A página php nem tá abrindo...tipo, parece que o flash não está chamando ela! O código tá abaixo:

<?php$valor = utf8_decode(@$_POST['valor']);print "&mensagem=$valor";?>

O trace é que "parece" que abre ela (como pode???)... o trace (quando aperto o botão) sai assim:

$valor";?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" /><title>Untitled Document</title></head><body></body></html>

vou pirar, bicho.... num tô entendo o que acontece...

Compartilhar este post


Link para o post
Compartilhar em outros sites

Com o crtl+enter eu só dou o trace...mas de qq forma eu tô rodando a página em localhost... e mesmo colocando em outro servidor web, não tá abrindo...A sintaxe do botão me parece estar certa....[]´sPriscila

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.